21xrx.com
2025-04-02 12:05:28 Wednesday
文章检索 我的文章 写文章
【教程】c++编写简单小游戏代码——打怪游戏
2023-07-11 22:10:29 深夜i     --     --
c++ 编程 小游戏 代码 打怪游戏

C++编写简单小游戏代码——打怪游戏

打怪游戏是一种非常受欢迎的休闲类游戏,它可以让玩家在游戏中放松身心,享受游戏带来的轻松和愉悦感。如果你也想学习如何编写这个游戏的代码,请看下面的教程。

一、准备工作

在开始编写代码之前,你需要准备一些开发工具。首先,你需要安装Visual Studio或其他C++编译器。其次,你还需要一个图形库,比如OpenGL或SDL。

二、游戏的主要功能

打怪游戏的核心功能包括了怪物的生成、移动和攻击,玩家的移动和攻击,以及游戏的分数计算和游戏结束的判断等。下面,我们逐一实现这些功能。

1. 怪物的生成、移动和攻击

首先,我们需要定义怪物的属性,包括它的生命值、攻击力和移动速度等。然后,在游戏开始时,我们可以随机生成一些怪物并将它们放入游戏场景中。

怪物的移动可以采用简单的随机移动算法。每次移动时,我们可以生成一个随机数,然后根据这个随机数决定怪物的移动方向和距离。

怪物的攻击可以根据一定的规则来进行,比如在玩家进入怪物攻击范围时,怪物会发起攻击,并对玩家造成伤害。

2. 玩家的移动和攻击

玩家的移动可以通过监听玩家的键盘输入来实现。比如,我们可以将W、A、S、D键分别映射为玩家向上、向左、向下、向右的移动。

玩家的攻击可以通过键盘输入来触发。比如,如果玩家按下“空格”键,那么玩家就会对攻击范围内的所有怪物进行攻击。

3. 游戏的分数计算和游戏结束的判断

游戏的分数可以根据玩家击败怪物的数量来计算。每当玩家击败一个怪物时,我们就可以增加玩家的分数。当玩家的分数达到一定分值时,我们可以升级玩家的属性,比如攻击力和生命值等。

游戏结束的判断可以采用玩家死亡或怪物数量过多等条件。当玩家的生命值降为0时,游戏就会结束。

三、代码实现

下面是一个简单的打怪游戏代码实现:

// 打怪游戏代码
#include <iostream>
#include <vector>
#include <ctime>
using namespace std;
// 定义怪物类
class Monster
public:
  int hp;   // 生命值
  int atk;  // 攻击力
  int spd;  // 移动速度
  int x;   // x坐标
  int y;   // y坐标
;
// 定义玩家类
class Player
public:
  int hp;   // 生命值
  int atk;  // 攻击力
  int spd;  // 移动速度
  int x;   // x坐标
  int y;   // y坐标
  int score; // 分数
;
// 随机生成一些怪物
void generateMonsters(vector<Monster>& monsters)
{
  srand(time(0));
  int num = rand() % 10 + 5// 怪物数量在5~14之间
  for(int i = 0; i < num; ++i)
  {
    Monster monster;
    monster.hp = rand() % 50 + 50;   // 怪物生命值在50~99之间
    monster.atk = rand() % 10 + 10;  // 怪物攻击力在10~19之间
    monster.spd = rand() % 5 + 1;   // 怪物移动速度在1~5之间
    monster.x = rand() % 100;     // 怪物坐标在场景内随机生成
    monster.y = rand() % 100;
    monsters.push_back(monster);
  }
}
// 怪物的移动
void moveMonsters(vector<Monster>& monsters, int playerX, int playerY)
{
  for(int i = 0; i < monsters.size(); ++i)
  {
    Monster& monster = monsters[i];
    int distX = playerX - monster.x;
    int distY = playerY - monster.y;
    int dist = abs(distX) + abs(distY);
    if(dist <= 10)
      cout << "怪物对玩家造成" << monster.atk << "点伤害!" << endl;
    else
    {
      int dirX = distX > 0 ? 1 : -1// 判断怪物移动方向
      int dirY = distY > 0 ? 1 : -1;
      monster.x += dirX * monster.spd;
      monster.y += dirY * monster.spd;
      if(monster.x < 0) monster.x = 0; // 确保怪物在场景范围内
      if(monster.x > 100) monster.x = 100;
      if(monster.y < 0) monster.y = 0;
      if(monster.y > 100) monster.y = 100;
    }
  }
}
// 玩家的移动
void movePlayer(Player& player, char cmd)
{
  switch(cmd)
  {
    case 'W': player.y -= player.spd; break;
    case 'A': player.x -= player.spd; break;
    case 'S': player.y += player.spd; break;
    case 'D': player.x += player.spd; break;
  }
  if(player.x < 0) player.x = 0;   // 确保玩家在场景范围内
  if(player.x > 100) player.x = 100;
  if(player.y < 0) player.y = 0;
  if(player.y > 100) player.y = 100;
}
// 玩家的攻击
void attackPlayer(Player& player, vector<Monster>& monsters)
{
  for(int i = 0; i < monsters.size(); ++i)
  {
    Monster& monster = monsters[i];
    int distX = player.x - monster.x;
    int distY = player.y - monster.y;
    int dist = abs(distX) + abs(distY);
    if(dist <= 10)
    {
      monster.hp -= player.atk;
      if(monster.hp <= 0)
      {
        player.score += 10;
        monsters.erase(monsters.begin() + i);
      }
    }
  }
}
// 游戏的主循环
void mainLoop()
{
  vector<Monster> monsters;
  generateMonsters(monsters);
  Player player;
  player.hp = 100;
  player.atk = 20;
  player.spd = 5;
  player.x = 50;
  player.y = 50;
  player.score = 0;
  while(player.hp > 0 && monsters.size() > 0)
  {
    char cmd;
    cout << "输入移动指令(WASD):";
    cin >> cmd;
    movePlayer(player, cmd);
    moveMonsters(monsters, player.x, player.y);
    attackPlayer(player, monsters);
    cout << "玩家坐标:(" << player.x << "," << player.y << ")" << endl;
    cout << "玩家生命值:" << player.hp << endl;
    cout << "玩家得分:" << player.score << endl;
  }
  if(player.hp <= 0) cout << "你被怪物杀死了!" << endl;
  else cout << "你成功击败了所有怪物!" << endl;
}
// 入口函数
int main()
{
  mainLoop();
  return 0;
}

以上就是一个简单的打怪游戏的代码实现。通过这个例子,你可以学习到如何使用C++来实现简单的游戏逻辑。当然,如果你想让这个游戏变得更加丰富和有趣,还需要进一步学习游戏编程的知识和技巧。

  
  

评论区