这篇文章主要为大家详细介绍了C语言实现——《推箱子项目》,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下!

本项目结合了分支,循环,数组的结合,并且对逻辑也是有一定的要求,但是这些在我们项目源码里面都会有注释,大家到时候学习的时候千万不要忽略注释,注释可以更好地帮你理解代码,尤其是C语言初学者。

本项目编译环境:VS2019/VS2013;

插件:图形库插件easyX;

效果图展示

c语言实战项目教程(推箱子零基础项目)(1)

源代码示例

1.头文件

#include<stdio.h> #include<stdlib.h> #include<graphics.h> //easyX图形库头文件 #include<conio.h>

2.关卡设置(这里我们定义一个三维数组,三维数组大家可以理解为多个二维数组)

int cas = 0; IMAGE img0, img1, img2, img3, img4, img5; int map[3][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, 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, 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, };

3.绘制推箱子地图

void drawmap() { for (int i = 0; i < 8; i ) { for (int j = 0; j < 8; j ) { int x = j * 64; int y = i * 64; switch (map[cas][i][j]) { case 0: //空地 putimage(x, y, &img0); //printf(" "); break; case 1: //墙 putimage(x, y, &img1); //printf("█"); break; case 3: //目的地:篮筐 putimage(x, y, &img2); //printf("☆"); break; case 4: //箱子:篮球 putimage(x, y, &img3); //printf("★"); break; case 5: //人:CXK case 8: putimage(x, y, &img4); //printf("人"); break; case 7: //把箱子推进目的地:鸡 putimage(x, y, &img5); //printf("⊙"); break; } } printf("\n"); } }

4.游戏过程(这部分是整个游戏的核心部分,也是最难理解的部分,大家要仔细解读)

void playGame() { //按键操作:游戏过程 //找人:找CXK:遍历二维数组--->元素= 5||8 int i, j; for (i = 0; i < 8; i ) { for (j = 0; j < 8; j ) { //找人 if (map[cas][i][j] == 5 || map[cas][i][j] == 8) { break;//break只能跳出一层循环 } } //找人 if (map[cas][i][j] == 5 || map[cas][i][j] == 8) { break;//break只能跳出一层循环 } } //已经找到人了 //通过键盘操作人物 char userKey = _getch(); switch (userKey) { //那几个键移动:wsad 箭头:小键盘 键码值:72 80 75 77 case 'w': case 'W': case 72: //移动的原理:改变二维数组元素的值 //移动的步骤: //1.先让人移动 map[cas][i-1][j]=0||map[cas][i-1][j]=3 if (map[cas][i - 1][j] == 0 || map[cas][i - 1][j] == 3) { //人移动的原理:元素的值 map[cas][i][j] -= 5; map[cas][i - 1][j] = 5; } //2.推箱子,让箱子移动 //先找到(固定)箱子 if (map[cas][i - 1][j] == 4 || map[cas][i - 1][j] == 7) { //篮球,箱子移动的条件 if (map[cas][i - 2][j] == 0 || map[cas][i - 2][j] == 3) { //推箱子的原理:移动元素值 map[cas][i][j] -= 5; map[cas][i - 1][j] = 5; map[cas][i - 1][j] -= 4; map[cas][i - 2][j] = 4; } } break; case 's': case 'S': case 80: //1.先让人移动 map[cas][i-1][j]=0||map[cas][i-1][j]=3 if (map[cas][i 1][j] == 0 || map[cas][i 1][j] == 3) { //人移动的原理:元素的值 map[cas][i][j] -= 5; map[cas][i 1][j] = 5; } //2.推箱子,让箱子移动 //先找到(固定)箱子 if (map[cas][i 1][j] == 4 || map[cas][i 1][j] == 7) { //篮球,箱子移动的条件 if (map[cas][i 2][j] == 0 || map[cas][i 2][j] == 3) { //推箱子的原理:移动元素值 map[cas][i][j] -= 5; map[cas][i 1][j] = 5; map[cas][i 1][j] -= 4; map[cas][i 2][j] = 4; } } break; case 'a': case 'A': case 75: //1.先让人移动 map[cas][i-1][j]=0||map[cas][i-1][j]=3 if (map[cas][i][j - 1] == 0 || map[cas][i][j - 1] == 3) { //人移动的原理:元素的值 map[cas][i][j] -= 5; map[cas][i][j - 1] = 5; } //2.推箱子,让箱子移动 //先找到(固定)箱子 if (map[cas][i][j - 1] == 4 || map[cas][i][j - 1] == 7) { //篮球,箱子移动的条件 if (map[cas][i][j - 2] == 0 || map[cas][i][j - 2] == 3) { //推箱子的原理:移动元素值 map[cas][i][j] -= 5; map[cas][i][j - 1] = 5; map[cas][i][j - 1] -= 4; map[cas][i][j - 2] = 4; } } break; case 'd': case 'D': case 77: //1.先让人移动 map[cas][i-1][j]=0||map[cas][i-1][j]=3 if (map[cas][i][j 1] == 0 || map[cas][i][j 1] == 3) { //人移动的原理:元素的值 map[cas][i][j] -= 5; map[cas][i][j 1] = 5; } //2.推箱子,让箱子移动 //先找到(固定)箱子 if (map[cas][i][j 1] == 4 || map[cas][i][j 1] == 7) { //篮球,箱子移动的条件 if (map[cas][i][j 2] == 0 || map[cas][i][j 2] == 3) { //推箱子的原理:移动元素值 map[cas][i][j] -= 5; map[cas][i][j 1] = 5; map[cas][i][j 1] -= 4; map[cas][i][j 2] = 4; } } break; } } int gameOver() { int flag = 0; //遍历二维数组元素-->目的地:球框 for (int i = 0; i < 8; i ) { for (int j = 0; j < 8; j ) { if (map[cas][i][j] == 3) { flag = 1; } } } return flag; }

5.主函数部分

int main() { loadimage(&img0, L"0.bmp"); //64*64 loadimage(&img1, L"1.bmp"); //64*64 loadimage(&img2, L"3.bmp"); //64*64 loadimage(&img3, L"4.bmp"); //64*64 loadimage(&img4, L"5.bmp"); //64*64 loadimage(&img5, L"7.bmp"); //64*64 initgraph(64 * 8, 64 * 8); while (1) { drawmap(); playGame(); if (!gameOver()) { cas ; if (cas == 3) break; } system("cls"); } //initgraph(600,600);//窗口:宽度*高度 ////贴图:基本贴图技术 ////1.定义图片变量 //IMAGE img; ////2.加载图片 //loadimage(&img, L"timg.jpg", 600, 600); ////3.显示图片 //putimage(0, 0, &img); while (1); //防止闪屏 closegraph(); //关闭窗口 return 0; }

整个项目的源码已经分享,这是一个三关完善的推箱子游戏,大家如果有兴趣可以自己去试试做更多的关卡来玩!

如果学习的过程中有什么问题,以及本项目有什么不懂的地方,都可以来找我交流,我来帮你!

那么今天的分享就到这里了,后续会更新更多精彩项目的,大家要好好学C语言C 哟~

写在最后:对于准备学习C/C 编程的小伙伴,如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!

编程学习书籍分享:

c语言实战项目教程(推箱子零基础项目)(2)

编程学习视频分享:

c语言实战项目教程(推箱子零基础项目)(3)

整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

对于C/C 感兴趣可以关注小编在后台私信我:【编程交流】一起来学习哦!可以领取一些C/C 的项目学习视频资料哦!已经设置好了关键词自动回复,自动领取就好了!

,