0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

通過(guò)C語(yǔ)言設(shè)計(jì)的推箱子(控制臺(tái)終端)

DS小龍哥-嵌入式技術(shù) ? 來(lái)源:DS小龍哥-嵌入式技術(shù) ? 作者:DS小龍哥-嵌入式技 ? 2023-06-30 14:54 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、項(xiàng)目介紹

推箱子游戲是一款經(jīng)典的益智小游戲,玩家需要控制主角角色將幾個(gè)木箱按照要求推到指定位置。在控制臺(tái)終端中,可以使用字符來(lái)表示不同的游戲元素,例如 '#' 表示墻壁, ' ' 表示空地, '$' 表示木箱, '@' 表示主角角色, '+' 表示完成任務(wù)的目標(biāo)位置。

image-20230618212712519

實(shí)現(xiàn)步驟如下:

  1. 定義常量和全局變量:需要定義一些常量和全局變量,用于存儲(chǔ)游戲中的數(shù)據(jù)信息,游戲界面的寬度和高度、不同狀態(tài)下的符號(hào)表示、木箱和目標(biāo)位置等參數(shù)。同時(shí)還需要定義一個(gè)二維字符數(shù)組board,用于表示整個(gè)游戲界面。
  2. 初始化游戲界面:在InitGame()函數(shù)中進(jìn)行游戲初始化,設(shè)置游戲界面的邊框和各個(gè)元素的位置。其中,可以使用循環(huán)遍歷二維字符數(shù)組來(lái)設(shè)置元素的位置,將 '#' 設(shè)置為墻壁, ' ' 設(shè)置為空地,'$' 設(shè)置為木箱等。
  3. 繪制游戲畫面:DrawGame()函數(shù)用于繪制游戲畫面,并將board數(shù)組中的字符逐行輸出。可以使用循環(huán)遍歷二維字符數(shù)組來(lái)進(jìn)行輸出。
  4. 更新游戲狀態(tài):UpdateGame()函數(shù)用于更新游戲狀態(tài),包括判斷主角角色是否可以移動(dòng),以及是否完成任務(wù)等操作??梢允褂胕f語(yǔ)句和switch語(yǔ)句來(lái)判斷不同情況下的操作,判斷主角角色是否碰到墻壁或木箱,是否完成任務(wù)等。
  5. 控制主角角色移動(dòng):Control()函數(shù)用于控制主角角色的移動(dòng),讀取鍵盤輸入并更新主角角色的位置??梢允褂胓etch()函數(shù)獲取鍵盤輸入,并根據(jù)用戶輸入進(jìn)行判斷,按下方向鍵上時(shí)主角角色向上移動(dòng)。
  6. 判斷游戲是否結(jié)束:CheckGameOver()函數(shù)用于檢查游戲是否結(jié)束,包括是否成功完成任務(wù)或者失敗結(jié)束游戲。如果判斷出游戲結(jié)束,則直接退出程序。
  7. 游戲暫停:Pause()函數(shù)用于控制游戲的暫停時(shí)間,可以通過(guò)調(diào)用Sleep()函數(shù)來(lái)實(shí)現(xiàn)。
  8. 游戲結(jié)束:GameOver()函數(shù)用于輸出最終的游戲得分和游戲結(jié)束信息,并直接退出程序。

二、代碼實(shí)現(xiàn)

image-20230618212645898

#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 (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;
     }
 }
 ?
 //判斷游戲是否結(jié)束
 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);
 }
 ?
 //游戲結(jié)束
 void GameOver() {
     printf("Your final score is: %d\\n", score);
     exit(0);
 }
 ?
 int main() {
     //初始化游戲界面
     InitGame();
 ?
     //游戲循環(huán)
     while (1) {
         DrawGame();
         Control();
         CheckGameOver();
         Pause();
     }
 ?
     return 0;
 }
 ?


審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 游戲
    +關(guān)注

    關(guān)注

    2

    文章

    772

    瀏覽量

    26764
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7630

    瀏覽量

    140986
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4377

    瀏覽量

    64546
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4893

    瀏覽量

    70445
收藏 0人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    單片機(jī)箱子游戲程序模擬仿真

    ://proteus.814e.com/程序及仿真下載: 箱子.rar   http://proteus.814e.com/ 聯(lián)系我們:at89c58@163.com   mcu_chi
    發(fā)表于 11-06 20:41

    linux下tty,控制臺(tái),虛擬終端,串口,console(控制臺(tái)終端)詳解

    首先:1。終端控制臺(tái)都不是個(gè)人電腦的概念,而是多人共用的小型中型大型計(jì)算機(jī)上的概念.一臺(tái)主機(jī),連很多終端,終端為主機(jī)提供了人機(jī)接口,每個(gè)人
    發(fā)表于 03-01 14:25

    終端、虛擬終端、shell、控制臺(tái)、tty的區(qū)別

    ) ,然后登陸計(jì)算機(jī),并對(duì)該計(jì)算機(jī)進(jìn)行操作。當(dāng)然,那時(shí)候的計(jì)算機(jī)操作系統(tǒng)都是多任務(wù)多用戶的操作系統(tǒng)。這樣一臺(tái)只有顯示器和鍵盤能夠通過(guò)串口連接到計(jì)算機(jī) 的設(shè)備就叫做終端。  而控制臺(tái)又是
    發(fā)表于 03-05 13:56

    Linux終端控制臺(tái)的相關(guān)資料分享

    關(guān)于Linux終端控制臺(tái)的基本概念如下:/dev/console即控制臺(tái),是與操作系統(tǒng)交互的設(shè)備,系統(tǒng)將一些信息直接輸出到控制臺(tái)上。/dev/console根據(jù)不同系統(tǒng)的設(shè)定可以鏈接
    發(fā)表于 11-05 08:56

    基于C語(yǔ)言設(shè)計(jì)編寫的ARM箱子

    ARM箱子的原型是基于C語(yǔ)言設(shè)計(jì)編寫的箱子小游戲,通過(guò)
    發(fā)表于 12-14 08:09

    如何設(shè)置LCD作為終端控制臺(tái)

    屏幕背光節(jié)點(diǎn)信息設(shè)置 LCD 作為終端控制臺(tái)LCD簡(jiǎn)介一些性能參數(shù)分辨率由一個(gè)一個(gè)的像素點(diǎn)組成,常有720P,1080P( 1920 * 1080 ),2K( 2560 * 1440 ),4K( 3840 * 2160 )。以下就是1080P,X=1920,Y=1080
    發(fā)表于 12-16 08:26

    箱子小游戲設(shè)計(jì)

    箱子小游戲設(shè)計(jì)
    發(fā)表于 06-09 09:49 ?101次下載

    dmx512控制臺(tái)是什么_dmx512控制臺(tái)按鍵說(shuō)明

    和由控制臺(tái)樹中的項(xiàng)引發(fā)的管理屬性、服務(wù)及事件的視圖。控制臺(tái)通過(guò)控制信號(hào)來(lái)控制燈光的,因此,控制
    發(fā)表于 11-07 11:20 ?2.8w次閱讀

    SU RUBy控制臺(tái)如何使用?SU RUBy控制臺(tái)的一個(gè)應(yīng)用實(shí)例說(shuō)明

    本文檔的主要內(nèi)容詳細(xì)介紹的是SU RUBy控制臺(tái)如何使用?SU RUBy控制臺(tái)的一個(gè)應(yīng)用實(shí)例說(shuō)明。
    發(fā)表于 09-27 16:04 ?0次下載

    使用C語(yǔ)言在Linux環(huán)境下運(yùn)行箱子游戲的代碼免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用C語(yǔ)言在Linux環(huán)境下運(yùn)行箱子游戲的代碼免費(fèi)下載,現(xiàn)在分享給大家游戲游戲,現(xiàn)在有80多關(guān)。如果需要添加其他關(guān)卡,很容易擴(kuò)展,僅供娛樂(lè)學(xué)習(xí)!。
    發(fā)表于 05-19 08:00 ?5次下載
    使用<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>在Linux環(huán)境下運(yùn)行<b class='flag-5'>推</b><b class='flag-5'>箱子</b>游戲的代碼免費(fèi)下載

    如何用C語(yǔ)言實(shí)現(xiàn)箱子游戲項(xiàng)目

    ? 這篇文章主要為大家詳細(xì)介紹了 C語(yǔ)言實(shí)現(xiàn)——《箱子項(xiàng)目》 ,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下! 本項(xiàng)目結(jié)合了分支,循環(huán),數(shù)組的結(jié)合,并
    的頭像 發(fā)表于 11-09 16:28 ?2810次閱讀

    通過(guò)C語(yǔ)言設(shè)計(jì)的貪吃蛇游戲(控制臺(tái)終端)

    當(dāng)前通過(guò)控制臺(tái)終端實(shí)現(xiàn)一個(gè)貪吃蛇小游戲,實(shí)現(xiàn)游戲的繪制、更新、控制等功能。
    的頭像 發(fā)表于 06-30 09:53 ?1432次閱讀
    <b class='flag-5'>通過(guò)</b><b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>設(shè)計(jì)的貪吃蛇游戲(<b class='flag-5'>控制臺(tái)</b><b class='flag-5'>終端</b>)

    js如何在控制臺(tái)輸入輸出

    JavaScript是一種廣泛應(yīng)用于網(wǎng)頁(yè)開發(fā)的腳本語(yǔ)言,能夠使網(wǎng)頁(yè)實(shí)現(xiàn)豐富的交互效果。其中一種常用的特性就是在控制臺(tái)進(jìn)行輸入和輸出操作。本文將詳盡、詳實(shí)、細(xì)致地介紹如何在JavaScript中使
    的頭像 發(fā)表于 11-26 11:17 ?3603次閱讀

    語(yǔ)言RPA如何建立控制臺(tái)應(yīng)用

    語(yǔ)言通過(guò)軟件自帶的豐富的顆粒組件庫(kù),開發(fā)出滿足各種需求的應(yīng)用?;?b class='flag-5'>語(yǔ)言中的應(yīng)用分為兩種常見類型,界面應(yīng)用以及控制臺(tái)應(yīng)用。 下面詳細(xì)介紹下控制臺(tái)
    的頭像 發(fā)表于 08-15 09:24 ?690次閱讀
    火<b class='flag-5'>語(yǔ)言</b>RPA如何建立<b class='flag-5'>控制臺(tái)</b>應(yīng)用

    控制臺(tái)窗口主機(jī)是什么

    控制臺(tái)窗口主機(jī)(conhost),通常指的是在Windows操作系統(tǒng)中用于承載和控制控制臺(tái)窗口(即命令行界面或CMD窗口)的進(jìn)程。以下是對(duì)控制臺(tái)窗口主機(jī)的介紹: 一、定義與功能 定義
    的頭像 發(fā)表于 10-08 18:12 ?5447次閱讀

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品