Ich arbeite an einer einfachen Konsolenanwendung, um eine Methode zur Berechnung von Schlachten zwischen zwei großen Einheiten mittelalterlicher Soldaten zu prototypisieren. Die Idee ist, dass ich die Berechnungen einrichte und das Programm mehrmals mit unterschiedlichen Parametern ausführe, um ein Gefühl dafür zu bekommen und zu sehen, ob es das ist, was ich will. Wie auch immer, zum Problem.
Jede der beiden Einheiten wird durch eine Unit-Klasse dargestellt. Die Klasse enthält Variablen für "Angriff", "Verteidigung", "Taktik" und "Einheitsgröße" sowie einige andere, die ich auskommentiert und ignoriert habe, bis ich dieses Problem behoben habe. Hier ist der Code für den Klassenheader:
#ifndef UNITS_H
#define UNITS_H
#include
#include
class Unit
{
public:
int attack;
int defense;
int charge;
int brace;
int tactics;
int unit_size;
public:
bool isAlive;
std::string name;
Unit(std::string name_target)
{
name = name_target;
attack = 1;
defense = 1;
charge = 1;
brace = 1;
tactics = 1;
unit_size = 1;
isAlive = true;
}
float GetAttack() {return (float)attack;}
float GetDefense() {return (float)defense;}
float GetCharge() {return (float)charge;}
float GetBrace() {return (float)brace;}
float GetTactics() {return (float)tactics;}
float GetSize() {return (float)unit_size;}
void SetAttack(int change) {attack = change;}
void SetDefense(int change) {defense = change;}
void SetCharge(int change) {charge = change;}
void SetBrace(int change) {brace = change;}
void SetTactics(int change) {tactics = change;}
void SetSize (int change) {unit_size = change;}
void TakeCasualties (int casualties);
int Defend(Unit enemy, float base_chance, float base_multiplier);
void DisplayStats();
};
#endif // UNITS_H
Sorry, wenn es schlampig ist, aber ich bin ein bisschen Amateur.
Ich würde den .cpp-Code für die Klasse einbeziehen, aber alles darin funktioniert gut. Ich habe Testläufe nur mit den Standardwerten durchgeführt, ohne Probleme. Das einzige Problem, das ich habe, besteht darin, die Werte nach der Konstruktion zu ändern.
In main.cpp habe ich eine Funktion AssignStats(Unit unit_target), die ich aufrufe, sobald die beiden Units erstellt sind. Ich rufe sie nacheinander auf jede davon. Der Code dafür lautet wie folgt:
void AssignStats (Unit unit_target)
{
int x;
cout << unit_target.name << endl;
cout << "Wert für Angriff?" << endl;
cin >> x;
cout << x << endl;
unit_target.SetAttack(x);
cout << "Wert für Verteidigung?" << endl;
cin >> x;
unit_target.SetDefense(x);
//unit_target.SetCharge(x);
//unit_target.SetBrace(x);
cout << "Wert für Taktik?" << endl;
cin >> x;
unit_target.SetTactics(x);
cout << "Wert für Größe?" << endl;
cin >> x;
unit_target.SetSize(x);
}
Soweit ich das beurteilen kann, sollte dieser Code funktionieren. Wenn ich jedoch die Statistiken jeder Einheit danach anzeigen lasse, werden die Standardwerte angezeigt, die vom Konstruktor eingegeben wurden. Ich kann einfach nicht verstehen, warum meine Set-Funktionen nicht funktionieren. Ich habe den Code etwas umgeschrieben, um zu überprüfen, ob sie die Eingabe richtig erhalten, wie folgt:
void Unit::SetAttack()
{
int x;
std::cout << "Zielwert für Angriff eingeben." << std::endl;
std::cin >> x;
std::cout << x;
attack = x;
std::cout << attack;
}
Ich würde 10 eingeben, und jedes der couts zeigt mir sofort 10 zurück, selbst der, der angeblich die Angriffsvariable der Klasse anzeigen sollte. Aber später, als ich DisplayStats() aufrief, zeigte es wieder alle Werte als Standardwerte an.
Kann jemand, der erfahrener ist als ich, das bitte klären?