C语言项目实战:《推箱子》零基础项目!270 行源码注释示例

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

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

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

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

插件:图形库插件easyX;

效果图展示

C语言项目实战:《推箱子》零基础项目!270 行源码注释示例

源代码示例

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: //人:CXKcase 8:putimage(x, y, &img4);//printf("人");break;case 7: //把箱子推进目的地:鸡putimage(x, y, &img5);//printf("⊙");break;}}printf("\n");}}

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

void playGame(){//按键操作:游戏过程//找人:找CXK:遍历二维数组--->元素= 5||8int 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 77case 'w':case 'W':case 72://移动的原理:改变二维数组元素的值//移动的步骤://1.先让人移动 map[cas][i-1][j]=0||map[cas][i-1][j]=3if (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]=3if (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]=3if (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]=3if (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*64loadimage(&img1, L"1.bmp"); //64*64loadimage(&img2, L"3.bmp"); //64*64loadimage(&img3, L"4.bmp"); //64*64loadimage(&img4, L"5.bmp"); //64*64loadimage(&img5, L"7.bmp"); //64*64initgraph(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语言项目实战:《推箱子》零基础项目!270 行源码注释示例

编程学习视频分享:

C语言项目实战:《推箱子》零基础项目!270 行源码注释示例

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

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

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

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/74295.html

(0)

相关推荐

  • 千元以下的百元机其实也可以有很好的用户体验,这三款不要错过

    目前其实各大手机厂商对于百元机的发展非常缓慢,因为现阶段似乎多数用户选择的都是千元机或者中端以上的旗舰机,但是在百元机这个范畴内依然还有很大的需求量,所以今天给大家推荐一下在2021年值得入手的三款百元机,论用户体验绝对不输千元机。

    科技 2021年11月18日
  • 兆中直司掌舵人背后:治丧委员会的“失踪”解如彤或其继任者。

    本文来源:时代财经 作者:魏亚霖 幸雯雯

    生活 2021年12月19日
  • 联想与司马南事件到底谁是谁非?

    这几天司马南在视频里面说联想柳老爷子有贱买了国有资产,柳老又发出去音频回应搞得大家都在关注,其实这里面是大家对联想恨铁不成钢的失望表达。因为差不多时间成立的华为成绩斐然,对国家和民族包括自己企业带来了很多荣誉和成果,这样一对比就非常失望,这里我个人觉得这里有个人性格因素在里面,作为柳老的性格比较强势,当时把企业搞得还不错,当他老了找接班人肯定不希望接班人太有性格(孙宏斌就是案例),你想啊如果接班人也是有个性强势上台后肯定有自己想法和作为,在作为的时候肯定要否定一部分柳老的一些决策,这个肯定是柳老不希望看到的(基本上老板用人优先用自己心腹忠于自己利益的人,不会用有能力的人,这个是人性)但是这个接班人杨元庆的确有点拉垮,没有什么拿得出手的业绩还拿那么高薪水,这就让很多人不满意了(虽然没有拿他们家里的钱)。很多人质疑柳老和创业元老倪光南先生之间办理联想集团线路,走了贸工技而不是技工贸路线,这里我个人感觉那个决策柳老应该没有什么大错误,毕竟创业开始缺钱啊 而且非常非常的缺(华为任总那个时候估计也一个头两个大吧),没钱谈什么研发,没钱哪里来的人才,只是联想在."贸‘’方面做得不错,“工”方面估计得有点辛苦就转身做投资了,就后来没有“技”了。这里我要说句公平公正的话,作为一个私人老板单纯赚钱并没有错,企业活下去才是真理(真话有点难听)但是联想承担了太多民众希望了,这所谓就是期望越大失望就越大。最后柳老回应音频里面感觉年龄大了决策也有点问题,音频里面柳老有点把员工带偏了,本来这个是柳老和司马南个人之间事情,音频里面说全体员工要同仇敌忾。还有我很佩服司马南质疑精神,因为你是成功人士就不能质疑了吗?每个人都有质疑和被质疑权利。

    科技 2021年11月21日
  • 孩子不让爸爸和妈妈一起睡,孩子问爸妈为什么可以一起睡

    桃子从7个月开始就不太愿意睡自己的小床,总是喜欢跟着我们一起睡。其实,她小一点的时候我们还是尽量让她睡自己的小床,主要担心压着她,也怕跟我们睡习惯了后面戒不掉。

    生活 2021年11月2日
  • 秋季如何养生保健,秋冬季应该如何养生

    今天是霜降,俗话说:霜降一过百草枯。天气愈来愈凉了,满眼萧瑟也让人渐生悲凉之情。那么这个秋天如何养生会让我们温暖又健康呢?下面就一起来看看吧

    生活 2021年10月24日
  • 河南“科技贷”升级至“2.0版”

    大河网讯(河南日报记者 尹江勇)河南“科技贷”业务推出5年来,已成为支持科技企业的标志性金融产品。11月25日,记者从省科技厅获悉,新修订的《河南省科技金融“科技贷”业务实施方案》(以下简称《方案》)正式印发,升级后的“科技贷”有助于进一步降低企业融资成本,改善科技创新融资环境,赋能我省企业技术创新提质增效。

    科技 2021年11月28日