C语言 控制台版 推箱子

  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语言)