主页 > 互联网 > 内容页

通过C语言设计的推箱子(控制台终端)-当前时讯

2023-06-30 15:09:56 来源:DS小龙哥-嵌入式技术


(资料图)

一、项目介绍

推箱子游戏是一款经典的益智小游戏,玩家需要控制主角角色将几个木箱按照要求推到指定位置。在控制台终端中,可以使用字符来表示不同的游戏元素,例如 "#" 表示墙壁, " " 表示空地, "$" 表示木箱, "@" 表示主角角色, "+" 表示完成任务的目标位置。

实现步骤如下:

定义常量和全局变量:需要定义一些常量和全局变量,用于存储游戏中的数据信息,游戏界面的宽度和高度、不同状态下的符号表示、木箱和目标位置等参数。同时还需要定义一个二维字符数组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; } ​

审核编辑:汤梓红

标签:

上一篇:浅析电动汽车BMS的功能实现
下一篇:最后一页