Я ОЧЕНЬ усердно работал над этим кодом, и есть несколько ошибок, но я опубликую остальные в разных вопросах, потому что я слышал, что это действительно профессиональный веб-сайт, и я ненавижу, когда делаю ошибки. В любом случае, я работал над этим некоторое время, но я хочу сделать так, чтобы, когда игрок получает определенное количество XP, он повышал свой уровень. У меня пока нет кода битвы за уровни, но как мне сделать так, чтобы уровень игрока автоматически повышался при достижении определенного количества XP?
Вот мой код:
/* Skyy Civil
C++ Legend Game
*/
#include <iostream>
#include <cstring>
#include <fstream>
using namespace std;
/* No files, struct instead.
constructing monsters and hero and damage
*/
struct Monster{
int monsterCount;
string monsterType;
int monsterHealth;
};
// Hero
struct Hero{
int XP;
int coins;
int level;
int health;
};
struct Attacks{
string attack1;
string attack2;
string attack3;
string attack4;
int damageAttack1;
int damageAttack2;
int damageAttack3;
int damageAttack4;
};
/*
The actual level starts here
*/
void LevelStart(){
cout << "WORK IN PROGRESS";
}
/*
Game setup is where the program checks the level and sets it up for the player to begin the game
*/
void levelSetup(){
struct Hero player;
struct Attacks playerAttacks;
struct Attacks monsterAttacks;
struct Monster easyLevelMonster;
// Player attacks and stats
player.health = 150;
playerAttacks.attack1 = "FireBall";
playerAttacks.attack2 = "Fire Slash";
playerAttacks.attack3 = "Fire Barrage";
playerAttacks.attack4 = "Blue Flame Bomb";
playerAttacks.damageAttack1 = 4;
playerAttacks.damageAttack2 = 9;
playerAttacks.damageAttack3 = 14;
playerAttacks.damageAttack4 = 19;
// Monster attacks and stats
easyLevelMonster.monsterCount = 1;
easyLevelMonster.monsterType = "monster";
easyLevelMonster.monsterHealth = 100;
monsterAttacks.attack1 = "bash";
monsterAttacks.damageAttack1 = 10;
if (player.health == 150 && easyLevelMonster.monsterCount == 1){
LevelStart();
}
}
/*
Game menu includes options for the player to choose to play the game
*/
void GameMenu(string username, string password){
struct Attacks sword;
struct Hero player;
string gameMenuChoice;
player.level = 1;
player.XP = 0;
cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
cout << "~~~~~~~+~~~~~~~LEGEND!~~~~~~~+~~~~~~~\n\n\n\n";
cout << username << "\n\n";
cout << "Level: " << player.level << "\n\n\n\n\n\n";
cout << "XP: " << player.XP << "\n\n\n\n";
cout << "(a) Play Level\n";
cout << "(b) Exit\n";
cin >> gameMenuChoice;
if (gameMenuChoice == "a"){
levelSetup();
}
if (gameMenuChoice == "b"){
cout << "Game EXITED\n";
}
}
void Login(){
int loginChoice;
string username;
string password;
fstream login;
login.open("login.dat", ios::in | ios::out);
cout << "Username\n";
cout << "\n > ";
cin >> username;
login << "Username: " << username << endl;
cout << "\n\n\n Password\n";
cout << "\n > ";
cin >> password;
login << "Pass: " << password << endl;
login.close();
cout << "loading...\n\n\n";
cout << "(1) Start\n";
cin >> loginChoice;
if (loginChoice == 1){
GameMenu(username, password);
}
}
// StoryMode
void StoryMode(void){
int storyModeChoice;
cout << "Welcome to story mode!\n\n";
cout << "(1) Login\n";
cin >> storyModeChoice;
if (storyModeChoice == 1){
Login();
}
}
// Credits
void Credits(){
int creditsChoice;
cout << "Creator: Skyy Civil\n\n\n\n";
cout << "(1) Back to menu\n";
cout << "(2)Continue to story mode\n";
cin >> creditsChoice;
if (creditsChoice == 1){
void Menu();
}
if (creditsChoice == 2){
StoryMode();
}
}
// Main Menu
void Menu(){
int menuChoice;
cout << "\nLegend\n";
cout << "(1)Story Mode\n";
cout << "(2) Credits\n";
cin >> menuChoice;
if (menuChoice == 1){
StoryMode();
}
if (menuChoice == 2){
Credits();
}
};
// ------------MAIN--------------- \\
int main(void){
Menu();
}
Извините, если мой код действительно беспорядочный, я программист на С++ среднего уровня, и мои навыки просто очень печальны.





Вероятно, вам следует создать метод в структуре вашего героя, чтобы заставить его получать опыт и проверять, достаточно ли у него опыта или нет для повышения уровня.
// Hero
struct Hero{
int XP;
int coins;
int level;
int health;
void gainXP(int);
};
void Hero::gainXP(int xp)
{
this->XP += xp;
if (this->XP >= 100) //Change 100 to the amount of XP it needs to level up.
{
this->XP -= 100;
this->level++;
}
}
Затем просто вызовите метод, когда он наберет XP.
Дополнительная информация:
using namespace std; считается плохой практикой. (Подробнее здесь)<cstring>.login вы ни в какой момент не читаете из std::fstream, открытого с помощью std::ios::in, поэтому вам, вероятно, следует сделать это с помощью std::ofstream и просто открыть его с помощью std::ios::out.levelSetup нет необходимости проверять player.health == 150 && easyLevelMonster.monsterCount == 1.Если вы сделаете массив XP, необходимых для достижения каждого уровня, вы можете обобщить что-то вроде if (this->XP >= levelxp[this->level]) и получить больше D&D-sh (обратите внимание, что я все еще играю во второе издание, когда группа может собраться вместе (и это было редко в эти дни). (<ругательство удалено> COVID))) опыта, требующего разного количества для каждого уровня.
Предложение: начните с очень маленькой программы, которая просто отслеживает XP и повышает уровень. Все остальное будет просто шумом, помогающим скрыть возможные ошибки в системе прокачки. Подумайте о том, чтобы сделать
Heroболее похожим наclass. Если у вас есть метод что-то вродеvoid AddXP(int newXP)... И GaryLOL только что опубликовал остальную часть моего комментария в качестве ответа. Голосуй за, Гэри.