C++简单项目--推箱子
在处理移动的时候有太多种情况了:
1、有空位
2、在推箱子,推到了空地
3、推箱子推到了目标,
4、推目标位的箱子推到另一个目标
5、推目标位的箱子推到空地
首先记录目标位置,在每次推动之后会再绘画中自动修正目标位置的情况
修改地图之后发现不能将上述情况的5实现,还要再改。
接下来应该尝试如何实现多个关卡或者从文件中读取地图信息
#include<iostream>
#include<graphics.h>
#include<conio.h>
#include<vector>
using namespace std;
//0空白,1墙,2人,3箱子,4目标,5箱子与目标,6人与目标
int x, y,temp;
vector<int>goalx, goaly;
int mapp[][] = {,,,,, ,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,,, ,
,,,,, ,,,,,,,,,,,,,,,, ,,,, ,,, ,,,, ,,,, ,,, ,
,,,,,,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,,
,,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,, ,
,,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,, ,
,,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,, ,
,,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,, ,
,,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,, ,
,,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,, ,
,,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,, ,
,,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,, ,
,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,,
};
void scann() {
int i, j;
for (i = ; i < ; i++) {
for (j = ; j < ; j++) {
if (mapp[i][j] >= ) {
goalx.push_back(i);
goaly.push_back(j);
}
}
}
}
void drawmapp() {
int i, j,k;
for (i = ; i < ; i++) {
for (j = ; j < ; j++) {
for (k = ; k < goalx.size(); k++) {
if (i == goalx[k] && j == goaly[k]) {
if (mapp[i][j] == ) {
mapp[i][j] = ;
}
if (mapp[i][j] == ) {
mapp[i][j] = ;
}
if (mapp[i][j] == ) {
mapp[i][j] = ;
} }
}
switch (mapp[i][j]) {
case :
setlinecolor(RGB(,,));
setfillcolor(RGB(, , ));
fillrectangle(j * , i * , j * + , i * + );
break;
case :
x = i;
y = j;
setlinecolor(RGB(, , ));
setfillcolor(RGB(, , ));
fillrectangle(j * , i * , j * + , i * + );
break;
case :
setlinecolor(RGB(, , ));
setfillcolor(RGB(, , ));
fillrectangle(j * , i * , j * + , i * + );
break;
case :
setlinecolor(RGB(, , ));
setfillcolor(RGB(, , ));
fillrectangle(j * , i * , j * + , i * + );
break;
case :
setlinecolor(RGB(, , ));
setfillcolor(RGB(, , ));
fillrectangle(j * , i * , j * + , i * + );
break;
case :
x = i;
y = j;
setlinecolor(RGB(, , ));
setfillcolor(RGB(, , ));
fillrectangle(j * , i * , j * + , i * + );
break;
}
}
}
}
void keyDown() {
char ch = '\0';
ch = _getch();
switch (ch)
{
case 'w':
case 'W':
if (mapp[x - ][y] == ) {
temp = mapp[x][y];
mapp[x][y] = mapp[x - ][y];
mapp[x - ][y] =;
}
if (mapp[x - ][y] == ) {
mapp[x][y] = ;
mapp[x - ][y] = ;
}
if (mapp[x - ][y] == && mapp[x-][y]==) {
mapp[x-][y] = ;
mapp[x - ][y] = ;
mapp[x][y] = ;
}
if (mapp[x - ][y] == && mapp[x - ][y] == ) {
mapp[x - ][y] = ;
mapp[x - ][y] = ;
mapp[x][y] = ;
}
if (mapp[x - ][y] == && mapp[x - ][y] == ) {
mapp[x - ][y] = ;
mapp[x - ][y] = ;
mapp[x][y] = ;
}
if (mapp[x - ][y] == && mapp[x - ][y] == ) {
mapp[x - ][y] = ;
mapp[x - ][y] = ;
mapp[x][y] = ;
} break;
case 'a':
case 'A':
if (mapp[x][y-] == ) {
temp = mapp[x][y];
mapp[x][y] = mapp[x][y-];
mapp[x][y-] =;
}
if (mapp[x][y-] == ) {
mapp[x][y] = ;
mapp[x][y-] = ;
}
if (mapp[x][y-] == && mapp[x][y-] == ) {
mapp[x][y-] = ;
mapp[x][y-] = ;
mapp[x][y] = ;
}
if (mapp[x][y - ] == && mapp[x][y - ] == ) {
mapp[x][y - ] = ;
mapp[x][y - ] = ;
mapp[x][y] = ;
}
if (mapp[x][y - ] == && mapp[x][y - ] == ) {
mapp[x][y - ] = ;
mapp[x][y - ] = ;
mapp[x][y] = ;
}
if (mapp[x][y - ] == && mapp[x][y - ] ==) {
mapp[x][y - ] = ;
mapp[x][y - ] = ;
mapp[x][y] = ;
}
break;
case 's':
case 'S':
if (mapp[x + ][y] == ) {
temp = mapp[x][y];
mapp[x][y] = mapp[x + ][y];
mapp[x + ][y] =;
}
if (mapp[x + ][y] == ) {
mapp[x][y] = ;
mapp[x + ][y] = ;
}
if (mapp[x + ][y] == && mapp[x + ][y] == ) {
mapp[x + ][y] = ;
mapp[x + ][y] = ;
mapp[x][y] = ;
}
if (mapp[x + ][y] == && mapp[x + ][y] == ) {
mapp[x + ][y] = ;
mapp[x + ][y] = ;
mapp[x][y] = ;
}
if (mapp[x + ][y] == && mapp[x + ][y] == ) {
mapp[x + ][y] = ;
mapp[x + ][y] = ;
mapp[x][y] = ;
}
if (mapp[x + ][y] == && mapp[x + ][y] == ) {
mapp[x + ][y] = ;
mapp[x + ][y] = ;
mapp[x][y] = ;
}
break;
case 'd':
case 'D':
if (mapp[x][y+] == ) {
mapp[x][y] = mapp[x][y+];
mapp[x][y+] =;
}
if (mapp[x][y+] == ) {
mapp[x][y] = ;
mapp[x][y+] = ;
}
if (mapp[x][y+] == && mapp[x][y+] == ) {
mapp[x][y+] = ;
mapp[x][y+] = ;
mapp[x][y] = ;
}
if (mapp[x][y + ] == && mapp[x][y + ] == ) {
mapp[x][y + ] = ;
mapp[x][y + ] = ;
mapp[x][y] = ;
}
if (mapp[x][y + ] == && mapp[x][y + ] == ) {
mapp[x][y + ] = ;
mapp[x][y + ] = ;
mapp[x][y] = ;
}
if (mapp[x][y + ] == && mapp[x][y + ] ==) {
mapp[x][y + ] = ;
mapp[x][y + ] = ;
mapp[x][y] = ;
}
break;
default:
break;
}
}
int main() {
int kl;
bool checkk;
HWND hwnd=initgraph(, );
setbkcolor(RGB(,,));
cleardevice();
drawmapp();
scann();
while (true) {
checkk = true;
settextcolor(BLACK);
outtextxy(, , "WASD控制");
keyDown();
cleardevice();
drawmapp();
for (kl = ; kl < goalx.size(); kl++) {
if (mapp[goalx[kl]][goaly[kl]] != ) checkk = false;
}
if (checkk) {
MessageBox(hwnd, "Finish", "Finish!", );
break;
}
}
system("pause");
return ; }
C++简单项目--推箱子的更多相关文章
- 用C写一个简单的推箱子游戏(二)
下面接着上一篇随笔<用C写一个简单的推箱子游戏(一)>来写 tuidong()函数是用来判断游戏人物前方情况的函数,是推箱子游戏中非常重要的一个函数,下面从它开始继续介绍推箱子的小程序怎么 ...
- 用C写一个简单的推箱子游戏(一)
我现在在读大二,我们有一门课程叫<操作系统>,课程考查要求我们可以写一段程序或者写Windows.iOS.Mac的发展历程.后面我结合网上的资料参考,就想用自己之前简单学过的C写一关的推箱 ...
- C++学习(九)(C语言部分)之 项目 推箱子游戏
游戏制作 推箱子 步骤分析 1.模板 2.模板分析 组成元素: 空地 墙 人 目的地 箱子 背景 3.如何操作 通过WASD键盘操作人,推着箱子,到达目的地,游戏结束,如果箱子卡在死角则游戏失败 4. ...
- c++、c实现推箱子小游戏
经过四次的修改和优化,终于将推箱子这个游戏完整的写出来了,今天就像大家分享一下这个游戏的编写. 这个游戏界面的编写总的来说不困难,主要是推动箱子的算法. (1)利用数组和windows api 即可写 ...
- c#部分---网吧充值系统;简易的闹钟;出租车计费;简单计算器;对战游戏;等额本金法计算贷款还款利息等;随机生成10个不重复的50以内的整数;推箱子;
网吧充值系统namespace ConsoleApplication1 { class Program { struct huiyuan { public string name; public st ...
- C/C++编程笔记:C语言写推箱子小游戏,大一学习C语言练手项目
C语言,作为大多数人的第一门编程语言,重要性不言而喻,很多编程习惯,逻辑方式在此时就已经形成了.这个是我在大一学习 C语言 后写的推箱子小游戏,自己的逻辑能力得到了提升,在这里同大家分享这个推箱子小游 ...
- 每个人都可以用C语言写的推箱子小游戏!今天你就可以写出属于自己项目~
C语言,作为大多数人的第一门编程语言,重要性不言而喻,很多编程习惯,逻辑方式在此时就已经形成了.这个是我在大一学习 C语言 后写的推箱子小游戏,自己的逻辑能力得到了提升,在这里同大家分享这个推箱子小游 ...
- 完整版本的推箱子小游戏,最简单的纯C语言打造
/* 推箱子小游戏 1.定义绘制样式 用二维数组的方式 2.绘制图像 3.找出当前位置 4.逻辑判断,制造动作 根据数学xy轴的规律,这里使用ij 上移,行轴上升,行数减少 下移,行数下降,函数增加 ...
- c语言推箱子 扫雷项目
推箱子 两关的推箱子用到一个三维数组 用到的图片数据如下 https://pan.baidu.com/s/1IDE4GQLo46cxNywDqwxmlQ 密码:jdel 代码如下: #include& ...
随机推荐
- hdu 1839 Delay Constrained Maximum Capacity Path(spfa+二分)
Delay Constrained Maximum Capacity Path Time Limit: 10000/10000 MS (Java/Others) Memory Limit: 65 ...
- 学习HTML<audio>标签
首先来看下这个例子: <audio controls autoplay="autoplay"> <source src="horse.ogg" ...
- oracle sum()聚合函数
原文链接:https://blog.csdn.net/cizatu5130/article/details/100291347 oracle sum()聚合函数 2016-05-13 20:08:00 ...
- docker 使用总结
docker run asn@hadoop1:~/Desktop$ docker run --help Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG ...
- Java多线程遍历文件夹,广度遍历加多线程加深度遍历结合
复习IO操作,突然想写一个小工具,统计一下电脑里面的Java代码量还有注释率,最开始随手写了一个递归算法,遍历文件夹,比较简单,而且代码层次清晰,相对易于理解,代码如下:(完整代码贴在最后面,前面是功 ...
- localStorage、sessionStorage、cookie的区别
localStorage: 存储的内容大概20MB 不同浏览器不能共享,但是在同一浏览器的不同窗口中可以共享 永久生效,它的数据是存储的硬盘上,并不会随着页面或者浏览器的关闭而清楚,需手动清除 ses ...
- BiLSTM-CRF学习笔记(原理和理解) 维特比
BiLSTM-CRF 被提出用于NER或者词性标注,效果比单纯的CRF或者lstm或者bilstm效果都要好. 根据pytorch官方指南(https://pytorch.org/tutorials/ ...
- 2019-10-5-dotnet-core-获取-MacAddress-地址方法
title author date CreateTime categories dotnet core 获取 MacAddress 地址方法 lindexi 2019-10-05 10:44:10 + ...
- (超级详细版)利用ThinkPHP3.2.3+PHPExcel实现将表格数据导入到数据库
请先阅读以下步骤再到结尾下载源码 第一步:下载 thinkphp_3.2.3 和 PHPExcel_1.8.0 并解压 对应的网站分别为: http://www.thinkphp.cn/down.ht ...
- UVa 1374 - Power Calculus——[迭代加深搜索、快速幂]
解题思路: 这是一道以快速幂计算为原理的题,实际上也属于求最短路径的题目类型.那么我们可以以当前求出的幂的集合为状态,采用IDA*方法即可求解.问题的关键在于如何剪枝效率更高.笔者采用的剪枝方法是: ...