标签:
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 }
标签:
原文地址:http://www.cnblogs.com/dan-alone/p/4678624.html