C++ 战斗游戏-C++;,给定一个产卵类,我如何在每一轮中产卵出更强的敌人

C++ 战斗游戏-C++;,给定一个产卵类,我如何在每一轮中产卵出更强的敌人,c++,class,C++,Class,我的OOP作业有问题。我得编一个1对1的战斗 这是一款生存游戏,玩家持续与敌人战斗,直到玩家死亡。球员在前进中变得更强壮。敌人每一轮都变得更强大 我创建了两个类,单位和繁殖者。 我们不能使用继承或多态。 我们只需要使用类的简单定义 我的问题是,我想不出一个简单的方法来让类产卵者每轮产卵一个更强的敌人 我曾想过让装置的控制器过载,但我在操作上有困难 有人能帮忙吗 这是我的单位头文件(Unit.h): 这是我的Spawner.cpp文件(Spawner.cpp): 最后是我的main.cpp: #i

我的OOP作业有问题。我得编一个1对1的战斗

这是一款生存游戏,玩家持续与敌人战斗,直到玩家死亡。球员在前进中变得更强壮。敌人每一轮都变得更强大

我创建了两个类,单位和繁殖者。 我们不能使用继承或多态。 我们只需要使用类的简单定义

我的问题是,我想不出一个简单的方法来让类产卵者每轮产卵一个更强的敌人

我曾想过让装置的控制器过载,但我在操作上有困难

有人能帮忙吗

这是我的单位头文件(Unit.h):

这是我的Spawner.cpp文件(Spawner.cpp):

最后是我的main.cpp:

#include "Unit.h"
#include "Spawner.h"

// Create player
Unit* createPlayer();

// Display Stats
void displayStats(Unit* unit);

// Play 1 round
void playRound(Unit*player, Unit* enemy);

// Simulate 1 attack (implement Higher agility gets to atttack first)
void combat(Unit* player, Unit* enemy);



void main()
{
    srand(time(NULL));
    Unit* player = createPlayer();
    Unit* enemy = NULL;

    Spawner *spawner = new Spawner();

    int round = 1;

    while (true) {
        cout << "Round " << round << endl;
        spawner->spawn(enemy);

        player->check(enemy);
        enemy->check(player);

        playRound(player, enemy);

        // if player is dead, end the game
        if (player->getHp() == 0) break;

        // else, add stats
        player->lvlUp();

        delete enemy;
        enemy = NULL;


        cout << "You defeted an enemy" << endl;
        system("pause>nul");
        system("cls");

        round++;
    }

    cout << "You were defeted! " << endl;
    cout << "You survived until Round " << round << endl;
    displayStats(player);

    delete player;
    player = NULL;
    delete spawner;
    spawner = NULL;
    system("pause>nul");
    system("cls");


}

Unit* createPlayer()
{
    Unit* unit = NULL;
    string name;
    int classChoice;

    cout << "Enter your Name: ";
    getline(cin, name);
    system("cls");

    cout << "Pick a class: " << endl
        << "\t [ 1 ] Warrior" << endl
        << "\t [ 2 ] Assassin" << endl
        << "\t [ 3 ] Mage" << endl
        << endl;
    cin >> classChoice;

    while (classChoice > 3 || classChoice <= 0) {
        cout << "INVALID INPUT! Please try again" << endl;
        cout << "Pick a class: " << endl
            << "\t [ 1 ] Warrior" << endl
            << "\t [ 2 ] Assassin" << endl
            << "\t [ 3 ] Mage" << endl
            << endl;
        cin >> classChoice;
    }

    unit = new Unit(name, classChoice);

    return unit;
}

void displayStats(Unit* unit)
{
    cout << "=========================================================================================" << endl
        << "Name: " << unit->getName() << " \t \t \t HP: " << unit->getHp() << " / " << unit->getMaxHp() << endl
        << "Class: " << unit->getClass() << endl
        << "==========================================================================================" << endl
        << "POW: " << unit->getPower() << endl
        << "VIT: " << unit->getVitality() << endl
        << "AGI: " << unit->getAgility() << endl
        << "DEX: " << unit->getDexterity() << endl
        << endl;
}


void playRound(Unit*player, Unit* enemy)
{
    while (player->getHp() > 0 && enemy->getHp() > 0) {
        displayStats(player);
        displayStats(enemy);
        system("pause>nul");

        combat(player, enemy);
        system("cls");
    }

}

void combat(Unit* player, Unit* enemy)
{
    if (player->getFirstToAttack()) {
        player->attack(enemy);
        if (player->getHit() == ATTACK_MISS) cout << player->getName() << "'s Attack Missed! " << endl;
        else if (player->getHit() == ATTACK_HIT) cout << player->getName() << " dealt " << player->getDamage() << " Damage" << endl;
        system("pause>nul");
        if (enemy->getHp() == 0) return;

        enemy->attack(player);
        if (enemy->getHit() == ATTACK_MISS) cout << enemy->getName() << "'s Attack Missed! " << endl;
        else if (enemy->getHit() == ATTACK_HIT) cout << enemy->getName() << " dealt " << enemy->getDamage() << " Damage" << endl;
        system("pause>nul");
        return;
    }


    else if (enemy->getFirstToAttack()) {
        enemy->attack(player);
        if (enemy->getHit() == ATTACK_MISS) cout << enemy->getName() << "'s Attack Missed! " << endl;
        else if (enemy->getHit() == ATTACK_HIT) cout << enemy->getName() << " dealt " << enemy->getDamage() << " Damage" << endl;
        system("pause>nul");
        if (player->getHp() == 0) return;

        player->attack(enemy);
        if (player->getHit() == ATTACK_MISS) cout << player->getName() << "'s Attack Missed! " << endl;
        else if (player->getHit() == ATTACK_HIT) cout << player->getName() << " dealt " << player->getDamage() << " Damage" << endl;
        system("pause>nul");
        return;
    }
}
#包括“Unit.h”
#包括“Spawner.h”
//创建玩家
单位*createPlayer();
//显示统计数据
void displaysts(单位*单位);
//打1轮
无效游戏回合(单位*玩家,单位*敌人);
//模拟1次攻击(实现更高的敏捷性,首先到达攻击点)
无效战斗(单位*玩家,单位*敌人);
void main()
{
srand(时间(空));
单位*player=createPlayer();
单位*敌人=零;
产卵器*产卵器=新产卵器();
整数轮=1;
while(true){
不能检查(播放器);
游戏回合(玩家、敌人);
//如果玩家死亡,结束游戏
如果(player->getHp()==0)中断;
//否则,添加统计数据
player->lvlUp();
删除敌人;
敌人=零;

cout向
单位
类添加一个“等级”,并使用该等级增加单位的统计数据(例如,等级2可能意味着统计数据乘以1.5或类似的数值)。将
级别
作为参数传递给与units类类似的构造函数。

您需要让您的繁殖者知道它繁殖了多少敌人:

// this belongs into your class definition, it should start at zero
int mCurrentSpawn;
因此,在构造函数中将其设置为零:

Spawner::Spawner()
{
   mCurrentSpawn = 0;
}
然后在生成敌人时引用它:

void Spawner::spawn(Unit *& unit)
{
    mRandomClass = rand() % 3 + 1;

    unit = new Unit("Enemy", mRandomClass);
    mUnit = unit;

    mCurrentSpawn++;

    int levelUps = mCurrentSpawn - 1;

    while(levelUps > 0)
    {
       mUnit->lvlUp(); 
       levelUps--;
    }
}

你可能想在给你的繁殖者一轮
中问这样的问题可能会有帮助。请不要使用
void main()
这是未定义的行为。使用定义的入口点之一,可能是
int main()
。如果我在战斗的每一端都不断地释放敌人,我该如何提高等级round@Ken在你的情况下,等级可以简单地与回合相等。第一轮你有一级单位,第二轮你有二级敌人,等等。因此当你产生一个敌人时,只需通过这一轮,然后作为等级传递给
Unit
constructor。如果你打败了一个战士,它只会根据对手的职业升级:HP+3 VIT+3刺客:AGI+3 Dex+3 Mage POW+5因为我的职业是固定的,他的属性将不平衡。例如,我是一个战士,只有他的HP和VIT会增长,而且lvlup也不会工作,因为我最近释放了敌人,所以所有其他的功能都是固定的在调用无效单位::检查(单位*目标)之前,您是无用的功能我真的不明白你的评论。如果你想让你的敌人有一个不同的升级过程,写一个。这只是一个例子,使用与你的玩家相同的升级。你似乎没有真正尝试过。为什么
lvlUp
检查之前不工作?它们似乎没有连接。也不应该连接。因为单位将首先检查对手的等级,然后根据该等级评估统计奖金。对我来说,先平级,然后调用检查似乎是正确的顺序。
#include "Unit.h"
#include "Spawner.h"

// Create player
Unit* createPlayer();

// Display Stats
void displayStats(Unit* unit);

// Play 1 round
void playRound(Unit*player, Unit* enemy);

// Simulate 1 attack (implement Higher agility gets to atttack first)
void combat(Unit* player, Unit* enemy);



void main()
{
    srand(time(NULL));
    Unit* player = createPlayer();
    Unit* enemy = NULL;

    Spawner *spawner = new Spawner();

    int round = 1;

    while (true) {
        cout << "Round " << round << endl;
        spawner->spawn(enemy);

        player->check(enemy);
        enemy->check(player);

        playRound(player, enemy);

        // if player is dead, end the game
        if (player->getHp() == 0) break;

        // else, add stats
        player->lvlUp();

        delete enemy;
        enemy = NULL;


        cout << "You defeted an enemy" << endl;
        system("pause>nul");
        system("cls");

        round++;
    }

    cout << "You were defeted! " << endl;
    cout << "You survived until Round " << round << endl;
    displayStats(player);

    delete player;
    player = NULL;
    delete spawner;
    spawner = NULL;
    system("pause>nul");
    system("cls");


}

Unit* createPlayer()
{
    Unit* unit = NULL;
    string name;
    int classChoice;

    cout << "Enter your Name: ";
    getline(cin, name);
    system("cls");

    cout << "Pick a class: " << endl
        << "\t [ 1 ] Warrior" << endl
        << "\t [ 2 ] Assassin" << endl
        << "\t [ 3 ] Mage" << endl
        << endl;
    cin >> classChoice;

    while (classChoice > 3 || classChoice <= 0) {
        cout << "INVALID INPUT! Please try again" << endl;
        cout << "Pick a class: " << endl
            << "\t [ 1 ] Warrior" << endl
            << "\t [ 2 ] Assassin" << endl
            << "\t [ 3 ] Mage" << endl
            << endl;
        cin >> classChoice;
    }

    unit = new Unit(name, classChoice);

    return unit;
}

void displayStats(Unit* unit)
{
    cout << "=========================================================================================" << endl
        << "Name: " << unit->getName() << " \t \t \t HP: " << unit->getHp() << " / " << unit->getMaxHp() << endl
        << "Class: " << unit->getClass() << endl
        << "==========================================================================================" << endl
        << "POW: " << unit->getPower() << endl
        << "VIT: " << unit->getVitality() << endl
        << "AGI: " << unit->getAgility() << endl
        << "DEX: " << unit->getDexterity() << endl
        << endl;
}


void playRound(Unit*player, Unit* enemy)
{
    while (player->getHp() > 0 && enemy->getHp() > 0) {
        displayStats(player);
        displayStats(enemy);
        system("pause>nul");

        combat(player, enemy);
        system("cls");
    }

}

void combat(Unit* player, Unit* enemy)
{
    if (player->getFirstToAttack()) {
        player->attack(enemy);
        if (player->getHit() == ATTACK_MISS) cout << player->getName() << "'s Attack Missed! " << endl;
        else if (player->getHit() == ATTACK_HIT) cout << player->getName() << " dealt " << player->getDamage() << " Damage" << endl;
        system("pause>nul");
        if (enemy->getHp() == 0) return;

        enemy->attack(player);
        if (enemy->getHit() == ATTACK_MISS) cout << enemy->getName() << "'s Attack Missed! " << endl;
        else if (enemy->getHit() == ATTACK_HIT) cout << enemy->getName() << " dealt " << enemy->getDamage() << " Damage" << endl;
        system("pause>nul");
        return;
    }


    else if (enemy->getFirstToAttack()) {
        enemy->attack(player);
        if (enemy->getHit() == ATTACK_MISS) cout << enemy->getName() << "'s Attack Missed! " << endl;
        else if (enemy->getHit() == ATTACK_HIT) cout << enemy->getName() << " dealt " << enemy->getDamage() << " Damage" << endl;
        system("pause>nul");
        if (player->getHp() == 0) return;

        player->attack(enemy);
        if (player->getHit() == ATTACK_MISS) cout << player->getName() << "'s Attack Missed! " << endl;
        else if (player->getHit() == ATTACK_HIT) cout << player->getName() << " dealt " << player->getDamage() << " Damage" << endl;
        system("pause>nul");
        return;
    }
}
// this belongs into your class definition, it should start at zero
int mCurrentSpawn;
Spawner::Spawner()
{
   mCurrentSpawn = 0;
}
void Spawner::spawn(Unit *& unit)
{
    mRandomClass = rand() % 3 + 1;

    unit = new Unit("Enemy", mRandomClass);
    mUnit = unit;

    mCurrentSpawn++;

    int levelUps = mCurrentSpawn - 1;

    while(levelUps > 0)
    {
       mUnit->lvlUp(); 
       levelUps--;
    }
}