码迷,mamicode.com
首页 > 编程语言 > 详细

C语言 控制台版 推箱子

时间:2015-07-26 22:12:29      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:

  1 /*
  2  * box.c
  3  * 推箱子
  4  *Author: Dan Alone Studio
  5  *Date: 2015-07-26
  6  */
  7 
  8 #include<stdio.h>
  9 #include<stdlib.h>
 10 
 11 typedef struct 
 12 {
 13     int row;
 14     int col;
 15 } Pos;
 16 
 17 typedef struct
 18 {
 19     Pos man;
 20     Pos box;
 21 } Mab;
 22 
 23 Pos temp1;
 24 Pos temp2;
 25 
 26 
 27 //**********函数声明**********
 28 //初始化人物
 29 void init_man(Mab *p_mab);
 30 //初始化箱子
 31 void init_box(Mab *p_mab);
 32 //展示地图面板
 33 void show_map(Mab *p_mab);
 34 //移动人物与箱子
 35 void move_mab(Mab *p_mab);
 36 //判断人和箱子是否会撞墙
 37 int mab_bounce();
 38 
 39 
 40 int main()
 41 {
 42     Pos pos = {};    
 43     Mab mab = {};
 44     
 45     srand(time(0));
 46 
 47 
 48     //初始化人物
 49     init_man(&mab);
 50     
 51     while(1)
 52     {
 53         //初始化箱子
 54         init_box(&mab);
 55         if(mab.box.row != mab.man.row &&
 56                 mab.box.col != mab.man.col)
 57         {
 58             break;
 59         }
 60     }
 61 
 62     while(1)
 63     {
 64         //展示地图面板
 65         show_map(&mab);
 66         //移动人和箱子
 67         move_mab(&mab);
 68     }
 69 
 70     //Mab *p_mab = &mab;
 71     
 72 
 73     return 0;
 74 }
 75 
 76 
 77 
 78 
 79 //初始化人物
 80 void init_man(Mab *p_mab)
 81 {
 82     p_mab->man.row = rand() % 9 + 1;
 83     p_mab->man.col = rand() % 9 + 1;
 84     
 85 }
 86 
 87 
 88 //初始化箱子
 89 void init_box(Mab *p_mab)
 90 {
 91     p_mab->box.row = rand() % 8 + 2;
 92     p_mab->box.col = rand() % 8 + 2;
 93 
 94 }
 95 
 96 
 97 //展示地图面板
 98 void show_map(Mab *p_mab)
 99 {
100     int row, col;
101     for(row = 1;row <= 10; row++)
102     {
103         for(col = 1;col <= 10; col++)
104         {
105             if(p_mab->man.row == row && p_mab->man.col == col)
106             {
107                 printf(" R");
108             }
109             else if(p_mab->box.row == row && p_mab->box.col == col)
110             {
111                 printf(" $");
112             }
113             else
114             {
115                 if(row == 1 || row == 10)
116                 {
117                     printf(" -");
118                 }
119                 else if(col == 1 || col == 10)
120                 {
121                     printf(" |");
122                 }
123                 else
124                 {
125                         printf(" *");
126                 }
127             }
128         }
129         printf("\n");
130     }
131 }
132 
133 
134 //移动人物与箱子
135 void move_mab(Mab *p_mab)
136 {
137     printf("请输入w向上 s向下\na向左 d向右\n");
138     char direction;
139     scanf(" %c", &direction);
140 
141     //Pos temp1;
142     //Pos temp2;
143     temp1 = p_mab->man;
144     temp2 = p_mab->box;
145     
146     switch(direction)
147     {
148         case w:
149             temp1.row--;
150             
151             if(mab_bounce() == 1)
152             {
153                 return;
154             }
155 
156             if(temp1.row == temp2.row && temp1.col == temp2.col)
157             {
158                 temp2.row--;
159                 
160                 if(mab_bounce() == 1)
161                 {
162                     return;
163                 }
164                 
165                 p_mab->man = p_mab->box;
166                 p_mab->box = temp2;
167             }
168             
169         break;
170         
171         case s:
172             temp1.row++;
173             
174             if(mab_bounce() == 1)
175             {
176                 return;
177             }
178             
179             if(temp1.row == temp2.row && temp1.col == temp2.col)
180             {
181                 temp2.row++;
182                 
183                 if(mab_bounce() == 1)
184                 {
185                     return;
186                 }
187         
188                 p_mab->man = p_mab->box;
189                 p_mab->box = temp2;
190             }
191         break;
192 
193         case a:
194             
195             temp1.col--;
196 
197             if(mab_bounce() == 1)
198             {
199                 return;
200             }
201 
202             if(temp1.row == temp2.row && temp1.col == temp2.col)
203             {
204                 temp2.col--;
205                 
206                 if(mab_bounce() == 1)
207                 {
208                     return;
209                 }
210                 
211                 p_mab->man = p_mab->box;
212                 p_mab->box = temp2;
213             } 
214         break;
215 
216         case d:
217             temp1.col++;
218 
219             if(mab_bounce() == 1)
220             {
221                 return;
222             }
223 
224             if(temp1.row == temp2.row && temp1.col == temp2.col)
225             {
226                 temp2.col++;
227                 
228                 if(mab_bounce() == 1)
229                 {
230                     return;
231                 }
232                 
233                 p_mab->man = p_mab->box;
234                 p_mab->box = temp2;
235             }
236         break;
237 
238         default:
239             break;
240     }
241     
242     p_mab->man.row = 0;
243     p_mab->man.col = 0;
244     p_mab->man = temp1;
245     
246 }
247 
248 //判断人和箱子是否会相撞
249 int mab_bounce()
250 {
251     //不撞墙返回0
252     if(temp1.row < 2 || temp1.row > 9 ||
253             temp1.col < 2 || temp1.col > 9 ||
254             temp2.row < 3 || temp2.row > 8 ||
255             temp2.col < 3 || temp2.col > 8)
256         {
257             //不撞返回1
258             return 1;
259         }
260         else
261         {
262             return 0;
263         }
264 
265 }

 

C语言 控制台版 推箱子

标签:

原文地址:http://www.cnblogs.com/dan-alone/p/4678624.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!