/*
* 修改记录:
* 1、问题:如果上面是墙,按向上走,则上面变成了一个箱子
* 原因:将等于“==”写成了“=”,导致if里面不是判断,而是直接赋值
* 2、问题:使用system("cls");函数刷新的频率太慢
修改:使用easyX提供的cleardevice();清屏函数
*/
#include <stdio.h> //标准输入输出
#include <conio.h> //键盘操作
#include <stdlib.h>
#include <windows.h>
#include <graphics.h>
//把地图抽象为二维数组----地图由 8*8 个箱子组成,因此数组的大小也是 8*8
//用 0:空地 1:墙 2:目的地有箱子 3:目的地没箱子 4:箱子 5:人不在目的地 6:人在目的地
int map[8][8] = {
{0,0,1,1,1,0,0,0},
{0,0,1,3,1,0,0,0},
{0,0,1,0,1,1,1,1},
{1,1,1,4,0,4,3,1},
{1,3,0,4,5,1,1,1},
{1,1,1,1,4,1,0,0},
{0,0,0,1,3,1,0,0},
{0,0,0,1,1,1,0,0}
};
int num = 0; //先获得没有箱子的目标点的个数
IMAGE img0, img1, img2, img3, img4, img5;
void load();//EasyX加载图像的函数声明
void draw();//绘制地图的函数声明
void game();//玩游戏的函数
void getNum();//获得目标点个数的函数
bool judgeWin();//判断是否获胜的函数
int main()
{
load();
draw();
getNum();
while (judgeWin())
{
game();
draw();
}
MessageBox(NULL, "L you win", "Winner", MB_OK);//将Unicode字符集修改成:使用多字节字符集
getchar();
return 0;
}
void load()
{
initgraph(240, 240);
loadimage(&img0, "0.jpg", 30, 30);
loadimage(&img1, "1.jpg", 30, 30);
loadimage(&img2, "2.jpg", 30, 30);
loadimage(&img3, "3.jpg", 30, 30);
loadimage(&img4, "4.jpg", 30, 30);
loadimage(&img5, "5.jpg", 30, 30);
}
void draw()
{
//system("cls");
//system("clear");这两个函数的效率都太低
cleardevice(); //清除屏幕
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
switch (map[i][j]) //i行 j列
{
case 0://空地
putimage(j * 30, i * 30, &img0);//显示图片0
break;
case 1://墙
putimage(j * 30, i * 30, &img1);//显示图片1
break;
case 2:
putimage(j * 30, i * 30, &img2);//显示图片2
break;
case 3://目的地
putimage(j * 30, i * 30, &img3);//显示图片3
break;
case 4://箱子
putimage(j * 30, i * 30, &img4);//显示图片4
break;
case 5://人
putimage(j * 30, i * 30, &img5);//显示图片5
break;
case 6:
//printf("♂");
break;
}
}
}
}
void game()
{
char ch;
int m, n;
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
if (map[i][j] == 5)
{
m = i;
n = j;
}
}
}
ch = _getch();
//getch(); //不带回显,直接接受
//getchar();//带回显,按下回车键接受
switch (ch)
{
case'W': //上
case'w':
case 72: //向上的键码值为72
if (map[m - 1][n] == 0) //上面是空地
{
map[m][n] = 0;
map[m - 1][n] = 5;
}
else if (map[m - 1][n] == 3) //上面是目的地
{
map[m][n] = 0;
map[m - 1][n] = 6;
}
else if (map[m - 1][n] == 4) //上面是不在目的地的箱子
{
if (map[m - 2][n] == 0) //箱子上面是空地
{
map[m][n] = 0;
map[m - 1][n] = 5;
map[m - 2][n] = 4;
}
else if (map[m - 2][n] == 3) //箱子上面是目的地
{
map[m][n] = 0;
map[m - 1][n] = 5;
map[m - 2][n] = 2;
}
}
else if (map[m - 1][n] == 2) //上面是在目的地的箱子
{
if (map[m - 2][n] == 0) //箱子上面是空地
{
map[m][n] = 0;
map[m - 1][n] = 6;
map[m - 2][n] = 4;
}
else if (map[m - 2][n] == 3) //箱子上面是目的地
{
map[m][n] = 0;
map[m - 1][n] = 6;
map[m - 2][n] = 2;
}
}
break;
case'S': //下
case's':
case 80: //向下的键码值为80
if (map[m + 1][n] == 0) //下面是空地
{
map[m][n] = 0;
map[m + 1][n] = 5;
}
else if (map[m + 1][n] == 3) //下面是目的地
{
map[m][n] = 0;
map[m + 1][n] = 6;
}
else if (map[m + 1][n] == 4) //下面是不在目的地的箱子
{
if (map[m + 2][n] == 0) //箱子下面是空地
{
map[m][n] = 0;
map[m + 1][n] = 5;
map[m + 2][n] = 4;
}
else if (map[m + 2][n] == 3) //箱子下面是目的地
{
map[m][n] = 0;
map[m + 1][n] = 5;
map[m + 2][n] = 2;
}
}
else if (map[m + 1][n] == 2) //下面是在目的地的箱子
{
if (map[m + 2][n] == 0) //箱子下面是空地
{
map[m][n] = 0;
map[m + 1][n] = 6;
map[m + 2][n] = 4;
}
else if (map[m + 2][n] == 3) //箱子下面是目的地
{
map[m][n] = 0;
map[m + 1][n] = 6;
map[m + 2][n] = 2;
}
}
break;
case'A': //左
case'a':
case 75: //向左的键码值为75
if (map[m][n - 1] == 0) //左面是空地
{
map[m][n] = 0;
map[m][n - 1] = 5;
}
else if (map[m][n - 1] == 3) //左面是目的地
{
map[m][n] = 0;
map[m][n - 1] = 6;
}
else if (map[m][n - 1] == 4) //左面是不在目的地的箱子
{
if (map[m][n - 2] == 0) //箱子左面是空地
{
map[m][n] = 0;
map[m][n - 1] = 5;
map[m][n - 2] = 4;
}
else if (map[m][n - 2] == 3) //箱子左面是目的地
{
map[m][n] = 0;
map[m][n - 1] = 5;
map[m][n - 2] = 2;
}
}
else if (map[m][n - 1] == 2) //左面是在目的地的箱子
{
if (map[m][n - 2] == 0) //箱子左面是空地
{
map[m][n] = 0;
map[m][n - 1] = 6;
map[m][n - 2] = 4;
}
else if (map[m][n - 2] == 3) //箱子左面是目的地
{
map[m][n] = 0;
map[m][n - 1] = 6;
map[m][n - 2] = 2;
}
}
break;
case'D': //右
case'd':
case 77: //向右的键码值为77
if (map[m][n + 1] == 0) //右面是空地
{
map[m][n] = 0;
map[m][n + 1] = 5;
}
else if (map[m][n + 1] == 3) //右边是目的地
{
map[m][n] = 0;
map[m][n + 1] = 6;
}
else if (map[m][n + 1] == 4) //右面是不在目的地的箱子
{
if (map[m][n + 2] == 0) //箱子右面是空地
{
map[m][n] = 0;
map[m][n + 1] = 5;
map[m][n + 2] = 4;
}
else if (map[m][n + 2] == 3) //箱子右边是目的地
{
map[m][n] = 0;
map[m][n + 1] = 5;
map[m][n + 2] = 2;
}
}
else if (map[m][n + 1] == 2) //右边是在目的地的箱子
{
if (map[m][n + 2] == 0) //箱子右面是空地
{
map[m][n] = 0;
map[m][n + 1] = 6;
map[m][n + 2] = 4;
}
else if (map[m][n + 2] == 3) //箱子右边是目的地
{
map[m][n] = 0;
map[m][n + 1] = 6;
map[m][n + 2] = 2;
}
}
break;
}
}
void getNum()
{
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
if (map[i][j] == 3)
{
num++;
}
}
}
}
bool judgeWin()
{
int win = 0; //然后不断判地断有箱子的目标点的个数,
//如果有箱子的目标点的个数等于一开始的目标点的个数,则表示赢了
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
if (map[i][j] == 2)
{
win++;
}
}
}
if (win == num)
{
return false;
}
else
{
return true;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
推箱子小游戏.zip (60个子文件)
2、使用EasyX图形库
ConsoleApplication1.v12.suo 24KB
Release
ConsoleApplication1.exe 38KB
ConsoleApplication1.pdb 387KB
ConsoleApplication1
Release
vc120.pdb 124KB
ConsoleA.D49F4F55.tlog
cl.read.1.tlog 19KB
cl.write.1.tlog 680B
cl.command.1.tlog 842B
link.write.1.tlog 674B
link.command.1.tlog 3KB
link.read.1.tlog 7KB
ConsoleApplication1.lastbuildstate 250B
main.obj 122KB
ConsoleApplication1.log 3KB
2.jpg 1018B
1.jpg 817B
3.jpg 1KB
5.jpg 1KB
4.jpg 1KB
ConsoleApplication1.vcxproj 4KB
main.cpp 7KB
Debug
vc120.pdb 172KB
ConsoleA.D49F4F55.tlog
CL.write.1.tlog 900B
CL.read.1.tlog 57KB
cl.command.1.tlog 2KB
link.write.1.tlog 878B
link.command.1.tlog 9KB
link.read.1.tlog 7KB
ConsoleApplication1.lastbuildstate 248B
main.obj 58KB
vc120.idb 883KB
ConsoleApplication1.Build.CppClean.log 2KB
ConsoleApplication1.log 740B
0.jpg 1KB
ConsoleApplication1.vcxproj.filters 945B
ConsoleApplication1.sdf 28.25MB
ConsoleApplication1.sln 1003B
Debug
ConsoleApplication1.exe 112KB
ConsoleApplication1.pdb 803KB
ConsoleApplication1.ilk 730KB
1、基本功能的完成
ConsoleApplication1.v12.suo 21KB
ConsoleApplication1
ConsoleApplication1.vcxproj 4KB
main.cpp 6KB
Debug
vc120.pdb 164KB
ConsoleA.D49F4F55.tlog
CL.write.1.tlog 2KB
CL.read.1.tlog 38KB
cl.command.1.tlog 2KB
link.write.1.tlog 2KB
link.command.1.tlog 6KB
link.read.1.tlog 13KB
ConsoleApplication1.lastbuildstate 249B
main.obj 49KB
vc120.idb 859KB
ConsoleApplication1.Build.CppClean.log 2KB
ConsoleApplication1.log 3KB
ConsoleApplication1.vcxproj.filters 945B
ConsoleApplication1.sdf 27MB
ConsoleApplication1.sln 1003B
Debug
ConsoleApplication1.exe 41KB
ConsoleApplication1.pdb 563KB
ConsoleApplication1.ilk 243KB
共 60 条
- 1
资源评论
- 恽磊2023-07-25游戏的界面设计简单实用,不会陷入过多花哨的细节。
- 阿玫小酱当当囧2023-07-25这份文件提供了一个有趣的推箱子小游戏,让人在休闲时间可以放松一下。
- MurcielagoS2023-07-25文件中的注释非常清晰,帮助读者更好地理解代码逻辑。
- 又可乐2023-07-25游戏的代码实现比较简洁,容易理解和操作,适合初学者。
- 开眼旅行精选2023-07-25代码的可读性很高,结构清晰,很容易修改和扩展。
浅毅
- 粉丝: 1w+
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功