一、項(xiàng)目介紹
推箱子游戲是一款經(jīng)典的益智小游戲,玩家需要控制主角角色將幾個(gè)木箱按照要求推到指定位置。在控制臺(tái)終端中,可以使用字符來(lái)表示不同的游戲元素,例如 '#' 表示墻壁, ' ' 表示空地, '$' 表示木箱, '@' 表示主角角色, '+' 表示完成任務(wù)的目標(biāo)位置。
實(shí)現(xiàn)步驟如下:
- 定義常量和全局變量:需要定義一些常量和全局變量,用于存儲(chǔ)游戲中的數(shù)據(jù)信息,游戲界面的寬度和高度、不同狀態(tài)下的符號(hào)表示、木箱和目標(biāo)位置等參數(shù)。同時(shí)還需要定義一個(gè)二維字符數(shù)組board,用于表示整個(gè)游戲界面。
- 初始化游戲界面:在InitGame()函數(shù)中進(jìn)行游戲初始化,設(shè)置游戲界面的邊框和各個(gè)元素的位置。其中,可以使用循環(huán)遍歷二維字符數(shù)組來(lái)設(shè)置元素的位置,將 '#' 設(shè)置為墻壁, ' ' 設(shè)置為空地,'$' 設(shè)置為木箱等。
- 繪制游戲畫面:DrawGame()函數(shù)用于繪制游戲畫面,并將board數(shù)組中的字符逐行輸出。可以使用循環(huán)遍歷二維字符數(shù)組來(lái)進(jìn)行輸出。
- 更新游戲狀態(tài):UpdateGame()函數(shù)用于更新游戲狀態(tài),包括判斷主角角色是否可以移動(dòng),以及是否完成任務(wù)等操作??梢允褂胕f語(yǔ)句和switch語(yǔ)句來(lái)判斷不同情況下的操作,判斷主角角色是否碰到墻壁或木箱,是否完成任務(wù)等。
- 控制主角角色移動(dòng):Control()函數(shù)用于控制主角角色的移動(dòng),讀取鍵盤輸入并更新主角角色的位置??梢允褂胓etch()函數(shù)獲取鍵盤輸入,并根據(jù)用戶輸入進(jìn)行判斷,按下方向鍵上時(shí)主角角色向上移動(dòng)。
- 判斷游戲是否結(jié)束:CheckGameOver()函數(shù)用于檢查游戲是否結(jié)束,包括是否成功完成任務(wù)或者失敗結(jié)束游戲。如果判斷出游戲結(jié)束,則直接退出程序。
- 游戲暫停:Pause()函數(shù)用于控制游戲的暫停時(shí)間,可以通過(guò)調(diào)用Sleep()函數(shù)來(lái)實(shí)現(xiàn)。
- 游戲結(jié)束:GameOver()函數(shù)用于輸出最終的游戲得分和游戲結(jié)束信息,并直接退出程序。
二、代碼實(shí)現(xiàn)
#include < stdio.h >
#include < conio.h >
#include < windows.h >
?
//定義常量和全局變量
const int WIDTH = 11;
const int HEIGHT = 10;
const char WALL = '#';
const char EMPTY = ' ';
const char BOX = '$';
const char TARGET = '+';
const char PLAYER = '@';
?
int playerX, playerY, score;
char board[HEIGHT][WIDTH];
?
//初始化游戲界面
void InitGame() {
//設(shè)置游戲界面的邊框和各個(gè)元素的位置
for (int i = 0; i < HEIGHT; i++) {
for (int j = 0; j < WIDTH; j++) {
if (i == 0 || i == HEIGHT - 1 || j == 0 || j == WIDTH - 1) {
board[i][j] = WALL;
}
else {
board[i][j] = EMPTY;
}
}
}
?
//設(shè)置木箱和目標(biāo)位置
board[2][2] = BOX;
board[4][5] = BOX;
board[6][8] = BOX;
board[2][8] = TARGET;
board[4][2] = TARGET;
board[6][5] = TARGET;
?
//設(shè)置主角角色位置
playerX = 7;
playerY = 5;
board[playerX][playerY] = PLAYER;
}
?
//繪制游戲畫面
void DrawGame() {
system("cls");
for (int i = 0; i < HEIGHT; i++) {
for (int j = 0; j < WIDTH; j++) {
printf("%c", board[i][j]);
}
printf("\\n");
}
printf("Score: %d\\n", score);
}
?
//更新游戲狀態(tài)
void UpdateGame(int dx, int dy) {
int nextX = playerX + dx;
int nextY = playerY + dy;
?
//判斷主角角色是否可以移動(dòng)
if (board[nextX][nextY] == EMPTY || board[nextX][nextY] == TARGET) {
board[playerX][playerY] = EMPTY;
playerX = nextX;
playerY = nextY;
board[playerX][playerY] = PLAYER;
}
else if (board[nextX][nextY] == BOX && (board[nextX + dx][nextY + dy] == EMPTY || board[nextX + dx][nextY + dy] == TARGET)) {
//判斷主角角色是否可以推動(dòng)木箱
board[playerX][playerY] = EMPTY;
playerX = nextX;
playerY = nextY;
board[playerX][playerY] = PLAYER;
board[nextX + dx][nextY + dy] = BOX;
board[nextX][nextY] = EMPTY;
}
?
//判斷是否完成任務(wù)
if (board[2][8] == BOX && board[4][2] == BOX && board[6][5] == BOX) {
score += 100;
printf("Congratulations! You win!\\n");
Sleep(2000);
exit(0);
}
}
?
//控制主角角色移動(dòng)
void Control() {
char c = getch();
switch