C语言 推箱子

  1 /*
  2 作者:正义V领
  3 内容:游戏【推箱子】
  4 人物:▲
  5 墙:■
  6 目的地:☆
  7 箱子:□
  8 控制键盘:
  9       w:前进
 10       a:向左
 11       d:向右
 12       s:后退
 13 */
 14 #include<stdio.h>
 15 #include<conio.h>//getch()    
 16 /*
 17   getchar()是显示回文,enter键盘接受
 18   getch()不显示回文,按下马上接受
 19 
 20 */
 21 
 22 int map[7][10]={
 23 
 24     {0,0,0,1,1,1,1,1,1,0},
 25     {0,1,1,1,0,0,0,0,1,0},
 26     {1,1,3,0,4,1,1,0,1,1},
 27     {1,3,3,4,0,4,0,5,0,1},
 28     {1,3,3,0,4,0,4,0,1,1},
 29     {1,1,1,1,1,1,0,0,1,0},
 30     {0,0,0,0,0,1,1,1,1,0}
 31 };
 32 
 33 
 34 
 35 void DrawMap(){
 36     int i,j;
 37      for(i=0; i<7;i++)
 38      {
 39      for(j=0; j<10;j++)
 40      {
 41      switch(map[i][j])
 42      {
 43  case 0:
 44      printf("  ");
 45      break;
 46  case 1:
 47       printf("");
 48       break;
 49  case 3:
 50      printf("");
 51      break;
 52  case 4:
 53      printf("");
 54      break;
 55  case 5:
 56      printf("");
 57      break;
 58  case 7:      //4+3
 59      printf("");
 60      break;
 61  case 8:           //5+3
 62      printf("");
 63      break;
 64 
 65  }
 66  
 67      };
 68   
 69   printf("\n");
 70 }
 71 }
 72 
 73 void PlayGame(){
 74    //获取当前人的位置
 75     int row,col,i,j;
 76     char input;
 77     for(i=0;i<7;i++)
 78     {
 79       for(j=0;j<10;j++)
 80       {
 81         if(map[i][j]==5)
 82         {
 83          row=i;
 84          col=j;
 85 
 86         
 87         }
 88       
 89       }
 90     
 91     
 92     }
 93  printf("(%d %d)\n",row,col);
 94 
 95 /*
 96  人能走的情况:
 97      人的前面是空地
 98      人的前面是目的地
 99      人的前面是箱子,箱子的前面是空地
100      人的前面是箱子,箱子的前面是目的地
101  
102  
103  
104  */
105     input = getch();
106 
107     switch(input)
108     {
109     case 'a'://向左
110             if(map[row][col-1]==0 || map[row][col-1]==3)
111         {
112         
113           map[row][col]-=5;
114           map[row][col-1]+=5;
115           
116         
117         }
118         else if(map[row][col-1]==4 ||map[row][col-1]==7)//如果前面的是箱子
119         {
120         
121         if(map[row][col-2]==0 ||map[row][col-2]==3)
122         {
123          map[row][col-2]+=4;
124          map[row][col-1]+=1;
125          map[row][col]-=5;
126         
127         }
128         
129         
130         }
131         break;
132     case 'w'://向前
133         if(map[row - 1][col]==0 || map[row-1][col]==3)
134         {
135             /*if(map[row][col]==5)
136             {
137               map[row][col]=0;
138             }
139             else{
140               map[row][col]=3;
141             
142             }*/
143           map[row][col]-=5;
144           map[row-1][col]+=5;
145           
146         
147         }
148         else if(map[row-1][col]==4 ||map[row-1][col]==7)//如果前面的是箱子
149         {
150         
151         if(map[row-2][col]==0 ||map[row-2][col]==3)
152         {
153          map[row-2][col]+=4;
154          map[row-1][col]+=1;
155          map[row][col]-=5;
156         
157         }
158         
159         
160         }
161         break;
162     case 'd'://向右
163         if(map[row][col+1]==0 || map[row][col+1]==3)
164         {
165         
166           map[row][col]-=5;
167           map[row][col+1]+=5;
168           
169         
170         }
171         else if(map[row][col+1]==4 ||map[row][col+1]==7)//如果前面的是箱子
172         {
173         
174         if(map[row][col+2]==0 ||map[row][col+2]==3)
175         {
176          map[row][col+2]+=4;
177          map[row][col+1]+=1;
178          map[row][col]-=5;
179         
180         }
181         
182         
183         }
184         break;
185     case 's'://向后
186         if(map[row +1][col]==0 || map[row+1][col]==3)
187         {
188         
189           map[row][col]-=5;
190           map[row+1][col]+=5;
191           
192         
193         }
194         else if(map[row+1][col]==4 ||map[row+1][col]==7)//如果前面的是箱子
195         {
196         
197         if(map[row+2][col]==0 ||map[row+2][col]==3)
198         {
199          map[row+2][col]+=4;
200          map[row+1][col]+=1;
201          map[row][col]-=5;
202         
203         }
204         
205         
206         }
207         break;
208         
209     }
210 
211 
212 
213 }
214 
215 
216 int main()
217 {
218 
219  while(1){
220  system("cls");
221  DrawMap();
222  PlayGame();
223     }
224  return 0;
225 
226 
227 
228 }
View Code

 

posted @ 2018-01-20 11:38  Justice-V  阅读(162)  评论(0)    收藏  举报