C语言,推箱子游戏
来源:互联网 发布:怎么联系淘宝在线客服 编辑:程序博客网 时间:2024/05/02 01:34
一个C语言简易推箱子游戏
#include <stdio.h> #include <stdlib.h>#include <string.h> #include <conio.h> int i,j,k; int row=8,col=8;int boxNum;int*** maps;int index=0,round_num=4;int rows[]={8,9,10,8};int cols[]={8,9,10,8};int boxNums[]={4,3,4,4};void draw_map(int** map); //声明画图函数void arrayCopy(int* src,int** des,int row,int col){int i,j;for(i=0;i<row;i++){for(j=0;j<col;j++){des[i][j] = *(src+col*i+j);}}}//2:边缘空白,0:空地,6:小人,3:目的地,7:目的地+箱子,2:空白,1:墙,4:箱子int map1[8][8] = { //地图1{2,2,1,1,1,2,2,2},{2,2,1,3,1,2,2,2},{2,2,1,0,1,1,1,1},{1,1,1,4,0,4,3,1},{1,3,0,4,6,1,1,1},{1,1,1,1,4,1,2,2},{2,2,2,1,3,1,2,2},{2,2,2,1,1,1,2,2}};int map2[9][9] = {{1,1,1,1,1,2,2,2,2},{1,6,0,0,1,2,2,2,2},{1,0,4,4,1,2,1,1,1},{1,0,4,0,1,2,1,3,1},{1,1,1,0,1,1,1,3,1},{2,1,1,0,0,0,0,3,1},{2,1,0,0,0,1,0,0,1},{2,1,0,0,0,1,1,1,1},{2,1,1,1,1,1,2,2,2}};int map3[10][10] = {{2,1,1,1,1,1,1,1,2,2},{2,1,0,0,0,0,0,1,1,1},{1,1,4,1,1,1,0,0,0,1},{1,0,6,0,4,0,0,4,0,1},{1,0,3,3,1,0,4,0,1,1},{1,1,3,3,1,0,0,0,1,2},{2,1,1,1,1,1,1,1,1,2},{2,2,2,2,2,2,2,2,2,2},{2,2,2,2,2,2,2,2,2,2}};int map4[8][8] = { {2,1,1,1,1,2,2,2},{1,1,0,0,1,2,2,2},{1,6,4,0,1,2,2,2},{1,1,4,0,1,1,2,2},{1,1,0,4,0,1,2,2},{1,3,4,0,0,1,2,2},{1,3,3,0,3,1,2,2},{1,1,1,1,1,1,2,2}};int main(){char input; int count=0; //定义记分变量int** current_map;maps = (int***)malloc(sizeof(int***)*10);maps[0] = (int**)malloc(sizeof(map1));maps[0][0] = map1;maps[0][1] = map2;maps[0][2] = map3;maps[0][3] = map4;index=3;while(index<round_num){row = rows[index];col = cols[index];boxNum = boxNums[index];current_map = (int**)malloc(sizeof(int*)*row);for(k=0;k<row;k++){current_map[k] = (int*)malloc(sizeof(int)*col);}arrayCopy(maps[0][index],current_map,row,col);while (1) { //循环,等待用户命令system("CLS");printf("Round %d:\n",index+1);printf("\n");draw_map(current_map);printf("current points: %d\n",count);//找初始位置for (i=0;i<row;i++){for (j=0;j<col;j++){if (current_map[i][j]==6||current_map[i][j]==9)break;}if (current_map[i][j]==6||current_map[i][j]==9)break;}printf("current position (%d,%d)",i,j); input = getch(); //用getch()函数无需回车确认地获取用户输入,用于控制行走方向。if(input<0)input = getch();switch (input){case 72://如果人前面是空地。 //0代表空地 6代表人 //3代表目的地if(current_map[i-1][j]==0){current_map[i-1][j]=6+0; //人往前走一步,ID为人的ID()加上空地的ID()。if(current_map[i][j]==9) //如果当前人站的位置为目的地,则ID为(即人的ID()加上目的地ID())。current_map[i][j]=3; //将人往前走一步后原地的ID修改为空地ID()。elsecurrent_map[i][j]=0; //否则原地ID修改为空地ID 。 }//如果人前面是目的地。else if((current_map[i-1][j]==3)||(current_map[i-1][j]==9)){current_map[i-1][j]=6+3; //人往前走一步,ID为人ID+目的地ID=9。if(current_map[i][j]==9) //如果原地也是目的地(ID为)。current_map[i][j]=3; //人走后把原地ID修改回目的地ID。elsecurrent_map[i][j]=0; //否则原地ID修改为为空地ID}//如果人前面是箱子。//4代表箱子 //7箱子进入目的地else if(current_map[i-1][j]==4){//如果人前面是箱子,而箱子前面是空地。if (current_map[i-2][j]==0){ current_map[i-2][j]=4; //人推箱子往前走一步,把空地ID修改为箱子ID()//下面是对箱子原地进行判断if(current_map[i-1][j]==7) //如果箱子原地为目的地。current_map[i-1][j]=9; //人站在箱子的原地(目的地)时该地ID应该为人的ID+目的地ID=9。elsecurrent_map[i-1][j]=6; //否则,人站在了原来的空地上,ID应该为+0=6。//下面是对人原地进行判断if(current_map[i][j]==9) //如果之前是目的地。current_map[i][j]=3; //人走了之后修改回目的地ID。elsecurrent_map[i][j]=0; //否则就是空地。}//如果人的前面是箱子,而箱子前面是目的地。else if (current_map[i-2][j]==3){ current_map[i-2][j]=7; //ID为(目的地ID()+箱子ID()=7),表示已经把箱子推入了目的地。count++;//下面是对箱子原先位置的判断,同上。if(current_map[i-1][j]==7)current_map[i-1][j]=9;elsecurrent_map[i-1][j]=6;//下面是对人原先位置进行判断,同上。if(current_map[i][j]==9)current_map[i][j]=3;elsecurrent_map[i][j]=0;}}//如果人前面是已经进入某目的地的箱子(ID=7)。else if(current_map[i-1][j]==7){//如果人前面是已经进入某目的地的箱子,而箱子前面是空地。if(current_map[i-2][j]==0){count--;current_map[i-2][j]=4; //把箱子重新推到空地上,ID=箱子ID+空地ID=4。current_map[i-1][j]=9; //人自然而然的就站在了原先的目的地上了。//下面是对人原先地进行判断,方法同上。if(current_map[i][j]==9) current_map[i][j]=3;elsecurrent_map[i][j]=0;}//如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。if(current_map[i-2][j]==3){current_map[i-2][j]=7; //把箱子推入了另一目的地,自然,ID也应是。current_map[i-1][j]=9; //人站在了目的地上。//下面是对人原先站立地进行判断,方法同上。if(current_map[i][j]==9) current_map[i][j]=3;elsecurrent_map[i][j]=0;}}break;case 80: //down//如果人前面是空地。if(current_map[i+1][j]==0){current_map[i+1][j]=6+0; //人往前走一步,ID为人的ID()加上空地的ID()。if(current_map[i][j]==9) //如果当前人站的位置为目的地,则ID为(即人的ID()加上目的地ID())。current_map[i][j]=3; //将人往前走一步后原地的ID修改为空地ID()。elsecurrent_map[i][j]=0; //否则原地ID修改为空地ID 。 }//如果人前面是目的地。else if(current_map[i+1][j]==3){current_map[i+1][j]=6+3; //人往前走一步,ID为人ID+目的地ID=9。if(current_map[i][j]==9) //如果原地也是目的地(ID为)。current_map[i][j]=3; //人走后把原地ID修改回目的地ID。elsecurrent_map[i][j]=0; //否则原地ID修改为为空地ID}//如果人前面是箱子。else if(current_map[i+1][j]==4){//如果人前面是箱子,而箱子前面是空地。if (current_map[i+2][j]==0){ current_map[i+2][j]=4; //人推箱子往前走一步,把空地ID修改为箱子ID()//下面是对箱子原地进行判断if(current_map[i+1][j]==7) //如果箱子原地为目的地。current_map[i+1][j]=9; //人站在箱子的原地(目的地)时该地ID应该为人的ID+目的地ID=9。elsecurrent_map[i+1][j]=6; //否则,人站在了原来的空地上,ID应该为+0=6。//下面是对人原地进行判断if(current_map[i][j]==9) //如果之前是目的地。current_map[i][j]=3; //人走了之后修改回目的地ID。elsecurrent_map[i][j]=0; //否则就是空地。}//如果人的前面是箱子,而箱子前面是目的地。else if (current_map[i+2][j]==3){ current_map[i+2][j]=7; //ID为(目的地ID()+箱子ID()=7),表示已经把箱子推入了目的地。count++;//下面是对箱子原先位置的判断,同上。if(current_map[i+1][j]==7)current_map[i+1][j]=9;elsecurrent_map[i+1][j]=6;//下面是对人原先位置进行判断,同上。if(current_map[i][j]==9)current_map[i][j]=3;elsecurrent_map[i][j]=0;}}//如果人前面是已经进入某目的地的箱子(ID=7)。else if(current_map[i+1][j]==7){//如果人前面是已经进入某目的地的箱子,而箱子前面是空地。if(current_map[i+2][j]==0){count--;current_map[i+2][j]=4; //把箱子重新推到空地上,ID=箱子ID+空地ID=4。current_map[i+1][j]=9; //人自然而然的就站在了原先的目的地上了。//下面是对人原先地进行判断,方法同上。if(current_map[i][j]==9) current_map[i][j]=3;elsecurrent_map[i][j]=0;}//如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。if(current_map[i+2][j]==3){current_map[i+2][j]=7; //把箱子推入了另一目的地,自然,ID也应是。current_map[i+1][j]=9; //人站在了目的地上。//下面是对人原先站立地进行判断,方法同上。if(current_map[i][j]==9) current_map[i][j]=3;elsecurrent_map[i][j]=0;}}break;case 75://如果人前面是空地。if(current_map[i][j-1]==0){current_map[i][j-1]=6+0; //人往前走一步,ID为人的ID()加上空地的ID()。if(current_map[i][j]==9) //如果当前人站的位置为目的地,则ID为(即人的ID()加上目的地ID())。current_map[i][j]=3; //将人往前走一步后原地的ID修改为空地ID()。elsecurrent_map[i][j]=0; //否则原地ID修改为空地ID 。 }//如果人前面是目的地。else if(current_map[i][j-1]==3){current_map[i][j-1]=6+3; //人往前走一步,ID为人ID+目的地ID=9。if(current_map[i][j]==9) //如果原地也是目的地(ID为)。current_map[i][j]=3; //人走后把原地ID修改回目的地ID。elsecurrent_map[i][j]=0; //否则原地ID修改为为空地ID}//如果人前面是箱子。else if(current_map[i][j-1]==4){//如果人前面是箱子,而箱子前面是空地。if (current_map[i][j-2]==0){ current_map[i][j-2]=4; //人推箱子往前走一步,把空地ID修改为箱子ID()//下面是对箱子原地进行判断if(current_map[i][j-1]==7) //如果箱子原地为目的地。current_map[i][j-1]=9; //人站在箱子的原地(目的地)时该地ID应该为人的ID+目的地ID=9。elsecurrent_map[i][j-1]=6; //否则,人站在了原来的空地上,ID应该为+0=6。//下面是对人原地进行判断if(current_map[i][j]==9) //如果之前是目的地。current_map[i][j]=3; //人走了之后修改回目的地ID。elsecurrent_map[i][j]=0; //否则就是空地。}//如果人的前面是箱子,而箱子前面是目的地。else if (current_map[i][j-2]==3){ count++;current_map[i][j-2]=7; //ID为(目的地ID()+箱子ID()=7),表示已经把箱子推入了目的地。//下面是对箱子原先位置的判断,同上。if(current_map[i][j-1]==7)current_map[i][j-1]=9;elsecurrent_map[i][j-1]=6;//下面是对人原先位置进行判断,同上。if(current_map[i][j]==9)current_map[i][j]=3;elsecurrent_map[i][j]=0;}}//如果人前面是已经进入某目的地的箱子(ID=7)。else if(current_map[i][j-1]==7){//如果人前面是已经进入某目的地的箱子,而箱子前面是空地。if(current_map[i][j-2]==0){count--;current_map[i][j-2]=4; //把箱子重新推到空地上,ID=箱子ID+空地ID=4。current_map[i][j-1]=9; //人自然而然的就站在了原先的目的地上了。//下面是对人原先地进行判断,方法同上。if(current_map[i][j]==9) current_map[i][j]=3;elsecurrent_map[i][j]=0;}//如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。if(current_map[i][j-2]==3){current_map[i][j-2]=7; //把箱子推入了另一目的地,自然,ID也应是。current_map[i][j-1]=9; //人站在了目的地上。//下面是对人原先站立地进行判断,方法同上。if(current_map[i][j]==9) current_map[i][j]=3;elsecurrent_map[i][j]=0;}}break;case 77://如果人前面是空地。if(current_map[i][j+1]==0){current_map[i][j+1]=6+0; //人往前走一步,ID为人的ID()加上空地的ID()。if(current_map[i][j]==9) //如果当前人站的位置为目的地,则ID为(即人的ID()加上目的地ID())。current_map[i][j]=3; //将人往前走一步后原地的ID修改为空地ID()。elsecurrent_map[i][j]=0; //否则原地ID修改为空地ID 。 }//如果人前面是目的地。else if(current_map[i][j+1]==3){current_map[i][j+1]=6+3; //人往前走一步,ID为人ID+目的地ID=9。if(current_map[i][j]==9) //如果原地也是目的地(ID为)。current_map[i][j]=3; //人走后把原地ID修改回目的地ID。elsecurrent_map[i][j]=0; //否则原地ID修改为为空地ID}//如果人前面是箱子。else if(current_map[i][j+1]==4){//如果人前面是箱子,而箱子前面是空地。if (current_map[i][j+2]==0){ current_map[i][j+2]=4; //人推箱子往前走一步,把空地ID修改为箱子ID()//下面是对箱子原地进行判断if(current_map[i][j+1]==7) //如果箱子原地为目的地。current_map[i][j+1]=9; //人站在箱子的原地(目的地)时该地ID应该为人的ID+目的地ID=9。elsecurrent_map[i][j+1]=6; //否则,人站在了原来的空地上,ID应该为+0=6。//下面是对人原地进行判断if(current_map[i][j]==9) //如果之前是目的地。current_map[i][j]=3; //人走了之后修改回目的地ID。elsecurrent_map[i][j]=0; //否则就是空地。}//如果人的前面是箱子,而箱子前面是目的地。else if (current_map[i][j+2]==3){ count++;current_map[i][j+2]=7; //ID为(目的地ID()+箱子ID()=7),表示已经把箱子推入了目的地。//下面是对箱子原先位置的判断,同上。if(current_map[i][j+1]==7)current_map[i][j+1]=9;elsecurrent_map[i][j+1]=6;//下面是对人原先位置进行判断,同上。if(current_map[i][j]==9)current_map[i][j]=3;elsecurrent_map[i][j]=0;}}//如果人前面是已经进入某目的地的箱子(ID=7)。else if(current_map[i][j+1]==7){//如果人前面是已经进入某目的地的箱子,而箱子前面是空地。if(current_map[i][j+2]==0){count--;current_map[i][j+2]=4; //把箱子重新推到空地上,ID=箱子ID+空地ID=4。current_map[i][j+1]=9; //人自然而然的就站在了原先的目的地上了。//下面是对人原先地进行判断,方法同上。if(current_map[i][j]==9) current_map[i][j]=3;elsecurrent_map[i][j]=0;}//如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。if(current_map[i][j+2]==3){current_map[i][j+2]=7; //把箱子推入了另一目的地,自然,ID也应是。current_map[i][j+1]=9; //人站在了目的地上。//下面是对人原先站立地进行判断,方法同上。if(current_map[i][j]==9) current_map[i][j]=3;elsecurrent_map[i][j]=0;}}break;}if(count==boxNum) { //如果分数达到分system("CLS"); //清屏draw_map(current_map); break; //退出死循环}}count = 0;printf("\nCongratulations! \n"); //过关提示index++;}return 0;}void draw_map(int** map){for(i=0;i<row;i++){for(j=0;j<col;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 7:printf("$"); //数字代表箱子进入目的地break;case 6:printf("@"); //数字代表人break;case 9:printf("@"); //数字代表人进入目的地break;} }printf("\n"); //分行输出}}
参考地址:http://blog.csdn.net/hgj125073/article/details/8278243
0 0
- C语言,推箱子游戏
- C语言实现推箱子游戏
- C语言-推箱子游戏代码
- C语言实现推箱子游戏
- C语言之推箱子游戏代码
- C语言+EasyX编写推箱子游戏
- C 推箱子游戏
- C游戏 推箱子游戏
- c语言控制台输出制作推箱子游戏
- 【黑马程序员】C语言—推箱子游戏实现
- C语言实践之推箱子游戏思路与代码
- c实现 推箱子游戏
- C语言_推箱子
- c语言小游戏,推箱子
- c语言的推箱子
- 012-C语言小游戏之推箱子
- C语言实现推箱子小游戏
- c语言控制台推箱子小游戏
- 我的第一个汇编语言程序:HelloWorld
- vim学习笔记
- 会员卡管理系统技术解析(十三)库存卡作废记录查询
- 中国式教育-虎妈猫爸给我的启发
- MySQL-MMM实现MySQL高可用
- C语言,推箱子游戏
- vb.net版机房收费系统重构的成长历程(功能实现篇)
- 钟表维修管理系统技术解析 维修记录(五)
- 最近学习状态的感受
- 关闭窗口前提示
- (六)Linux环境部署(Centos+Nginx+Tomcat+Mysql) - 常用命令总结
- 第十一周项目3-职员有薪水了(1)
- hdu 2092 整数解
- Java迭代模式(Iterator模式)