C 控制台遊戲 推箱子 實現人不能撞牆

2021-10-20 04:13:07 字數 1808 閱讀 4551

思路:

1、再定義兩個變數,用於存放玩家的座標的備份(值)。

2、在地圖模組中,把玩家的座標賦給玩家的備份,對當前座標進行備份。

3、因為在地圖模組中,按下enter鍵移動後,玩家的座標會根據方向隨之改變。所以先檢測玩家是否撞牆(當玩家的值等於牆的值),把現在玩家的值賦值給之前備份的座標,實現玩家座標不在根據方向改變。

// 2021.2.24(作業).cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include #include using namespace std;

#define key_down(vk_code) getasynckeystate(vk_code)&0x8000?1:0

int _tmain(int argc, _tchar* ar**)

, ,

, ,

, ,

, ,

, ,

, ,

, ,

};while (true)//用於進行迴圈重新整理

}else if (key_down(vk_up))//同上

}if (key_down(vk_return))//檢測是否按下enter鍵

else if (1 == nmenustate)//如果當前箭頭位置為遊戲設定

else if (2 == nmenustate)

}//畫出選單

cout << "■■■■■■■■■■■■■■■■■■■■" << endl;//因為放在while(true)裡面,所以這裡會一直執行

cout << "■■■■■■■■■■■■■■■■■■■■" << endl;

if (0 == nmenustate)//畫箭頭位置

else if (1 == nmenustate)

else if (2 == nmenustate)

cout << "■■■■■■■■■■■■■■■■■■■■" << endl;

cout << "■■■■■■■■■■■■■■■■■■■■" << endl;

} //地圖介面

if (1 == ngamestate)

//資料更新,要在渲染的前面

//設定按鍵讓小人移動

if (key_down(vk_up))

else if (key_down(vk_down))

else if (key_down(vk_left))

else if (key_down(vk_right))

//檢測玩家是否撞牆

if (1 == arrmap[nplayerrow][nplayercol]) //當玩家的值為1

//渲染

//二維陣列的遍歷

for (int i = 0; i < 15; i++) //行數為15

else if (i == nplayerrow && j == nplayercol)//如果當前的行為玩家的行,當前的列為玩家的列(當前的位置為玩家的位置)

else

}cout << endl;//換行,排列成二維陣列的形狀}}

//設定介面

if (2 == ngamestate)

cout << "我是設定頁面" << endl;

} //退出介面

else if (3 == ngamestate)

cout << "我是退出頁面" << endl;

} system("cls");//系統清屏

}system("pause");

return 0;

}

推箱子(c 控制台)

0空地 1牆 3目的地 4箱子 5人 7箱子在目的地 8人在目的地 int map 10 10 void drawmap for int i 0 i 10 i for int j 0 j 10 j switch map i j case 0 cout break case 1 cout break ...

基於c 實現的推箱子遊戲(控制台程式)

基於c 實現的小遊戲推箱子,執行環境windows,vs下編譯,這個小遊戲很簡單實現,首先先自己想一下讓自己來玩這個遊戲需要什麼,1 遊戲介面 及地圖 由地圖聯想到我們可以設定遊戲的關數 本程式中我只寫了一關,可以實現靈活新增 2 介面需要什麼 遊戲所需要的元素 及箱子 box 人 people 目...

C 控制台實現貪吃蛇遊戲

剛學完了c語言,便嘗試的寫了貪吃蛇的 但是效果不佳,很多的bug,所以,這個學了c 便重新的寫了這個小遊戲,用類來封裝!先是標頭檔案 struct snake class snake snake void display 顯示蛇身函式 void rightmove 右移函式 void leftmov...