當(dāng)前位置:
首頁 >
EasyX实现推箱子游戏
發(fā)布時(shí)間:2025/4/5
46
豆豆
生活随笔
收集整理的這篇文章主要介紹了
EasyX实现推箱子游戏
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 1 項(xiàng)目需求
- 2 模塊劃分
- 3 項(xiàng)目實(shí)現(xiàn)
- 3.1 地圖初始化
- 3.2 熱鍵控制
- 3.3 推箱子控制
- 3.4 游戲結(jié)束
1 項(xiàng)目需求
實(shí)現(xiàn)一款推箱子游戲,效果如下圖所示,具體規(guī)則:
2 模塊劃分
作用:
3 項(xiàng)目實(shí)現(xiàn)
3.1 地圖初始化
搭臺(tái)唱戲: 戲臺(tái)坐標(biāo)系(650 x 650)。
地圖表示: 使用二維數(shù)組 。
- 游戲道具顯示(墻、箱子、箱子目的地、小人、地板)。
- 便于程序在游戲過程中進(jìn)行邏輯判斷和控制小人向前一步的動(dòng)作控制。
- 判斷游戲結(jié)果。
道具表示:
- 墻:0
- 地板:1
- 箱子目的地:2
- 小人:3
- 箱子:4
- 箱子命中目標(biāo):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' //游戲環(huán)節(jié) 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 推箱子控制
/********************************************** *實(shí)現(xiàn)游戲四個(gè)方向(上、下、左、右)的控制 * 輸入: * direct - 人前進(jìn)方向 * 輸出: 無 **********************************************/ 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); //小人前進(jìn)一格 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); //小人前進(jìn)一格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); //小人前進(jìn)一格 changeMap(&man, FLOOR); man = next_pos; } } }3.4 游戲結(jié)束
/********************************************** *判斷游戲是否結(jié)束,如果不存在任何一個(gè)箱子目的地,就代表游戲結(jié)束 *輸入: 無 *返回值: * true - 游戲結(jié)束 false - 游戲繼續(xù) **********************************************/ 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; }/***********************************************游戲結(jié)束場(chǎng)景,在玩家通關(guān)后顯示 *輸入: * 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 您終于成為了一個(gè)合格的搬箱子老司機(jī)!"), &rec, DT_CENTER | DT_VCENTER | DT_SINGLELINE); }//main 函數(shù)中 if(isGameOver()){ gameOverScene(&bg_img); quit = true; }總結(jié)
以上是生活随笔為你收集整理的EasyX实现推箱子游戏的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 兴业荔枝闪贷是什么
- 下一篇: 设计非常优秀的软件界面