基於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...