1. 模板
2. 模板分析
组成要素:
清理墙壁人目的地框背景
3. 如何操作
通过WASD键盘操作人,推动箱子,到达目的地。游戏结束。如果盒子卡在死角,游戏就会失败。
4. 如何绘制地图
将绘图存储在数组中
数组中的0代表空白
1 表示墙
2代表人
3表示盒子
4 表示目的地
移动时
人在目的地:人+目的地=2+4=6
箱子在目的地:箱子+目的地=3+4+7
(o)…嗯,就这样了(其实只是我做的时候做的一些笔记,等以后用的时候再看)
1 //先改变多字节
2 #include//预处理头文件
3 #include//控制台输入输出,定义了通过控制台进行数据输入和数据输出的函数,主要是对应一些用户通过按下键盘产生的操作
4 #include//图形库头文件
5 #include//多媒体库头文件
6 #pragma comment(lib,'winmm.lib')//多媒体库
8/*
9 1. 音乐播放
10 mciSendString mp3 wav 格式音乐请勿使用网易云下载音乐
11 #include//多媒体库头文件
12 #pragma comment(lib,'winmm.lib')//多媒体库
13 PlaySound只能播放WAV格式音乐
14 2.推箱子素材:照片--jpg或bmp格式音乐
15个图形库
18 推箱子的过程--地图--推箱子--箱子到达目的地游戏结束。
20 个操作每个操作对应一个功能
21 1. 准备地图材料
22 2.推箱子
23 3.判断游戏是否结束
24 数据存储部分
25 推箱子
26 空地0 墙1 人2 盒子3 目的地4(存储在数组中)
27人到达目的地:人+目的地=2+4=6
28 盒子在目的地:盒子+ 目的地=3+4+7
32*/
34 int 地图[8][8]={
35 0, 0, 1, 1, 1, 0, 0, 0,
36 0, 0, 1, 4, 1, 0, 0, 0,
37 0, 0, 1, 0, 1, 1, 1, 1,
38 1, 1, 1, 3, 0, 3, 4, 1,
39 1, 4, 0, 3, 2, 1, 1, 1,
40 1, 1, 1, 1, 3, 1, 0, 0,
41 0, 0, 0, 1, 4, 1, 0, 0,
42 0, 0, 0, 1, 1, 1, 0, 0
43 };//地图有8行8列,0个空地,1堵墙,2个人,3个箱子,4个目的地
44 //8*8地图--每张图片尺寸为80*80,总地图尺寸为640*640
45 IMAGE img[6];//数组中存放了总共6个素材
47 void init()//自定义函数,用于加载素材,全局的,所有人都可以使用
48{
49 //加载图片。窗口尺寸为640*640,小网格尺寸为80*80。
50 loadimage(img[0], '背景.jpg');
51 loadimage(img[1], 'destination.jpg',80,80);//将盒子推送到目的地
52 loadimage(img[2], 'wall.jpg',80,80);
53 loadimage(img[3], '角色.jpg',80,80);
54 loadimage(img[4], 'box.jpg',80,80);
55 loadimage(img[5], 'Genji.jpg',80,80);//清空目的地
57}
58 void drawMap()//绘制地图
59{
60 putimage(0,0,img[0]);
61 for (int i=0; i 8; ++i)//数组大小为8
62{
63 for (int j=0; j 8; ++j)
64{
65 switch(map[i][j])//循环遍历数组
66{
67 case 0://没有地图的空位
68 打破;
69箱1://墙
70 putimage(i * 80, j * 80, img[2]);//用于映射的前两个是坐标(图形库的坐标)
71 打破;
72例2://人
73 putimage(i * 80, j * 80, img[3]);
74 打破;
75箱3://箱
76 putimage(i * 80, j * 80, img[4]);
77 打破;
78 case 4://目的地
79 putimage(i * 80, j * 80, img[5]);
80 休息;
81 case 6://人+目的地
82 putimage(i * 80, j * 80, img[3]);
83 打破;
84箱7://箱+目的地
85 putimage(i * 80, j * 80, img[1]);
86 打破;
87}
88}
89}
90}
91 void play()//操作部分
92{
93 int x,y;//求出字符的位置
94 for (int i=0; i 8; ++i)
95{
96 for (int j=0; j 8; ++j)
97{
98 if (map[i][j]==2||map[i][j]==6)//等于2或6找到人
99{
100 x=我;
101 y=j;//保存人的位置
102}
103}
104}
105 //然后判断用户输入
106 //getch--获取用户密钥conion.h
107 switch(getch())//人移动时遇到墙无法移动。
108{
109 case 'w': //向上,可能是空地,可能是墙,可能是盒子//可能是目的地,可能是盒子加目的地
110 箱'W':
111 if (地图[x][y - 1]==0 || 地图[x][y - 1]==4)
112{
113 地图[x][y] -=2;
114 地图[x][y - 1] +=2;
115}
116 else if (map[x][y - 1]==3 || map[x][y - 1]==7)
117 {
118 if (地图[x][y - 2]==0 || 地图[x][y - 2]==4)
119 {
120 地图[x][y] -=2;
第121章地图[x][y - 1] -=1;
122 地图[x][y - 2] +=3;
123}
124}
125 打破;
128 case ': //下载
129 箱'S':
130 if (地图[x][y + 1]==0 || 地图[x][y + 1]==4)
131 {
132 地图[x][y] -=2;
133 映射[x][y + 1] +=2;
134}
135 else if (map[x][y + 1]==3 || map[x][y + 1]==7)
136 {

137 if (地图[x][y + 2]==0 || 地图[x][y + 2]==4)
138 {
139 地图[x][y] -=2;
140 地图[x][y + 1] -=1;
141 地图[x][y + 2] +=3;
142}
143}
144 打破;
146 case 'a'://向左走
147 案例'A':
148 if (map[x - 1][y]==0 || map[x - 1][y]==4)//上方是空地或者目的地
149 {
150 map[x][y] -=2;//相当于map[x][y]=map[x][y]-2;
151 地图[x - 1][y] +=2; //人走上来
152}
153 else if (map[x - 1][y]==3 || map[x - 1][y]==7)//人的上方是一个盒子或者一个盒子加一个目的地
154 {
155 if (map[x - 2][y]==0 || map[x - 2][y]==4)//盒子上方有空位,可以推
156 {
157 map[x][y] -=2;//人向上走
158 map[x - 1][y] -=1;//人来+2,箱子上-3,所以是-3+2=-1
159 map[x - 2][y] +=3;//盒子上升
160}
161}
162 打破;
164 case 'd'://向右走
165 箱‘D’:
166 if (地图[x + 1][y]==0 || 地图[x + 1][y]==4)
167 {
168 地图[x][y] -=2;
169 地图[x + 1][y] +=2;
170}
171 else if (map[x + 1][y]==3 || map[x + 1][y]==7)
172 {
173 if (地图[x + 2][y]==0 || 地图[x + 2][y]==4)
174 {
175 地图[x][y] -=2;
176 地图[x + 1][y] -=1;
177 地图[x + 2][y] +=3;
178}
179}
180 断;
182}
185}
186 无效gameOver()
187 {
188 //游戏什么时候结束?
189 //1。赢。将所有箱子推到目的地——外面没有箱子。
190//2.失去。有些盒子没有被推到目的地或者游戏超时。
191 int 标志=0;
192 for (int i=0; i 8; ++i)
193 {
194 for (int j=0;j 8;++j)
195 {
196 if (map[i][j]==3)//盒子找到了,游戏还没有赢
197 {
198 ++标志;
199 if (map[i - 1][j]==1 || map[i + 1][j]==1)//上面或者下面都有一个
200 {
201 if (map[i][j - 1]==1 || map[i][j + 1]==1)//左右各有一个
202 {
203 //游戏结束失败
204 MessageBox(GetHWnd(),'丢失','伤心',MB_OK);
205 关闭图();
206 退出(0);
207}
208}
209}
210}
211}
212 if(标志==0)
213 {
214 //没有盒子,游戏结束
215 //返回
第216 章
217 //第一个参数句柄(可以理解为指向窗口的指针)用于将窗口带到前面。您可以为其写入NULL 或0。
218 //第二个是文本,第三个是标题,第四个是按钮
[第219 章]
220 exit(0);//表示退出程序
221}
223}
226 int main()
227 {
228 //音乐播放示例1
229 //mciSendString('打开bgm.mp3',0,0,0);//打开音乐
230 //mciSendString('play bgm.mp3 Repeat',0,0,0);//先打开再播放repeat循环
231 //关闭音乐停止暂停音乐暂停
232 //音乐播放示例2
233 mciSendString('open bgm.mp3 alias bgm', 0, 0, 0);//打开音乐别名bgm并取个名字
234 mciSendString('播放bgm重复', 0, 0, 0);//先打开再播放重复。
236 initgraph(640,640);//创建窗口
237 init();//加载图像
239 //启动界面==================================
240 putimage(0,0,img[0]);//背景图片
241 settextstyle(40, 0, '宋体');
242 settextcolor(黑色);
243 setbkmode(TRANSPARENT);//字体背景透明
244 //或者setbkmode(1);设置背景模式设置背景模式
246矩形(200,200,400,400);
247 outtextxy(200, 200, '开始游戏');
248 MOUSEMSG 消息;
249 int 标志=1;
250 同时(标志)
251 {
252 msg=GetMouseMsg();//获取鼠标消息
253 switch ((msg.uMsg))//判断鼠标消息
254 {
255 case WM_LBUTTONDOWN://左键按下
256 if (msg.x 200 msg.x400 msg.y200 msg.y 400)
257 {
258 //点击的区域在框内,可以退出循环
259 标志=0;
260}
262 默认:
263 打破;
264}
265}
266 //outtextxy(400,400,'按任意键开始游戏');
第267章
270/*
第271章鼠标操作
272 MouseHit() 判断是否有鼠标消息
273 MOUSEMSG类型存储鼠标信息
274 GetMouseMsg()函数获取鼠标信息
第275章
276 //==============================================
[第278 章]
279 while(1)//循环函数调用
280 {
281 播放();
第282章
283 游戏结束();
第284章
第285章
[第286 章]
287返回0;
第288章
运行结果
推箱子1
推箱子2
推箱子3






























用户评论
这个"推箱子游戏"听起来很有意思!感觉像小时候玩的俄罗斯方块那样,用代码把逻辑控制好真的太酷了。会不会有各种难度和场景?
有13位网友表示赞同!
C++ 学习总是枯燥乏味,这项目让我看到了学习的乐趣!如果能看到成品画面多好啊,说不定还能联机对战~
有16位网友表示赞同!
玩游戏当然好玩,但项目要做的足够严谨才更有意义吧?推箱子游戏的规则和逻辑都很简单,难点可能在于代码的效率和可读性。
有9位网友表示赞同!
好久没接触C++了,看到这个项目想起来当年学习编程时的那份激情! 不过现在的工作已经很久不触碰这类游戏开发,有点怀念以前的感觉哦。
有19位网友表示赞同!
对这类型的游戏并不太感兴趣,但我还是觉得这个推箱子游戏的项目设计很好。 用游戏的方式学习C++确实可以让枯燥的学习过程变得更有乐趣和吸引力!
有19位网友表示赞同!
我觉得这个“项目”有点弱啊, 推箱子这游戏简单得让人难以想象开发难度有多大。 还是希望看到一些更具挑战性的项目,比如模拟一些物理模型或者人工智能等等。
有14位网友表示赞同!
我还没学过C++,但这个"推箱子游戏"听着很有意思! 是不是以后可以玩到这个项目啊? 好想体验一下用代码实现的游戏!
有14位网友表示赞同!
学习编程就是应该从简单的游戏开始逐步提高, 这"推箱子游戏"的确是个很好的入门案例哦! 学习语言和逻辑思维都是宝贵经验, 期待看到更多人尝试这个有意思的项目!
有20位网友表示赞同!
最近在学习C++, 这个“推箱子游戏”正好可以用作练习。 希望能够深入学习相关的算法和数据结构, 把项目做成更有趣和复杂的游戏场景呢!
有9位网友表示赞同!
我有点不理解, “推箱子游戏”这种玩法真的适合作为C++学习项目吗? 感觉太简单了, 也许可以尝试一些更复杂的逻辑设计?
有7位网友表示赞同!
这个项目的设计很有教育意义, 学习C++通过玩游戏的方式更容易理解代码的执行逻辑和调试技巧, 尤其对于初学者来说非常实用!
有18位网友表示赞同!
我真想试试用C++自己开发一个"推箱子"的游戏, 虽然这只是入门级项目, 但我相信能够锻炼我的编程能力, 并让我在学习过程中收获乐趣!
有14位网友表示赞同!
感觉这个项目可以引申出很多有趣的玩法,比如加入不同的障碍物、陷阱或者道具等! 如果能添加一些AI控制的对手,那该有多棒!
有18位网友表示赞同!
学习编程需要不断积累经验和实践, 这个“推箱子游戏”项目虽然简单,但却能让我们一步步熟悉C++语法和开发流程
有10位网友表示赞同!
这个"推箱子游戏"项目的描述很吸引人, 希望能看到更详细的图文介绍以及最终的效果展示!
有14位网友表示赞同!
如果能够开源这个"推箱子游戏"项目, 广大开发者就可以共同学习、改进和分享代码, 这一定会推动C++学习及开发实践的进步!
有16位网友表示赞同!
玩游戏也是一种学习的方式, 有些人通过玩游戏认识了编程, 而这个"推箱子游戏" 项目也许能激发更多人对C++学习的兴趣!
有8位网友表示赞同!