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

2021-09-12 21:08:13 字數 4185 閱讀 8336

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

,人(people)

,目的地(destination)

。這些元素在遊戲中怎樣實現,首先人可以進行上下左右移動,目的地是不動的,人推動箱子達到目的地後遊戲為贏。這樣這個程式所需要的基本上清楚了。

所以可以先寫類(sokoban類)

/*----------------- name: zhonggaoke --------------*/

/*----------------- emil: [email protected] -------*/

/*----------------- project: sokoban --------------*/

#ifndef sokoban_h

#define sokoban_h

#include#include#includeclass sokoban

box;

/*目的地*/

typedef struct destination dta;

};using namespace std;

#endif

接著就是具體函式的實現:

#include"sokoban.h"

/*控制輸出位置*/

int gotoxy(int x, int y)

/*建構函式*/

sokoban::sokoban() }}

/*析構函式*/

sokoban::~sokoban(){}

/*畫介面*/

int sokoban::display()

} cout << endl;

} gotoxy(0, 18); cout << "步數:" << stepnumber;

return 0;

}/*遊戲介面初始化*/

int sokoban::sokobanoneface()

; int two = ;

int three = ;

int four = ;

int five = ;

int six = ;

for (int i = 0; i < 3; i++)

for (int i = 0; i < 3; i++)

for (int i = 0; i < 4; i++)

for (int i = 0; i < 5; i++)

for (int i = 0; i < 4; i++)

for (int i = 0; i < 2; i++)

display();

return 0;

}/*上移*/

int sokoban::moveup()

//上為空白

if (face[people_x - 1][people_y] == 1 && face[people_x][people_y] != 5)

//人和目的地重合

if (face[people_x][people_y] == 5 && face[people_x - 1][people_y] != 0)

if (face[people_x - 1][people_y] == 0 && face[people_x][people_y] == 5) {}

//上為目的地

if (face[people_x - 1][people_y] == 4)

//上為箱子

if (face[people_x - 1][people_y] == 3)

//目的地

else if (face[people_x - 2][people_y]==4)

//空地

else if (face[people_x - 2][people_y] == 1)

}system("cls");

display();

return 0;

}/*下移*/

int sokoban::movedown()

//下為空白

if (face[people_x + 1][people_y] == 1 && face[people_x][people_y] != 5)

//人和目的地重合

if (face[people_x][people_y] == 5 && face[people_x + 1][people_y] != 0)

if (face[people_x + 1][people_y] == 0 && face[people_x][people_y] == 5) {}

//下為目的地

if (face[people_x + 1][people_y] == 4)

//下為箱子

if (face[people_x + 1][people_y] == 3)

//目的地

else if (face[people_x + 2][people_y] == 4)

//空地

else if (face[people_x + 2][people_y] == 1)

}system("cls");

display();

return 0;

}/*左移*/

int sokoban::moveleft()

//空地

if (face[people_x][people_y - 1] == 1 && face[people_x][people_y] != 5)

//人和目的地重合

if (face[people_x][people_y] == 5 && face[people_x][people_y-1] != 0)

if (face[people_x][people_y - 1] == 0 && face[people_x][people_y] == 5) {}

//左為目的地

if (face[people_x][people_y - 1] == 4)

//左為箱子

if (face[people_x][people_y - 1] == 3)

//目的地

else if (face[people_x][people_y - 2] == 4)

//空地

else if (face[people_x][people_y - 2] == 1)

}system("cls");

display();

return 0;

}/*右移*/

int sokoban::moveright()

//空地

if (face[people_x][people_y + 1] == 1 && face[people_x][people_y] != 5)

//人和目的地重合

if (face[people_x][people_y] == 5 && face[people_x][people_y+1] != 0)

if (face[people_x][people_y + 1] && face[people_x][people_y] == 5) {}

//右為目的地

if (face[people_x][people_y + 1] == 4)

//右為箱子

if (face[people_x][people_y + 1] == 3)

//目的地

else if (face[people_x][people_y + 2] == 4)

//空地

else if (face[people_x][people_y + 2] == 1)

}system("cls");

display();

return 0;

}/*判斷遊戲是否結束*/

bool sokoban::gameover()

/*玩遊戲*/

int sokoban::playgame()

} }system("cls");

cout << "恭喜這個b." << endl;

return 0;

}int main()

推箱子(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 控制台遊戲 推箱子 實現人不能撞牆

思路 1 再定義兩個變數,用於存放玩家的座標的備份 值 2 在地圖模組中,把玩家的座標賦給玩家的備份,對當前座標進行備份。3 因為在地圖模組中,按下enter鍵移動後,玩家的座標會根據方向隨之改變。所以先檢測玩家是否撞牆 當玩家的值等於牆的值 把現在玩家的值賦值給之前備份的座標,實現玩家座標不在根據...

推箱子遊戲C 實現原理

通過wsad控制箱子上下左右移動,q退出程式。分別表示牆,空白,方塊,目標地,人,可以根據自己喜歡重新設定 地圖為7行10例,可以根據自己喜歡調整地圖形式 char map 7 11 其他的 裡面有相應的注釋。include stdafx.h include include includeusing...