C语言零基础项目:推箱子游戏!详细思路+源码分享

2023-01-06 0 399

每晚两个C词汇小工程项目,提高你的程式设计潜能!

推袋子是两个源自韩国的有名格斗游戏,目地是在体能训练你的方法论思索潜能。在两个狭窄的库房中,明确要求把袋子放在选定的边线,稍不留神就会再次出现袋子难以终端或是地下通道被堵上的情形,所以须要别出心裁的借助非常有限的内部空间和地下通道,科学合理终端的顺序和边线,就可以成功的顺利完成各项任务。

效用展现:

C语言零基础项目:推箱子游戏!详细思路+源码分享

1、格斗游戏与此同时全力支持滑鼠和按键操作方式,滑鼠操作方式时,可点选任一你想去的地方性。

走来的方向,能给采用者足够多的思索内部空间,使采用者的心智在格斗游戏的快感中获得充份的锻炼身体。也能一退究竟。

3、萤幕下方表明现阶段的关数,您能方便快捷地选关展开格斗游戏。

4、在最终目标配置文档里,能用书签关上文档,仿造格斗游戏迷宫,读取介面及原素,加进后再度关上流程就可以预览。

格斗游戏中采用了相片

C语言零基础项目:推箱子游戏!详细思路+源码分享

本工程项目校对自然环境:Visual Studio 2019/2022,EasyX应用流程

代码展现:

//////////////////////////////////////////////////////////// //格斗游戏中用0表示空地,1表示人物,2表示袋子,3表示目地地,6表示围墙 // //画素材的x1和y1都是反的,因为x表示行,但是画出来x表示列,y同 //////////////////////////////////////////////////////////// #include <graphics.h> #include <conio.h> #include <stdlib.h> int x, y; //人物坐标 int loop; //控制是否重新开始 IMAGE img[8]; //定义IMAGE对象数组来保存相片 /*******************函数声明*******************/ void blank(int x1, int y1); //画空地 void man (int x1, int y1); //画皮卡丘 void box (int x1, int y1); //画袋子 void dest (int x1, int y1); //画目地地 void man1 (int x1, int y1); //画在目地地上的皮卡丘 void box1 (int x1, int y1); //画在目地地上的袋子 void wall (int x1, int y1); //画围墙 void man1 (int x1, int y1); //画在胜利的皮卡丘 void print(int a[15][15]); //把数组里的全画出来 void move (int a[15][15], int x1, int y1); //终端 void find (int a[15][15]); //找人物坐标 int win (int a[15][15]); //判断游戏是否结束 int play (int a[15][15]); //格斗游戏过程 void play1 (void); //格斗游戏迷宫 /*******************函数定义*******************/ //画空地 void blank(int x1, int y1) { putimage(y1, x1, &img[0]); // 在坐标 (y1, x1) 边线表明 IMAGE 对象 } //画皮卡丘 void man(int x1, int y1) { putimage(y1, x1, &img[1]); // 在坐标 (y1, x1) 边线表明 IMAGE 对象 } //画袋子 void box(int x1, int y1) { putimage(y1, x1, &img[2]); // 在坐标 (y1, x1) 边线表明 IMAGE 对象 } //画目地地 void dest(int x1, int y1) { putimage(y1, x1, &img[3]); // 在坐标 (y1, x1) 边线表明 IMAGE 对象 } //画在目地地上的皮卡丘 void man1(int x1, int y1) { putimage(y1, x1, &img[4]); // 在坐标 (y1, x1) 边线表明 IMAGE 对象 } //画在目地地上的袋子 void box1(int x1, int y1) { putimage(y1, x1, &img[5]); // 在坐标 (y1, x1) 边线表明 IMAGE 对象 } //画围墙 void wall(int x1, int y1) { putimage(y1, x1, &img[6]); // 在坐标 (y1, x1) 边线表明 IMAGE 对象 } //画胜利的皮卡丘 void man2(int x1, int y1) { putimage(y1, x1, &img[7]); // 在坐标 (y1, x1) 边线表明 IMAGE 对象 } //把数组里的全画出来 void print(int a[][10]) { for(int x1 = 0; x1 < 10; x1++) for(int y1 = 0; y1 < 10; y1++) putimage(60 * y1, 60 * x1, &img[a[x1][y1]]); } //终端 void move(int a[][10], int x1, int y1) { if(a[x + x1][y + y1] == 0 || a[x + x1][y + y1] == 3) { a[x][y]–; a[x + x1][y + y1]++; for(int i = 0; i < 60; i++) { blank(60 * x + i * x1, 60 * y + i * y1); //擦掉 man(60 * x + (i + 1) * x1, 60 * y + (i + 1) * y1); Sleep(1); //为了降低CPU且保存流畅 } if(a[x][y] == 3) dest(60 * x, 60 * y); x += x1; y += y1; if(a[x][y] == 4) man1(60 * x, 60 * y); } else if((a[x + x1][y + y1] == 2 || a[x + x1][y + y1] == 5) && (a[x + 2 * x1][y + 2 * y1] == 0 || a[x + 2 * x1][y + 2 * y1] == 3)) { a[x][y]–; a[x + x1][y + y1]–; a[x + 2 * x1][y + 2 * y1] += 2; for(int i = 0; i < 60; i++) { blank(60 * (x + x1) + i * x1, 60 * (y + y1) + i * y1); //擦掉 box(60 * (x + x1) + (i + 1) * x1, 60 * (y + y1) + (i + 1) * y1); blank(60 * x + i * x1, 60 * y + i * y1); //擦掉 man(60 * x + (i + 1) * x1, 60 * y + (i + 1) * y1); Sleep(1); //为了降低CPU且保存流畅 } if(a[x][y] == 3) dest(60 * x, 60 * y); x += x1; y += y1; if(a[x][y] == 4) man1(60 * x, 60 * y); if(a[x+x1][y+y1] == 5) box1(60 * (x + x1), 60 * (y + y1)); } } //找人物坐标想x,y void find(int a[][10]) { for(x = 0; x < 10; x++) for(y = 0; y < 10; y++) if(a[x][y] == 1) return; } //判断格斗游戏是否结束 int win(int a[][10]) { for(int x1 = 0; x1 < 10; x1++) for(int y1 = 0; y1 < 10; y1++) if(a[x1][y1] == 2) return 0; //如果还有袋子返回假 return 1; //如果没有袋子返回真 } /************************格斗游戏过程**********************/ //格斗游戏过程 int play(int a[][10]) { loop = 0; print(a); find(a); //通过find函数寻找人物的x, y坐标 do { switch(getch()) { case w: case W:move(a, -1, 0); break; //上移 case a: case A:move(a, 0, -1); break; //左移 case d: case D:move(a, 0, 1); break; //右移 case s: case S:move(a, 1, 0); break; //下移 case r: case R: case :loop = 1; return 0; //重新开始现阶段关 case 27:exit(0); break; //结束格斗游戏 case 0: case 0xE0: //如果是方向键 switch(getch()) { case 72:move(a, -1, 0); break; case 75:move(a, 0, -1); break; case 77:move(a, 0, 1); break; case 80:move(a, 1 , 0); } } }while(!win(a)); //通过win函数判断是否通过 man2(60 * x, 60 * y); //画两个开心的皮卡丘 getch(); return 0; } //格斗游戏迷宫 void play1(void) { int a[5][10][10]={ //定义三维地图数组 { {0}, {0, 0, 6, 6, 6}, {0, 0, 6, 3, 6}, {0, 0, 6, 0, 6, 6, 6, 6}, {6, 6, 6, 2, 0, 2, 3, 6}, {6, 3, 0, 2, 1, 6, 6, 6}, {6, 6, 6, 6, 2, 6}, {0, 0, 0, 6, 3, 6}, {0, 0, 0, 6, 6, 6} }, { {6, 6, 6, 6, 6}, {6, 1, 0, 0, 6}, {6, 0, 2, 2, 6, 0, 6, 6, 6}, {6, 0, 2, 0, 6, 0, 6, 3, 6}, {6, 6, 6, 0, 6, 6, 6, 3, 6}, {0, 6, 6, 0, 0, 0, 0, 3, 6}, {0, 6, 0, 0, 0, 6, 0, 0, 6}, {0, 6, 0, 0, 0, 6, 6, 6, 6}, {0, 6, 6, 6, 6, 6} }, { {0, 6, 6, 6, 6}, {0, 6, 1, 0, 6, 6, 6}, {0, 6, 0, 2, 0, 0, 6}, {6, 6, 6, 0, 6, 0, 6, 6}, {6, 3, 6, 0, 6, 0, 0, 6}, {6, 3, 2, 0, 0, 6, 0, 6}, {6, 3, 0, 0, 0, 2, 0, 6}, {6, 6, 6, 6, 6, 6, 6, 6} }, { {0, 6, 6, 6, 6, 6, 6, 6}, {0, 6, 0, 1, 3, 3, 3, 6}, {0, 6, 0, 0, 0, 6, 6, 6, 6}, {6, 6, 6, 2, 0, 0, 0, 0, 6}, {6, 0, 0, 0, 6, 2, 6, 0, 6}, {6, 0, 2, 0, 6, 0, 0, 0, 6}, {6, 0, 0, 0, 6, 6, 6, 6, 6}, {6, 6, 6, 6, 6} }, { {0, 6, 6, 6, 6, 6}, {0, 6, 0, 1, 0, 6, 6, 6}, {6, 6, 0, 6, 2, 0, 0, 6}, {6, 0, 5 ,3, 0, 3, 0, 6}, {6, 0, 0, 2, 2, 0, 6, 6}, {6, 6, 6, 0, 6, 3, 6}, {0, 0, 6, 0, 0, 0, 6}, {0, 0, 6, 6, 6, 6, 6} } }; int b[10][10]; //设置现阶段地图数组 for(int i = 0; i < 5; i++) { do { loop=0; //loop置为0 for(int x1 = 0; x1 < 10; x1++) for(int y1 = 0; y1 < 10; y1++) b[x1][y1] = a[i][x1][y1]; //对现阶段地图数组分别赋值 play(b); }while(loop); //如果loop被置为1则重新开始 } } /************************主函数***********************/ int main(void) { initgraph(600, 600); setbkcolor(WHITE); cleardevice(); loadimage(&img[0], “相片\\0.jpg”); loadimage(&img[1], “相片\\1.jpg”); loadimage(&img[2], “相片\\2.jpg”); loadimage(&img[3], “相片\\3.jpg”); loadimage(&img[4], “相片\\4.jpg”); loadimage(&img[5], “相片\\5.jpg”); loadimage(&img[6], “相片\\6.jpg”); loadimage(&img[7], “相片\\7.jpg”); play1(); closegraph(); return 0; }

大家赶紧去动手试试吧!

此外,我也给大家撷取我收集的其他资源,从最零此基础开始的教程到C词汇C++工程项目案例,帮助大家在学习C词汇的道路上披荆斩棘!

程式设计学习书籍撷取:

C语言零基础项目:推箱子游戏!详细思路+源码分享

程式设计学习视频撷取:

C语言零基础项目:推箱子游戏!详细思路+源码分享

整理撷取(多年学习的源码、工程项目实战视频、工程项目笔记,此基础入门教程)最重要的是你能在群里面交流提问程式设计问题哦!

对于C/C++感兴趣能关注小编在后台私信我:【程式设计交流一起来学习哦!能领取一些C/C++的工程项目学习视频资料哦

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务