21xrx.com
2024-11-22 07:37:45 Friday
登录
文章检索 我的文章 写文章
【教程】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++来实现简单的游戏逻辑。当然,如果你想让这个游戏变得更加丰富和有趣,还需要进一步学习游戏编程的知识和技巧。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复