在处理移动的时候有太多种情况了:

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++简单项目--推箱子的更多相关文章

  1. 用C写一个简单的推箱子游戏(二)

    下面接着上一篇随笔<用C写一个简单的推箱子游戏(一)>来写 tuidong()函数是用来判断游戏人物前方情况的函数,是推箱子游戏中非常重要的一个函数,下面从它开始继续介绍推箱子的小程序怎么 ...

  2. 用C写一个简单的推箱子游戏(一)

    我现在在读大二,我们有一门课程叫<操作系统>,课程考查要求我们可以写一段程序或者写Windows.iOS.Mac的发展历程.后面我结合网上的资料参考,就想用自己之前简单学过的C写一关的推箱 ...

  3. C++学习(九)(C语言部分)之 项目 推箱子游戏

    游戏制作 推箱子 步骤分析 1.模板 2.模板分析 组成元素: 空地 墙 人 目的地 箱子 背景 3.如何操作 通过WASD键盘操作人,推着箱子,到达目的地,游戏结束,如果箱子卡在死角则游戏失败 4. ...

  4. c++、c实现推箱子小游戏

    经过四次的修改和优化,终于将推箱子这个游戏完整的写出来了,今天就像大家分享一下这个游戏的编写. 这个游戏界面的编写总的来说不困难,主要是推动箱子的算法. (1)利用数组和windows api 即可写 ...

  5. c#部分---网吧充值系统;简易的闹钟;出租车计费;简单计算器;对战游戏;等额本金法计算贷款还款利息等;随机生成10个不重复的50以内的整数;推箱子;

    网吧充值系统namespace ConsoleApplication1 { class Program { struct huiyuan { public string name; public st ...

  6. C/C++编程笔记:C语言写推箱子小游戏,大一学习C语言练手项目

    C语言,作为大多数人的第一门编程语言,重要性不言而喻,很多编程习惯,逻辑方式在此时就已经形成了.这个是我在大一学习 C语言 后写的推箱子小游戏,自己的逻辑能力得到了提升,在这里同大家分享这个推箱子小游 ...

  7. 每个人都可以用C语言写的推箱子小游戏!今天你就可以写出属于自己项目~

    C语言,作为大多数人的第一门编程语言,重要性不言而喻,很多编程习惯,逻辑方式在此时就已经形成了.这个是我在大一学习 C语言 后写的推箱子小游戏,自己的逻辑能力得到了提升,在这里同大家分享这个推箱子小游 ...

  8. 完整版本的推箱子小游戏,最简单的纯C语言打造

    /* 推箱子小游戏 1.定义绘制样式 用二维数组的方式 2.绘制图像 3.找出当前位置 4.逻辑判断,制造动作 根据数学xy轴的规律,这里使用ij 上移,行轴上升,行数减少 下移,行数下降,函数增加 ...

  9. c语言推箱子 扫雷项目

    推箱子 两关的推箱子用到一个三维数组 用到的图片数据如下 https://pan.baidu.com/s/1IDE4GQLo46cxNywDqwxmlQ 密码:jdel 代码如下: #include& ...

随机推荐

  1. 5 获取Form表单取值

    #form表达提交@app.route("/data",methods=['GET','POST']) #methods 让当前路由支持GET 和 POST 方式def data( ...

  2. 关于Java语言for循环内外变量定义的问题

    今天看书时,看到一个代码,一个在循环外面没有用的变量,后即有了我的问题,在后面: 我的问题: 变量循环内定义,例如:while(true){String splitStr = null;}这“些”个s ...

  3. behavior planning——10 behaior planning pseudocode

    One way to implement a transition function is by generating rough trajectories for each accessible & ...

  4. os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" os.environ["CUDA_VISIBLE_DEVICES"] = "0"

    os.environ[“CUDA_DEVICE_ORDER”] = “PCI_BUS_ID” # 按照PCI_BUS_ID顺序从0开始排列GPU设备 os.environ[“CUDA_VISIBLE_ ...

  5. iptables禁止ssh端口

    只允许在192.168.62.1上使用ssh远程登录,从其它计算机上禁止使用ssh #iptables -A INPUT -s 192.168.62.1 -p tcp --dport 22 -j AC ...

  6. 2018-8-10-win10-uwp-获得元素绝对坐标

    title author date CreateTime categories win10 uwp 获得元素绝对坐标 lindexi 2018-08-10 19:16:51 +0800 2018-2- ...

  7. Python--day21--异常处理

    初识try: except -->异常处理 万能异常的用法:except Exception as error:

  8. H3C Basic NAT配置示例

  9. Spring Boot笔记之邮件(spring-boot-starter-mail)

    Spring Boot环境中发送邮件 pom.xml引入`spring-boot-starter-mail` application.yml配置 163邮箱 QQ邮箱 Gmail邮箱 发送邮件 ser ...

  10. 【codeforces 761A】Dasha and Stairs

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...