c语言写一个简单的小游戏-推箱子
2018-08-04 23:18
288 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhaojin0718/article/details/81416546
在学习C语言之后,写了一个简单的小游戏来锻炼自己的代码以及C语言知识的掌握能力。
推箱子作为手机上最常见的简单游戏,其代码也相对简单,想法也比较简单,下面为其代码和运行图。
[code]/*********************************************** 文件名称:main.c 文件描述:C语言写一个简单的小游戏 编译环境:DEV C++ 初写时间:2018年8月3日 修改时间:2018年8月3日 ***********************************************/ #include<stdio.h> #include<conio.h> #include<windows.h> int map[9][11]={ {0,1,1,1,1,1,1,1,1,1,0}, {0,1,0,0,0,1,0,0,0,1,0}, {0,1,0,3,3,3,3,3,0,1,0}, {0,1,0,3,0,3,0,3,0,1,1}, {0,1,0,0,0,2,0,0,3,0,1}, {1,1,0,1,1,1,1,0,3,0,1}, {1,0,4,4,4,4,4,1,0,0,1}, {1,0,4,4,4,4,4,0,0,1,1}, {1,1,1,1,1,1,1,1,1,1,0} };//原始的图表,五行六列,其中 0 代表着空白的地方; 1 代表着墙;2 代表着人; //3 代表着箱子;4 代表着箱子的中点位置。 //图的变化要靠自己来编写数组,通过数字来进行图的构造。 int drawmain(); int tuidong(); int winshu(); int main()//主函数 { while(1) { system("cls");//对其进行清屏 drawmain(); tuidong(); } printf("shuchu \n"); return 0; } //把图形刻画出来 int drawmain() { int i,j; winshu();//调用输赢的函数 for(i=0;i<9;i++) { for(j=0;j<11;j++) { switch(map[i][j]) { case 0: printf(" "); //空白的地方 break; case 1: printf("■"); //墙 break; case 2: printf("♀"); //人 break; case 3: printf("☆"); //箱子 break; case 4: printf("◎"); //终点地方 break; case 6: printf("♂");//人加终点位置 break; case 7: printf("★") ;//箱子加终点位置 break; } } printf("\n"); } } //进行小人的移动,整个移动的过程就是数组变化的过程 int tuidong() { int count,caw;//行和列 for(int i=0;i<9;i++)//确定人的位置 { for (int j=0;j<11;j++) { if(map[i][j]==2||map[i][j]==6) { count=i; caw=j; } } } int tui=getch();//与getchar()有区别的是:getchar()输入一个字符后需要回车来进行下一个字符的输入, //比较麻烦 ,getch()则不需要回车就能连续输入多个字符。 switch(tui) {//上 case 'W': case 72: // 1.人的前面是空地; // 2.人的前面是终点位置; // 3.人的前面是箱子 //3.1.箱子的前面是空地; //3.2.箱子的前面是终点位置。 if(map[count-1][caw]==0||map[count-1][caw]==4) { map[count][caw]-=2; map[count-1][caw]+=2; } else if(map[count-1][caw]==3||map[count-1][caw]==7) { if(map[count-2][caw]==0||map[count-2][caw]==4) { map[count][caw]-=2; map[count-1][caw]-=1; map[count-2][caw]+=3; } } break; /* 移动的情况: 位置: 人 map[count][caw] 人的前面是空地 map[count-1][caw] 人的前面是终点位置 map[count-1][caw] 箱子的前面是空地或终点位置 map[count-2][caw]*/ //下 case 'S': case 80://键值 if(map[count+1][caw]==0||map[count+1][caw]==4) { map[count][caw]-=2; map[count+1][caw]+=2; } else if(map[count+2][caw]==0||map[count+2][caw]==4) { if(map[count+1][caw]==3||map[count+1][caw]==7) { map[count][caw]-=2; map[count+1][caw]-=1; map[count+2][caw]+=3; } } break; //左 case 'A': case 75: if(map[count][caw-1]==0||map[count][caw-1]==4) { map[count][caw]-=2; map[count][caw-1]+=2; } else if(map[count][caw-2]==0||map[count][caw-2]==4) { if(map[count][caw-1]==3||map[count][caw-1]==7) { map[count][caw]-=2; map[count][caw-1]-=1; map[count][caw-2]+=3; } } break; //右 case 'D': case 77: if(map[count][caw+1]==0||map[count][caw+1]==4) { map[count][caw]-=2; map[count][caw+1]+=2; } else if(map[count][caw+2]==0||map[count][caw+2]==4) { if(map[count][caw+1]==3||map[count][caw+1]==7) { map[count][caw]-=2; map[count][caw+1]-=1; map[count][caw+2]+=3; } } break; } /*进行小人的上下左右的移动 移动的情况: 1.人的前面是空地; 2.人的前面是终点位置; 3.人的前面是箱子 3.1.箱子的前面是空地; 3.2.箱子的前面是终点位置。 不移动的情况: 1.人的前面是墙; 2.人的前面是箱子; 2.1.箱子的前面是墙 ; 2.2.箱子的前面是箱子; */ //分析后,要进行确定人的位置以及胜利的条件。 } //整个游戏的输赢 int winshu() { int k; for(int i=0;i<9;i++) { for (int j=0;j<11;j++) { if(map[i][j]==3) k++; } } if(k==0) printf("恭喜你,你赢了!\n"); } /*总结:整个过程就是数组元素的变换过程,但是我还不会进行两关之间的转换, 在以后我会注重逻辑思维的培养以及编写代码时思路简单的撰写,这是我写的第一个小游戏 ,写完之后感觉很高兴,因为自己学的知识有很大的用处。 */
运行图为:
由于学的比较浅,因此好多功能都没实现,例如:两关之间相连接进行连续游戏、不会使用图形界面等等,需要我以后再努力学习关于C语言的更深入的知识。
阅读更多
相关文章推荐
- 一个简单数学小游戏C语言代码
- C语言实现的一个简单的猜数小游戏
- 一个简单例子说明为什么C语言在2013年仍很重要
- C语言中如何写一个简单可移植而又足够随机的随机数生成器
- 用C语言实现一个简单的HTTP客户端(HTTP Client)
- 自己做的一个超级简单的小游戏
- C语言实现简单的三子棋小游戏
- 【C语言】实现一个简单SHELL应用
- 数据结构 --静态队列的一个简单的C语言代码实现
- C语言实现的一个简单的HTTP程序
- C语言实现一个最简单的队列
- 分析C语言一个简单程序
- 一个简单的C语言小程序
- C语言feof函数的一个简单示例
- C语言循环结构简单练习2——判断一个数是否为素数
- 简单C语言实现由1-N组成一个N位各位不重复的数字,该数字前M个数字组成的数可以被M整除
- C语言 推箱子小游戏(多年前入门时所写)
- 自己做的一个C语言小游戏——吃金子
- 【个人Unity笔记】{基础} 2D小游戏一个简单的自动刷怪脚本
- C语言实现一个简单的线程池