EasyX实现推箱子游戏
生活随笔
收集整理的這篇文章主要介紹了
EasyX实现推箱子游戏
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1 項目需求
- 2 模塊劃分
- 3 項目實現
- 3.1 地圖初始化
- 3.2 熱鍵控制
- 3.3 推箱子控制
- 3.4 游戲結束
1 項目需求
實現一款推箱子游戲,效果如下圖所示,具體規則:
2 模塊劃分
作用:
3 項目實現
3.1 地圖初始化
搭臺唱戲: 戲臺坐標系(650 x 650)。
地圖表示: 使用二維數組 。
- 游戲道具顯示(墻、箱子、箱子目的地、小人、地板)。
- 便于程序在游戲過程中進行邏輯判斷和控制小人向前一步的動作控制。
- 判斷游戲結果。
道具表示:
- 墻:0
- 地板:1
- 箱子目的地:2
- 小人:3
- 箱子:4
- 箱子命中目標:5
3.2 熱鍵控制
熱鍵定義: 左 => a 下=> s 上=> w 右 => d 退出 => q。
#include <conio.h> //控制鍵 上、下、左、右 控制方向,'q' 退出 #define KEY_UP 'w' #define KEY_LEFT 'a' #define KEY_RIGHT 'd' #define KEY_DOWN 's' #define KEY_QUIT 'q' //游戲環節 bool quit = false; do {if(_kbhit()){ //玩家按鍵 char ch = _getch(); if (ch == KEY_UP){ gameControl(UP); }else if(ch == KEY_DOWN){ gameControl(DOWN); }else if(ch == KEY_LEFT){ gameControl(LEFT); }else if(ch == KEY_RIGHT){ gameControl(RIGHT); }else if(ch == KEY_QUIT){ quit = true; } }Sleep(100); }while(quit==false); //!quit3.3 推箱子控制
/********************************************** *實現游戲四個方向(上、下、左、右)的控制 * 輸入: * direct - 人前進方向 * 輸出: 無 **********************************************/ void gameControl(enum _DIRECTION direct) {struct _POS next_pos = man; struct _POS next_next_pos = man; switch (direct) { case UP: next_pos.x--; next_next_pos.x -= 2; break; case DOWN: next_pos.x++; next_next_pos.x += 2; break; case LEFT: next_pos.y--; next_next_pos.y -= 2; break; case RIGHT: next_pos.y++; next_next_pos.y += 2; break; }//宏展開 next_pos.x>=0 && next_pos.x<LINE && next_pos.y>=0 && next_pos.y <COLUMN if( isValid(next_pos) && map[next_pos.x][next_pos.y] == FLOOR ){// 人的前方是地板 changeMap(&next_pos, MAN); //小人前進一格 changeMap(&man, FLOOR); man = next_pos; }else if(isValid(next_next_pos) && map[next_pos.x][next_pos.y] == BOX){//人的前方是箱子 //兩種情況,箱子前面是地板或者是箱子目的地if( map[next_next_pos.x][next_next_pos.y] == FLOOR){ changeMap(&next_next_pos, BOX); changeMap(&next_pos, MAN); //小人前進一格changeMap(&man, FLOOR); man = next_pos; }else if(map[next_next_pos.x][next_next_pos.y] == BOX_DES){ changeMap(&next_next_pos, HIT); changeMap(&next_pos, MAN); //小人前進一格 changeMap(&man, FLOOR); man = next_pos; } } }3.4 游戲結束
/********************************************** *判斷游戲是否結束,如果不存在任何一個箱子目的地,就代表游戲結束 *輸入: 無 *返回值: * true - 游戲結束 false - 游戲繼續 **********************************************/ bool isGameOver() { for (int i = 0; i< LINE; i++) { for (int j = 0; j < COLUMN; j++) { if (map[i][j] == BOX_DES) return false; } }return true; }/***********************************************游戲結束場景,在玩家通關后顯示 *輸入: * bg - 背景圖片變量的指針 *返回值: 無 **********************************************/ void gameOverScene(IMAGE *bg) { putimage(0, 0, bg); settextcolor(WHITE); RECT rec = { 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT }; settextstyle(20, 0, _T("宋體")); drawtext(_T("恭喜您~ \n 您終于成為了一個合格的搬箱子老司機!"), &rec, DT_CENTER | DT_VCENTER | DT_SINGLELINE); }//main 函數中 if(isGameOver()){ gameOverScene(&bg_img); quit = true; }總結
以上是生活随笔為你收集整理的EasyX实现推箱子游戏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 兴业荔枝闪贷是什么
- 下一篇: 设计非常优秀的软件界面