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

    文章

    736

    浏览量

    26283
  • C语言
    +关注

    关注

    180

    文章

    7598

    浏览量

    136186
  • 函数
    +关注

    关注

    3

    文章

    4305

    浏览量

    62430
  • 代码
    +关注

    关注

    30

    文章

    4747

    浏览量

    68349
收藏 人收藏

    评论

    相关推荐

    单片机箱子游戏程序模拟仿真

    ://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 98次下载

    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 2555次阅读

    通过C语言设计的贪吃蛇游戏(控制台终端)

    当前通过控制台终端实现一个贪吃蛇小游戏,实现游戏的绘制、更新、控制等功能。
    的头像 发表于 06-30 09:53 930次阅读
    <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 350次阅读
    火<b class='flag-5'>语言</b>RPA如何建立<b class='flag-5'>控制台</b>应用

    控制台窗口主机是什么

    控制台窗口主机(conhost),通常指的是在Windows操作系统中用于承载和控制控制台窗口(即命令行界面或CMD窗口)的进程。以下是对控制台窗口主机的介绍: 一、定义与功能 定义
    的头像 发表于 10-08 18:12 1342次阅读