21xrx.com
2025-07-07 18:33:24 Monday
文章检索 我的文章 写文章
C++编程:小游戏猫里奥源代码
2023-07-04 18:00:48 深夜i     --     --
C++ 编程 小游戏 猫里奥 源代码

小游戏猫里奥是一款基于C++语言编写的游戏,它的源代码可以帮助C++初学者更好地理解和掌握C++编程的技巧。以下是猫里奥游戏的源代码及注释。

1.头文件

#include <iostream> // 输入输出头文件
#include <conio.h> // 用于控制台窗口函数的头文件
#include <stdlib.h> // 用于标准库函数的头文件
using namespace std;

注释:头文件中包含了所需的输入输出、控制台窗口以及标准库函数。使用了命名空间std,简化了程序代码。

2.游戏画面

int main()
{
  system("color 30"); // 控制台窗口颜色
  char wall = '|'; //墙壁符号
  char floor = '_';
  char mario = 'M'; // 玩家角色
  char coin = '$'; // 金币
  char hole = ' '; // 地图空位
  char map[10][50] = { //地图数组
     hole,
     hole,
     floor,
     wall,
     floor,
     hole,
     floor,
     wall,
     hole,
     wall
  };
  // 游戏画面输出
  for (int i = 0; i < 10; i++) {
    for (int j = 0; j < 50; j++) {
      cout << map[i][j];
    }
    cout << endl;
  }
  _getch(); // 阻塞屏幕
  return 0;
}

注释:以上内容为主函数,用于构建游戏画面与地图。主要变量包括墙壁符号、地图空位、玩家角色和金币。地图使用字符二维数组表示。通过双重for循环结构,输出地图内的元素。使用_getch()让控制台窗口保持阻塞状态,不至于闪退。

3.光标移动函数

void gotoxy(int x, int y)
{
  HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
  COORD position = { SHORT(x), SHORT(y) };
  SetConsoleCursorPosition(hStdout, position);
}

注释:用于设定控制台窗口的光标位置,以方便后续操作的实现。

4.判断是否碰墙函数

bool isHitWall(int x, int y, char wall)
{
  if (map[x][y] == wall)
    return true;
  
  else
    return false;
  
}

注释:如果玩家角色的下一个移动位置是墙壁,则调用此函数返回true。

5.金币函数

void getCoin(int& coinCount, int x, int y, char coin)
{
  if (map[x][y] == coin) {
    map[x][y] = ' ';
    coinCount++;
  }
}

注释:用于收集金币。如果玩家角色的下一个移动位置是金币,则调用此函数并将金币的数量加一。

6.游戏主循环

int main()
{
  //地图与元素定义
  char wall = '|';
  char floor = '_';
  char mario = 'M';
  char coin = '$';
  char hole = ' ';
  // defines
  bool isGameOver = false; //游戏是否结束
  int x = 5, y = 8; //初始位置
  int coinCount = 0; //已获得的金币数
  char ch = ' '; //接收玩家输入
  // game loop
  while (isGameOver == false) {
    system("cls"); //清屏
    //显示地图
    for (int i = 0; i < 10; i++) {
      for (int j = 0; j < 50; j++) {
        cout << map[i][j];
      }
      cout << endl;
    }
    //显示分数
    cout << "\n\n Score: " << coinCount << endl;
    //判断是否碰墙
    if (isHitWall(x, y, wall) == true)
      cout << "You hit a wall! Game over!" << endl;
      break;
    
    //接收玩家输入
    if (_kbhit()) {
      ch = _getch();
      switch (ch) {
      case 'a':
        if (y > 0 && isHitWall(x, y - 1, wall) == false) {
          //判断是否收集金币
          getCoin(coinCount, x, y - 1, coin);
          //向左移动一格
          y--;
        }
        break;
      case 'd':
        if (y < 49 && isHitWall(x, y + 1, wall) == false) {
          //判断是否收集金币
          getCoin(coinCount, x, y + 1, coin);
          //向右移动一格
          y++;
        }
        break;
      case 'w':
        if (x > 0 && isHitWall(x - 1, y, wall) == false) {
          //判断是否收集金币
          getCoin(coinCount, x - 1, y, coin);
          //向上移动一格
          x--;
        }
        break;
      case 's':
        if (x < 9 && isHitWall(x + 1, y, wall) == false) {
          //判断是否收集金币
          getCoin(coinCount, x + 1, y, coin);
          //向下移动一格
          x++;
        }
        break;
      case 'x':
        //退出游戏
        isGameOver = true;
        break;
      }
    }
    // 绘制玩家角色
    gotoxy(y, x);
    cout << mario;
    // 休眠一段时间
    Sleep(100);
  }
  // 结束游戏
  cout << endl << endl;
  cout << "Game over! Your Score is: " << coinCount << endl;
  _getch();
  return 0;
}

注释:以上所列是游戏的主循环,其目的是让游戏能够正常运行。循环内部分为几个关键步骤:清屏、显示地图和分数、判断是否碰墙、接受玩家输入、移动玩家角色、休眠一小段时间。如果调用isHitWall返回true,则游戏结束。在主循环的尾部,输出玩家角色的分数和游戏结束的消息。最后使用_getch()让控制台窗口保持阻塞状态,以避免闪退。

好了,以上就是小游戏猫里奥源代码的全部内容,你掌握了吗?祝你好运!

  
  

评论区