日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

EasyX实现推箱子游戏

發布時間:2025/4/5 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

    #include <graphics.h> #include <iostream> #include <stdlib.h> #include <string> using namespace std; #define RATIO 61 #define SCREEN_WIDTH 960 #define SCREEN_HEIGHT 768 #define LINE 9 #define COLUMN 12 #define START_X 100 #define START_Y 150 IMAGE images[6]; /*游戲地圖*/ int map[LINE][COLUMN] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0 },{ 0, 1, 4, 1, 0, 2, 1, 0, 2, 1, 0, 0 },{ 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0 },{ 0, 1, 0, 2, 0, 1, 1, 4, 1, 1, 1, 0 },{ 0, 1, 1, 1, 0, 3, 1, 1, 1, 4, 1, 0 },{ 0, 1, 2, 1, 1, 4, 1, 1, 1, 1, 1, 0 },{ 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0 },{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }}; int main(void) {IMAGE bg_img; //搭臺唱戲 initgraph(SCREEN_WIDTH, SCREEN_HEIGHT); loadimage(&bg_img, _T("blackground.bmp"), SCREEN_WIDTH, SCREEN_HEIGHT, true); putimage(0, 0, &bg_img); //加載道具圖標 loadimage(&images[0], _T("wall.bmp"), RATIO, RATIO, true); loadimage(&images[1], _T("floor.bmp"), RATIO, RATIO, true); loadimage(&images[2], _T("des.bmp"), RATIO, RATIO, true); loadimage(&images[3], _T("man.bmp"), RATIO, RATIO, true); loadimage(&images[4], _T("box.bmp"), RATIO, RATIO, true); loadimage(&images[5], _T("box.bmp"), RATIO, RATIO, true); for(int i = 0; i< LINE; i++){ for(int j = 0; j < COLUMN; j++){ putimage(START_X+j*RATIO, START_Y+i*RATIO, &images[map[i][j]]); } }system("pause"); return 0; }

    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); //!quit

    3.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实现推箱子游戏的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 中文字幕亚洲欧美日韩 | 日韩精品视频一区二区在线观看 | 久久精品99久久久久久 | www.狠狠操.com| 日本免费网址 | 成人免费观看视频大全 | 五月婷婷激情五月 | 小罗莉极品一线天在线 | 少妇日皮视频 | 亚洲欧美一区二区视频 | 善良的女朋友在线观看 | 天天拍夜夜操 | 激情免费视频 | 亚洲精品一区二区三区四区 | 少妇人妻真实偷人精品视频 | 制服.丝袜.亚洲.中文.综合懂 | 国产精品爽爽久久久久久 | 国产麻豆午夜三级精品 | 9l视频自拍九色9l视频 | 精品一区二区三区成人免费视频 | av小说在线 | 国产精品1 | 性一交一乱一伧老太 | 亚洲精品乱码久久久久久蜜桃不卡 | 国产又爽又色 | 久久青青 | 黄色网久久 | jizz日本在线观看 | 超碰95在线 | 天天亚洲| 69视频一区二区三区 | 91精产国品 | 国产一级二级三级精品 | 91麻豆蜜桃 | 伊人干综合 | 久久国产劲爆∧v内射 | 麻豆国产精品 | 最近中文字幕在线观看 | 午夜精品久久久久久久蜜桃 | 97超碰精品 | 九九爱精品 | 色在线免费视频 | 日韩av视屏 | 国产亚洲综合精品 | 久草国产在线视频 | 亚洲成人中文 | 午夜寻花 | 日日射射 | 91香蕉视频在线观看免费 | 精品日本一区二区三区 | 国产极品美女在线 | 亚洲精品高清无码视频 | 欧美精品国产精品 | 麻豆md0077饥渴少妇 | 亚洲一区不卡在线 | 亚洲AV无码国产精品播放在线 | 久久精品人人做人人爽 | 特黄一级大片 | 双性人做受视频 | 天天5g天天爽免费观看 | 国产午夜免费福利 | 色噜噜亚洲 | 欧美性色19p | 欧美性粗暴 | 在线观看日韩av电影 | 日本视频在线观看免费 | 成年人免费高清视频 | 国产一区免费在线观看 | 国产精品天天看 | 久久久久久久久网站 | 成人h动漫精品一区二区器材 | 国产精品一区二区三区四区在线观看 | 水蜜桃av无码| 国产精品精品国产色婷婷 | 国产精品呦呦 | 青青草原综合久久大伊人精品 | 国产一区亚洲一区 | 性高潮久久久久久久 | 91精品一区二区三区在线观看 | 欧美区一区二区 | 波多野结衣二区 | 六月丁香激情网 | 亚洲欧美乱日韩乱国产 | 人妻丰满熟妇岳av无码区hd | 日日爽夜夜 | 黄色片网站视频 | 三年在线观看视频 | 精品人妻一区二区三区久久嗨 | 日日射夜夜操 | 国产视频大全 | 国产精品久久久久久妇女 | 中日韩免费毛片 | 蜜桃av色偷偷av老熟女 | 99热这里只有精 | 久久久久99| 三级毛毛片 | 激情网av | 亚洲第一欧美 | 日本www|