通过C语言设计的推箱子(控制台终端)-当前时讯
推箱子游戏是一款经典的益智小游戏,玩家需要控制主角角色将几个木箱按
2023-06-30 15:09:56
(资料图)
推箱子游戏是一款经典的益智小游戏,玩家需要控制主角角色将几个木箱按照要求推到指定位置。在控制台终端中,可以使用字符来表示不同的游戏元素,例如 "#" 表示墙壁, " " 表示空地, "$" 表示木箱, "@" 表示主角角色, "+" 表示完成任务的目标位置。
实现步骤如下:
定义常量和全局变量:需要定义一些常量和全局变量,用于存储游戏中的数据信息,游戏界面的宽度和高度、不同状态下的符号表示、木箱和目标位置等参数。同时还需要定义一个二维字符数组board,用于表示整个游戏界面。初始化游戏界面:在InitGame()函数中进行游戏初始化,设置游戏界面的边框和各个元素的位置。其中,可以使用循环遍历二维字符数组来设置元素的位置,将 "#" 设置为墙壁, " " 设置为空地,"$" 设置为木箱等。绘制游戏画面:DrawGame()函数用于绘制游戏画面,并将board数组中的字符逐行输出。可以使用循环遍历二维字符数组来进行输出。更新游戏状态:UpdateGame()函数用于更新游戏状态,包括判断主角角色是否可以移动,以及是否完成任务等操作。可以使用if语句和switch语句来判断不同情况下的操作,判断主角角色是否碰到墙壁或木箱,是否完成任务等。控制主角角色移动:Control()函数用于控制主角角色的移动,读取键盘输入并更新主角角色的位置。可以使用getch()函数获取键盘输入,并根据用户输入进行判断,按下方向键上时主角角色向上移动。判断游戏是否结束:CheckGameOver()函数用于检查游戏是否结束,包括是否成功完成任务或者失败结束游戏。如果判断出游戏结束,则直接退出程序。游戏暂停:Pause()函数用于控制游戏的暂停时间,可以通过调用Sleep()函数来实现。游戏结束:GameOver()函数用于输出最终的游戏得分和游戏结束信息,并直接退出程序。二、代码实现#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() { //设置游戏界面的边框和各个元素的位置 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; } } } //设置木箱和目标位置 board[2][2] = BOX; board[4][5] = BOX; board[6][8] = BOX; board[2][8] = TARGET; board[4][2] = TARGET; board[6][5] = TARGET; //设置主角角色位置 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); } //更新游戏状态 void UpdateGame(int dx, int dy) { int nextX = playerX + dx; int nextY = playerY + dy; //判断主角角色是否可以移动 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)) { //判断主角角色是否可以推动木箱 board[playerX][playerY] = EMPTY; playerX = nextX; playerY = nextY; board[playerX][playerY] = PLAYER; board[nextX + dx][nextY + dy] = BOX; board[nextX][nextY] = EMPTY; } //判断是否完成任务 if (board[2][8] == BOX && board[4][2] == BOX && board[6][5] == BOX) { score += 100; printf("Congratulations! You win!\\n"); Sleep(2000); exit(0); } } //控制主角角色移动 void Control() { char c = getch(); switch (c) { case "w": UpdateGame(-1, 0); break; case "s": UpdateGame(1, 0); break; case "a": UpdateGame(0, -1); break; case "d": UpdateGame(0, 1); break; default: break; } } //判断游戏是否结束 void CheckGameOver() { if (board[playerX - 1][playerY] == WALL || board[playerX + 1][playerY] == WALL || board[playerX][playerY - 1] == WALL || board[playerX][playerY + 1] == WALL) { printf("Game over! You lose!\\n"); Sleep(2000); exit(0); } } //游戏暂停 void Pause() { Sleep(100); } //游戏结束 void GameOver() { printf("Your final score is: %d\\n", score); exit(0); } int main() { //初始化游戏界面 InitGame(); //游戏循环 while (1) { DrawGame(); Control(); CheckGameOver(); Pause(); } return 0; }
审核编辑:汤梓红
标签: