|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include<stdio.h>
- #include <stdlib.h>
- #include <conio.h>
- void keydown();
- void draw();
- int yanzheng();
- int a[8][8]={
- {1,1,1,1,1,1,1,1},
- {1,1,0,0,0,0,1,1},
- {1,1,0,1,0,0,1,1},
- {1,0,0,1,1,0,1,1},
- {1,0,4,4,3,3,0,1},
- {1,0,0,0,1,1,0,1},
- {1,1,5,0,1,0,0,1},
- {1,1,1,1,1,1,1,1}
- };
- //打印一个8行8列的map
- void draw()
- {
-
- //0:空的 1:▆ 3:☆ 4:★ 5:※ 7:⊙ 8:※
- int i,j;
- for(i=0;i<8;i++)
- {
- for(j=0;j<8;j++)
- {
- switch(a[i][j])
- {
- case 1:
- printf("▆"); //表示墙壁
- break;
- case 0:
- printf(" "); //表示空地
- break;
- case 3:
- printf("☆"); //表示目的地
- break;
- case 4:
- printf("★"); //表示箱子
- break;
- case 5:
- printf("※"); //表示人
- break;
- case 7:
- printf("⊙"); //表示箱子在目的地
- break;
- case 8:
- printf("※"); //表示人站在目的地上
- break;
- }
- }
- printf("\n");
- }
- }
- //键盘输入与游戏逻辑
- void keydown()
- {
- int i,j;
- char c=_getch(); //看不家的字符输入,要加头文件coni0.h
- for(i=0;i<8;i++)
- {
- for(j=0;j<8;j++)
- {
- if(a[i][j]==5||a[i][j]==8)
- {
- break;
- }
- }
- if(a[i][j]==5||a[i][j]==8)
- {
- break;
- }
- } //找到人的位置
- switch(c)
- {
- case 'w':
- case 'W':
- case 72:
- {
- if(a[i-1][j]==0||a[i-1][j]==3) //判断前方是不是空地或者目的地
- {
- a[i-1][j]+=5; //把上一个赋值加上5,表示人或者人站在目的地的上
- a[i][j]-=5; //把原来的赋值减5,表示空地或者目的地
- }
- else if(a[i-1][j]==4||a[i-1][j]==7) //判断前方是不是箱子或者箱子在目的地上
- {
- if(a[i-2][j]==0||a[i-2][j]==3) //在原来的判断上判断前方的前方是不是空地或者目的地
- {
- a[i-2][j]+=4; //把前方的前方的赋值加4,表示箱子或者箱子在目的地上
- a[i-1][j]+=1; //把前方的赋值加1,表示表示人或者人站在目的地的上
- a[i][j]-=5; //把原来位置的赋值减5,表示空地或者目的地
- }
- }
- }
- break; //前进变换
- case 's':
- case 'S':
- case 80:
- {
- if(a[i+1][j]==0||a[i+1][j]==3) //判断前方是不是空地或者目的地
- {
- a[i+1][j]+=5; //把上一个赋值加上5,表示人或者人站在目的地的上
- a[i][j]-=5; //把原来的赋值减5,表示空地或者目的地
- }
- else if(a[i+1][j]==4||a[i+1][j]==7) //判断前方是不是箱子或者箱子在目的地上
- {
- if(a[i+2][j]==0||a[i+2][j]==3) //在原来的判断上判断前方的前方是不是空地或者目的地
- {
- a[i+2][j]+=4; //把前方的前方的赋值加4,表示箱子或者箱子在目的地上
- a[i+1][j]+=1; //把前方的赋值加1,表示表示人或者人站在目的地的上
- a[i][j]-=5; //把原来位置的赋值减5,表示空地或者目的地
- }
- }
- }
- break; //后退变换
- case 'a':
- case 'A':
- case 75:
- {
- if(a[i][j-1]==0||a[i][j-1]==3) //判断前方是不是空地或者目的地
- {
- a[i][j-1]+=5; //把上一个赋值加上5,表示人或者人站在目的地的上
- a[i][j]-=5; //把原来的赋值减5,表示空地或者目的地
- }
- else if(a[i][j-1]==4||a[i][j-1]==7) //判断前方是不是箱子或者箱子在目的地上
- {
- if(a[i][j-2]==0||a[i][j-2]==3) //在原来的判断上判断前方的前方是不是空地或者目的地
- {
- a[i][j-2]+=4; //把前方的前方的赋值加4,表示箱子或者箱子在目的地上
- a[i][j-1]+=1; //把前方的赋值加1,表示表示人或者人站在目的地的上
- a[i][j]-=5; //把原来位置的赋值减5,表示空地或者目的地
- }
- }
- }
- break; //向左变换
- case 'd':
- case 'D':
- case 77:
- {
- if(a[i][j+1]==0||a[i][j+1]==3) //判断前方是不是空地或者目的地
- {
- a[i][j+1]+=5; //把上一个赋值加上5,表示人或者人站在目的地的上
- a[i][j]-=5; //把原来的赋值减5,表示空地或者目的地
- }
- else if(a[i][j+1]==4||a[i][j+1]==7) //判断前方是不是箱子或者箱子在目的地上
- {
- if(a[i][j+2]==0||a[i][j+2]==3) //在原来的判断上判断前方的前方是不是空地或者目的地
- {
- a[i][j+2]+=4; //把前方的前方的赋值加4,表示箱子或者箱子在目的地上
- a[i][j+1]+=1; //把前方的赋值加1,表示表示人或者人站在目的地的上
- a[i][j]-=5; //把原来位置的赋值减5,表示空地或者目的地
- }
- }
- }
- break; //向右变换
- }
- }
- //验证是否已经结束游戏
- int yanzheng()
- {
- int i,j;
- int count=0;
- for(i=0;i<8;i++)
- {
- for(j=0;j<8;j++)
- {
- if(a[i][j]==7)
- {
- count+=1;
- }
- }
- }
- return count;
- }
- int main()
- {
- int c;
- while(1)
- {
- draw();
- c=yanzheng();
- if(c==2)
- {
- printf("game over\n");
- break;
- }
- keydown();
- system("cls");
- }
- system("pause");
- return 0;
- }
复制代码 |
|