那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

通過C語言設計的推箱子(控制臺終端)

DS小龍哥-嵌入式技術 ? 來源:DS小龍哥-嵌入式技術 ? 作者:DS小龍哥-嵌入式技 ? 2023-06-30 14:54 ? 次閱讀

一、項目介紹

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

image-20230618212712519

實現步驟如下:

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

二、代碼實現

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() {
     //設置游戲界面的邊框和各個元素的位置
     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;
 }
 ?


審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 游戲
    +關注

    關注

    2

    文章

    750

    瀏覽量

    26364
  • C語言
    +關注

    關注

    180

    文章

    7614

    瀏覽量

    137713
  • 函數
    +關注

    關注

    3

    文章

    4346

    瀏覽量

    62971
  • 代碼
    +關注

    關注

    30

    文章

    4825

    瀏覽量

    69048
收藏 人收藏

    評論

    相關推薦

    單片機箱子游戲程序模擬仿真

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

    基于單片機箱子的游戲設計與制作

    請問基于單片機箱子的游戲設計與制作。
    發表于 12-14 19:34

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

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

    終端、虛擬終端、shell、控制臺、tty的區別

    ) ,然后登陸計算機,并對該計算機進行操作。當然,那時候的計算機操作系統都是多任務多用戶的操作系統。這樣一只有顯示器和鍵盤能夠通過串口連接到計算機 的設備就叫做終端。  而控制臺又是
    發表于 03-05 13:56

    Linux終端控制臺的相關資料分享

    關于Linux終端控制臺的基本概念如下:/dev/console即控制臺,是與操作系統交互的設備,系統將一些信息直接輸出到控制臺上。/dev/console根據不同系統的設定可以鏈接
    發表于 11-05 08:56

    基于C語言設計編寫的ARM箱子

    ARM箱子的原型是基于C語言設計編寫的箱子小游戲,通過
    發表于 12-14 08:09

    如何設置LCD作為終端控制臺

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

    箱子小游戲設計

    箱子小游戲設計
    發表于 06-09 09:49 ?100次下載

    dmx512控制臺是什么_dmx512控制臺按鍵說明

    和由控制臺樹中的項引發的管理屬性、服務及事件的視圖。控制臺通過控制信號來控制燈光的,因此,控制
    發表于 11-07 11:20 ?2.7w次閱讀

    SU RUBy控制臺如何使用?SU RUBy控制臺的一個應用實例說明

    本文檔的主要內容詳細介紹的是SU RUBy控制臺如何使用?SU RUBy控制臺的一個應用實例說明。
    發表于 09-27 16:04 ?0次下載

    使用C語言在Linux環境下運行箱子游戲的代碼免費下載

    本文檔的主要內容詳細介紹的是使用C語言在Linux環境下運行箱子游戲的代碼免費下載,現在分享給大家游戲游戲,現在有80多關。如果需要添加其他關卡,很容易擴展,僅供娛樂學習!。
    發表于 05-19 08:00 ?5次下載
    使用<b class='flag-5'>C</b><b class='flag-5'>語言</b>在Linux環境下運行<b class='flag-5'>推</b><b class='flag-5'>箱子</b>游戲的代碼免費下載

    如何用C語言實現箱子游戲項目

    ? 這篇文章主要為大家詳細介紹了 C語言實現——《箱子項目》 ,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下! 本項目結合了分支,循環,數組的結合,并
    的頭像 發表于 11-09 16:28 ?2641次閱讀

    通過C語言設計的貪吃蛇游戲(控制臺終端)

    當前通過控制臺終端實現一個貪吃蛇小游戲,實現游戲的繪制、更新、控制等功能。
    的頭像 發表于 06-30 09:53 ?1106次閱讀
    <b class='flag-5'>通過</b><b class='flag-5'>C</b><b class='flag-5'>語言</b>設計的貪吃蛇游戲(<b class='flag-5'>控制臺</b><b class='flag-5'>終端</b>)

    語言RPA如何建立控制臺應用

    語言通過軟件自帶的豐富的顆粒組件庫,開發出滿足各種需求的應用。火語言中的應用分為兩種常見類型,界面應用以及控制臺應用。 下面詳細介紹下控制臺
    的頭像 發表于 08-15 09:24 ?473次閱讀
    火<b class='flag-5'>語言</b>RPA如何建立<b class='flag-5'>控制臺</b>應用

    控制臺窗口主機是什么

    控制臺窗口主機(conhost),通常指的是在Windows操作系統中用于承載和控制控制臺窗口(即命令行界面或CMD窗口)的進程。以下是對控制臺窗口主機的介紹: 一、定義與功能 定義
    的頭像 發表于 10-08 18:12 ?2698次閱讀
    怎样玩百家乐看路| 尊龙百家乐娱乐场| 试玩百家乐官网的玩法技巧和规则 | 百家乐官网路珠价格| 在线百家乐官网赌场| 德州扑克高牌| 神州百家乐的玩法技巧和规则| 百家乐官网套利| 缅甸百家乐官网娱乐| 柘城县| 德州扑克 术语| 百家乐园首选去澳| 搓牌百家乐技巧| 百家乐长龙有几个| 大发百家乐官网的玩法技巧和规则| 七胜百家乐官网娱乐场| 百家乐官网怎么玩能赢钱| 扶绥县| 足球盘口| 娱乐城开户免存送现金| 大发888游戏平台 34| 姚记百家乐的玩法技巧和规则| 百家乐霸王闲| 真钱百家乐注册送| 做生意适合放什么花招财| 巴比伦百家乐官网的玩法技巧和规则| 百家乐官网分路单| 百家乐赢钱公式| 境外赌博下| 沙龙国际网上| 博彩机| 大发888真钱娱乐游戏博彩| 上海二八杠分析仪| 百家乐游戏| 百家乐什么方法容易赢| 网上百家乐分析软件| 百家乐视频计牌器| 立博百家乐游戏| 百家乐乐城皇冠| 迪威百家乐现场| 百家乐桩闲落注点|