Sorry Schrompf das hat sich für mich so angehört als wüsstest du bereits was nicht stimmt, willst es mir aber nicht sagen weil ich selbst darauf kommen soll.
Okay dann noch mal von vorn.
Was ich versucht habe zu Programmieren ist ein rundenbasierender Kampf wie man ihn zb. aus Pokemon oder FinalFantasy kennt, nur eben simpler.
Nun habe ich mir eine Klasse erstellt In der Variablen für die Lebenspunkte, Aktionspunkte etc habe und dann eben auch eine Instanz für den Spieler und eine für den Gegner.
Mein Problem ist nur das ich die Werte zwar ausgeben kann aber ich kann sie eben nicht über die jeweiligen Klassenfunktionen verändern.
Wenn zb die Funktion "Angriff" den Wert für die Lebenspunkte für die Instanz "Gegner" soll tut sie eben nicht so ganz was sie soll(Auser ein nervös zuckendes rechtes Auge bei mir hervorrufen:D)
Habe den Code nochmal ein wenig Kommentiert ich hoffe es ist nun Klarer was ich meine.
Code: Alles auswählen
Funktionen.hpp:
#pragma once
class Gladiator
{
private:
int Lebenspunkte;
int Aktionspunkte;
int Panzerung;
public:
Gladiator();
~Gladiator();
void Angreifen(bool Zug, Gladiator Spieler, Gladiator Gegner); //Soll die Lebenspunkte verringern
void Heilen(bool Zug, Gladiator Spieler, Gladiator Gegner); // Soll die Lebenspunkte erhöhen.
void Verteidigen(bool Zug, Gladiator Spieler, Gladiator Gegner); // Soll Panzerung + Aktionspunkte erhöhen
void Spiel(bool Zug, Gladiator Spieler, Gladiator Gegner); // Soll alle funktionen in einem Menue zusammenfassen
};
Funktionen.cpp:
#include <iostream>
#include <string>
#include <time.h>
#include <Windows.h>
#include "Gladiatoren und Funktionen.hpp"
using namespace std;
string Information;
bool Zug = false;
Gladiator::Gladiator() //Konstruktor
{
Lebenspunkte = 100;
Aktionspunkte = 100;
Panzerung = 1;
}
Gladiator::~Gladiator() // Destruktor
{
}
void Gladiator::Angreifen(bool Zug, Gladiator Spieler, Gladiator Gegner) //Soll die Lebenspunkte des Spielers o. Gegners verringern.
{
srand(time(NULL)); rand();
int Angriff = 5;
Angriff += rand() & 21; // Variable für die höhe der Angriffskraft
if (Zug == false) // Soll prüfen ob der Spieler an der Reihe ist.
{
Spieler.Lebenspunkte -= Angriff; // Wenn nicht - Spielerlebenspunkte verringern.
}
else
{
Gegner.Lebenspunkte =- (Angriff - Gegner.Panzerung); // Wenn ja - Gegnerischelebenspunkte verringern.
}
if (Zug == false) // Nur ein bisschen Textausgabe ..
{
Information = "Du greifst deinen Gegner an\n";
}
else
{
Information = "Dein Gegner greift dich an\n";
}
cout << Information << "Schaden: " << Angriff << endl;
}
void Gladiator::Heilen(bool Zug, Gladiator Spieler, Gladiator Gegner)
{
int x;
if (Zug == false)
{
x = Spieler.Lebenspunkte;
}
else
{
x = Gegner.Lebenspunkte;
}
srand(time(NULL)); rand();
int Heilung = rand() & 21 + 5;
x += (Heilung);
if (Zug == false)
{
Information = "Du Heilst dich!\n";
}
else
{
Information = "Dein Gegner Heilt sich!\n";
}
cout << Information << " Heilung: " << Heilung << endl;
}
void Gladiator::Verteidigen(bool Zug, Gladiator Spieler, Gladiator Gegner)
{
int x;
int y;
if (Zug == false)
{
x = Spieler.Panzerung;
y = Spieler.Aktionspunkte;
}
else
{
x = Gegner.Panzerung;
y = Gegner.Aktionspunkte;
}
srand(time(NULL)); rand();
int Aktionspunkte = rand() & 21 + 5;
y += Aktionspunkte + 5;
x += 15;
if (Zug == false)
{
Information = "Du verteidigst dich und kannst diese Runde nicht mehr angreifen!\n";
}
else
{
Information = "Dein Gegner verteidigt sich und kann diese runde nicht mehr angreifen!\n";
}
cout << Information << " Aktionspunkte: " << Aktionspunkte << endl;
}
//void Spielfeld(const int Höhe,const int Breite, char Feld[5][10])
//{
//
// for (int i = 0; i < Höhe; i++)
// {
// for (int x = 0; x < Breite; x++)
// {
// Feld[i][x] = ' ';
// cout << Feld[i][x];
// }
// cout << "\n";
// }
//
//}
//
//void ausgabe(const int Höhe, const int Breite, char Feld[5][10])
//{
// for (int i = 0; i < Höhe; i++)
// {
// for (int x = 0; x < Breite; x++)
// {
//
//
// cout << Feld[i][x];
// }
// cout << "\n";
// }
// cout << "\n1 = Angreifen\n2 = Verteidigen\n" << endl;
//
//
//}
void Gladiator::Spiel(bool Zug, Gladiator Spieler, Gladiator Gegner) //Funktion für das "Hauptspiel"
{
string Aktionsmenue = "\nDu bist an der Reihe was willst du tun?\n---------------------------------------\n<1> = Angreifen\n<2> = Heilen\n<3> = Verteidigen\n";
system("cls");
cout << "Spieler Lebenspunkte: " << Spieler.Lebenspunkte << "\t" << "Gegner Lebenspunkte: " << Gegner.Lebenspunkte << endl; // Ausgabe der jeweiligen Werte.
cout << "Spieler Aktionspunkte: " << Spieler.Aktionspunkte << "\t" << "Gegner Aktionspunkte: " << Gegner.Aktionspunkte << endl;
cout << "Spieler Verteidigung: " << Spieler.Panzerung << "\t\t" << "Gegner Verteidigung: " << Gegner.Panzerung << endl;
if (Zug == false)
{
cout << "\n" << Aktionsmenue << "\n" << endl; // Ausgabe für ein Aktionsmenue
}
else
{
cout << "\n" << Information << "\n" << endl; // Information über die jeweilige ausgewählte Aktion.
}
char Aktion;
cin >> Aktion;
switch (Aktion)
{
case '1': {Spieler.Angreifen(Zug, Spieler, Gegner); }break; // Auswahl der Aktion.
case '2': {Spieler.Heilen(Zug, Spieler, Gegner); }break;
case '3': {Spieler.Verteidigen(Zug, Spieler, Gegner); }break;
}
}
main:
#include <iostream>
#include <Windows.h>
#include <string>
#include "Gladiatoren und Funktionen.hpp"
using namespace std;
int main()
{
Gladiator Spieler; //Einen Galdiator für den Spieler
Gladiator Gegner; // Und einen für den Gegner
bool Zug = false;
cout << "GLADIATORENDUELL\n----------------\n\n" << endl; // Start menue
cout << "<1> = Spiel starten\n<2> = Spiel beenden\n\n" << endl;
char Menue;
do
{
cin >> Menue;
switch (Menue)
{
case '1':
{
Spieler.Spiel(Zug, Spieler, Gegner); // Hauptfunktion
}break;
case '2': {}break;
default: cout << "Falsche Eingabe" << endl;
}
} while (Menue != '2');
return 0;
}
Ich habe das mit dem Debugger mal versucht, verhaut mich nicht gleich aber gebracht hat mir das erst mal nichts .. :(