首页 > 其他分享 >5.8推箱子游戏测试

5.8推箱子游戏测试

时间:2023-05-08 21:23:54浏览次数:38  
标签:箱子 uy 游戏 map 5.8 ry dy ux

一 推箱子游戏

二 代码与思路

#include<iostream>
using namespace std;
#include<stdlib.h>
#include<conio.h>
#define WIDTH 8 //地图宽度
#define HEIGHT 8 //地图长度
//定义地图 后期会做多地图
/*地图表示
0 空地
1 墙
2 人
3 箱子
4 箱子的目的地
5 到达目的地的箱子
*/
int map[WIDTH][HEIGHT] =
{
{0,0,0,0,0,0,3,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,2,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0}
};
//人的位置
int x, y;
//箱子个数 成功的标志是箱子=0;
int boxs=0;
//数据初始化
void initDate();
//打印地图
void drawMap();
//向上移动
void moveUp();
//向左移动
void moveLeft();
//向下移动
void moveDown();
//向右移动
void moveRight();
int main()
{
char direction; //存储输入
initDate(); //数据初始化
//开始循环 每按一次按键都会刷新直至胜利
while (1)
{
system("cls");//清屏函数
drawMap();//画图
//箱子数量为0时胜利
if(!boxs)
{
break;
}
//接受输入
direction = _getch();
//用switch选择语句判断输入
switch (direction)
{
case'w':
moveUp();//向上移动
break;
case 'a':
moveLeft();
break;
case's':
moveDown();
break;
case'd':
moveRight();
break;
}

}
//跳出循环时恭喜胜利
cout << "恭喜你赢了";
}
void initDate()//数据初始化
{
int i, j;
cout << "游戏加载中...";
//遍历地图数据
for (i = 0; i < HEIGHT; i++)
{
for (j = 0; j < WIDTH; j++)
{
//遍历到2时记录人的坐标
if (map[i][j] == 2)
{
x = j;
y = i;
}
//遍历到3时 箱子数目增加
if (map[i][j] == 3)
{
boxs++;
}
}
}
}
void drawMap()
{
int i, j;
for (i = 0; i < WIDTH; i++)
{
for (j = 0; j < HEIGHT; j++)
{
switch(map[i][j])
{
case 0:
cout << " ";
break;
case 1:
cout << "墙";
break;
case 2:
cout << "你";
break;
case 3:
cout << "箱";
break;
case 4:
cout << "标";
break;
case 5:
cout << "达";
break;
}
}
cout << endl;
}
}
void moveUp()
{
//定义人物上方的目标
int ux, uy;
//人在最上方不能上移
if (y == 0)
{
return;
}
ux = x;
uy = y - 1;
//上方为完成的箱子 或本身
if (map[uy][ux] == 5|| map[uy][ux] == 2)
{
return;
}
//上方为墙
if (map[uy][ux] == 1)
{
return;
}
//上方为空地
if (map[uy][ux] == 0)
{
map[y][x] = 0;
map[uy][ux] = 2;
y = uy;//更新人的坐标
}
//上方为箱子
if (map[uy][ux] == 3)
{
//箱子上方为墙 箱子 或完成的箱子
if (map[uy - 1][ux] == 1 || map[uy - 1][ux] == 4 || map[uy - 1][ux] == 5)
{
return;
}
//箱子上方为目的地
if (map[uy - 1][ux] == 4)
{
map[uy - 1][ux] = 5;
map[uy][ux] = 2;
map[y][x] = 0;
x = ux;
y = uy - 1;
}
//箱子上方是空地
if (map[uy - 1][ux] == 0)
{
map[uy - 1][ux] = 3;
map[uy][ux] = 2;
map[y][x] = 0;
x = ux;
y = uy - 1;
}
}
}
void moveLeft()
{
//定义人物左方的目标
int lx, ly;
//人在最左方不能左移
if (x == 0)
{
return;
}
lx = x - 1;
ly = y;
//左方为完成的箱子
if (map[ly][lx] == 5)
{
return;
}
//左方为墙
if (map[ly][lx] == 1)
{
return;
}
//左方为空地
if (map[ly][lx] == 0)
{
map[y][x] = 0;
map[ly][lx] = 2;
y = ly;//更新人的坐标
}
//左方为箱子
if (map[ly][lx] == 3)
{
//箱子左方为墙 箱子 或完成的箱子
if (map[ly][lx - 1] == 1 || map[ly][lx - 1] == 4 || map[ly][lx - 1] == 5)
{
return;
}
//箱子左方为目的地
if (map[ly][lx] == 4)
{
map[ly][lx - 1] = 5;
map[ly][lx] = 2;
map[y][x] = 0;
x = lx - 1;
y = ly;
}
//箱子左方是空地
if (map[ly][lx - 1] == 0)
{
map[ly][lx - 1] = 3;
map[ly][lx] = 2;
map[y][x] = 0;
x = lx - 1;
y = ly;
}
}
}
void moveDown()
{
//定义人物下方的目标
int dx, dy;
//人在最下方不能下移
if (y == 7)
{
return;
}
dx = x;
dy = y + 1;
//下方为完成的箱子
if (map[dy][dx] == 5)
{
return;
}
//下方为墙
if (map[dy][dx] == 1)
{
return;
}
//下方为空地
if (map[dy][dx] == 0)
{
map[y][x] = 0;
map[dy][dx] = 2;
y = dy;//更新人的坐标
}
//下方为箱子
if (map[dy][dx] == 3)
{
//箱子下方为墙 箱子 或完成的箱子
if (map[dy + 1][dx] == 1 || map[dy + 1][dx] == 4 || map[dy + 1][dx] == 5)
{
return;
}
//箱子下方为目的地
if (map[dy + 1][dx] == 4)
{
map[dy + 1][dx] = 5;
map[dy][dx] = 2;
map[y][x] = 0;
x = dx;
y = dy + 1;
}
//箱子下方是空地
if (map[dy + 1][dx] == 0)
{
map[dy + 1][dx] = 3;
map[dy][dx] = 2;
map[y][x] = 0;
x = dx;
y = dy + 1;
}
}
}
void moveRight()
{
//定义人物右方的目标
int rx, ry;
//人在最右方不能右移
if (x == 7)
{
return;
}
rx = x + 1;
ry = y;
//右方为完成的箱子
if (map[ry][rx] == 5)
{
return;
}
//右方为墙
if (map[ry][rx] == 1)
{
return;
}
//右方为空地
if (map[ry][rx] == 0)
{
map[y][x] = 0;
map[ry][rx] = 2;
y = ry;//更新人的坐标
}
//右方为箱子
if (map[ry][rx] == 3)
{
//箱子右方为墙 箱子 或完成的箱子
if (map[ry][rx + 1] == 1 || map[ry][rx + 1] == 4 || map[ry][rx + 1] == 5)
{
return;
}
//箱子右方为目的地
if (map[ry][rx] == 4)
{
map[ry][rx + 1] = 5;
map[ry][rx] = 2;
map[y][x] = 0;
x = rx + 1;
y = ry;
}
//箱子右方是空地
if (map[ry][rx + 1] == 0)
{
map[ry][rx + 1] = 3;
map[ry][rx] = 2;
map[y][x] = 0;
x = rx + 1;
y = ry;
}
}
}

标签:箱子,uy,游戏,map,5.8,ry,dy,ux
From: https://www.cnblogs.com/galileo9527/p/17383184.html

相关文章

  • 5.8每日总结
    今天上了软件工程课,在课上老师讲了团队绩效考核的一些评价标准和需要注意的一些问题,意识到了在团队中的自我价值要通过自己的表现去争取,之后将要开展第二轮的团队项目的冲刺,并布置了期末的任务,后来在课上老师组织我们进行了一些团队合作活动。接下来将会和小组成员讨论下一阶段......
  • 学习日记23.5.8
     今日学习sql:4小时学习了数据库的查询方面的知识:字符串匹配,以及两个新函数RTRIM(列名):功能是去掉指定列中尾随的空格,返回没有尾随空格的数据。substring():用于截取字符串,可从字符串的某一位置开始,向右截取若干个字符,返回一个特定长度的字符串substring('zhangsan',2)返回......
  • 5.8每日总结
    今天上了软件工程课,在课上老师讲了团队绩效考核的一些评价标准和需要注意的一些问题,意识到了在团队中的自我价值要通过自己的表现去争取,之后将要开展第二轮的团队项目的冲刺,并布置了期末的任务,后来在课上老师组织我们进行了一些团队合作活动。接下来将会和小组成员讨论下一阶段......
  • 1263. 推箱子
    题目链接:1263.推箱子方法:双端队列+BFS解题思路[Python3/Java/C++/Go/TypeScript]一题一解:双端队列BFS(清晰题解)代码classSolution{public:intminPushBox(vector<vector<char>>&grid){intm=grid.size(),n=grid[0].size();intsi,sj,......
  • 2023.5.8编程一小时打卡
    一、问题描述:初始化int类型数组date1[]={1,3,5,7,9,11,13,15,17,19,2,4,6,8,10,12,14,16,18,20},应用本章的直接插入排序模板进行排序,对此函数模板稍作修改,加入输出语句,在每一个待排序元素后显示整个数组,观察排序过程中数据的变化,加深对插入排序算法的理解。二、解题思路:首先,定......
  • 2023.5.8
    1#include<iostream>2usingnamespacestd;3#include<fstream>4#include<iomanip>5voidtest()6{7intnum;8cout<<"请输入一个十进制整数:"<<endl;9cin>>num;10//十进制输出11cou......
  • 5.8
    一、问题描述:输出所有的“水仙花数”,所谓的“水仙花数”是指一个位数其各位数字的立方和等于该数本身,例如,153是“水仙花数”,因为153=1^3+1^3+3^3。二、设计思路:“水仙花数”是指满足某一条件的三位数,根据这一信息可以确定整数的取值范围是100~999。对应的循环条件如下:for(n=100;n......
  • day67(2023.5.8)
    1.事件之绑定事件处理器 运行结果: 运行结果: 运行结果: 2.事件之鼠标事件 运行结果: 运行结果: 鼠标进入的时候,灰色块块出来,鼠标移开的时候,灰色块块隐藏。 运行结果: 运行结果: 运行结果: 3.事件之表单事件......
  • 5.8
    #include<stdio.h>inta[14];main(){inti,j=1,n;printf("魔术师手中的牌原始次序是:\n");for(i=1;i<=13;i++){n=1;do{if(j>13)j=1;if(a[j])j++;else{if(n==i)a[j]=i;j++;n++;}}while(n<=i);}for(i=1;i<=13;i++)printf("%d",a[i]);printf("\......
  • 2023.5.8——软件工程日报
    所花时间(包括上课):6h代码量(行):0行博客量(篇):1篇今天,上午学习,下午学习并开会。我了解到的知识点:1.了解了一些数据库的知识;2.了解了一些python的知识;3.了解了一些英语知识;5.了解了一些Javaweb的知识;4.了解了一些数学建模的知识;6.了解了一些计算机网络的知识;7.在王老师的组织......