设为首页 加入收藏

TOP

C++实现2048小游戏(二)
2019-09-06 00:26:38 】 浏览:121
Tags:实现 2048 小游戏
143 } 144 putimage(x,y,image+k); 145 } 146 } 147 isOver = true; 148 } 149 150 //随机产生2或者4; 151 void randIntNum() 152 { 153 bool haszero = false; 154 bool isOk=false; 155 srand((unsigned)time(NULL)); //随机函数种子 156 for (int i = 0; i < 4; i++) 157 { 158 for (int j = 0; j < 4; j++) 159 { 160 if (map[i][j] == 0) 161 { 162 haszero = true; 163 map[i][j] = (rand() % 3) * 2; 164 if (map[i][j] == 0) 165 { 166 continue; 167 } 168 isOk = true; 169 break; 170 } 171 } 172 if (isOk) 173 { 174 break; 175 } 176 } 177 if (!isOk) 178 { 179 isOk = false; 180 if (haszero) 181 { 182 for (int i = 0; i < 4; i++) 183 { 184 for (int j = 0; j < 4; j++) 185 { 186 if (map[i][j] == 0) 187 { 188 map[i][j] = 2; 189 isOk = true; 190 break; 191 } 192 } 193 if (isOk) 194 { 195 break; 196 } 197 } 198 } 199 } 200 for (int i = 0; i < 4; i++)//检测最后一步是否留有空位,若全满游戏结束 201 { 202 for (int j = 0; j < 4; j++) 203 { 204 if (map[i][j] == 0) 205 { 206 drawMap(); 207 return; 208 } 209 } 210 } 211 for (int i = 0; i < 4; i++)//游戏失败则重置 212 { 213 for (int j = 0; j < 4; j++) 214 { 215 if (i==0&&j==0) 216 { 217 map[i][j] = 2; 218 continue; 219 } 220 map[i][j] = 0; 221 } 222 } 223 drawMap(); 224 } 225 226 //按键响应 227 void keyDownAndDraw() 228 { 229 while (true) 230 { 231 char key = _getch();//接收用户按键 232 if (isOver) 233 { 234 isOver = false; 235 switch (key) 236 { 237 case 'W': 238 case'w': 239 case 72: 240 ChangeOnKeyDown(Up); 241 break; 242 case 'S': 243 case's': 244 case 80: 245 ChangeOnKeyDown(Down); 246 break; 247 case 'a': 248 case'A': 249 case 75: 250 ChangeOnKeyDown(Left); 251 break; 252 case 'D': 253 case'd': 254 case 77: 255 ChangeOnKeyDown(Right); 256 break; 257 default: 258 isOver = true; 259 break; 260 } 261 } 262 } 263 } 264 void ChangeOnKeyDown(direction Direction) 265 { 266 int Map[4][4] = { 0 }; 267 bool CanMove; 268 switch (Direction)//将所有方向改为向左方向,并利用向左算法计算各个方向 269 { 270 case Up: 271 for (int i = 0; i < 4; i++) 272 { 273 for (int j = 0; j < 4; j++) 274 { 275 Map[j][i] = map[i][j]; 276 } 277 } 278 break; 279 case Down: 280 for (int i = 0; i < 4; i++) 281 { 282 for (int j = 0; j < 4; j++) 283 { 284 Map[j][3-i] = map[i][j]; 285 } 286 } 287 break; 288 case Left: 289 for (int i = 0; i < 4; i++) 290 { 291 for (int j = 0; j < 4; j++) 292 { 293 Map[i][j] = map[i][j]; 294 } 295 } 296 break; 297 case Right: 298 for (int i = 0; i < 4; i++) 299 { 300 for (int j = 0; j < 4; j++) 301 { 302 Map[i][3-j] = map[i][j]; 303 } 304 } 305 break; 306 default: 307 break; 308 } 309 //向左算法 310 CanMove=TurnLeft(Map); 311 //将向左改回各自方向 312 switch (Direction) 313 { 314 case Up: 315 for (int i = 0; i < 4; i++) 316 { 317 for (int j = 0; j < 4; j++) 318 { 319 map[j][i] =Map[i][j]; 320 } 321 } 322 break; 323 case Down: 324 for (int i = 0; i < 4; i++) 325 { 326 for (int j = 0; j < 4; j++) 327 { 328 map[3-j][i] = Map[i][j]; 329 } 330 } 331 break; 332 case Left: 333 for (int i = 0; i < 4; i++) 334 { 335 for (int j = 0; j < 4; j++) 336 { 337 map[i][j] = Map[i][j]; 338 } 339 } 340 break; 341 case Right: 342 for (int i = 0; i < 4; i++) 343 { 344 for (int j = 0; j < 4; j++) 345 { 346 map[i][3-j] = Map[i][j]; 347 } 348 } 349 break; 350 default: 351 break; 352 } 353 if (CanMove) 354 { 355 randIntNum(); 356 drawMap(); 357 } 358 else 359 {
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇数据结构:队列queue 函数push() .. 下一篇c++无关类型指针的强制转换的一个..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目