Cześć!
Próbuję napisać coś w rodzaju systemu walki między dwoma postaciami,
void walka(Postac &wsk1, Postac &wsk2)
{
int k;
cout << "rozpoczyna sie walka miedzy : " << endl;
wsk1.wyswietl();
cout << " a : " << endl;
wsk2.wyswietl();
wsk1.hp - wsk2.obrazenia;
}
#pragma once
#include <iostream>
#include <string>
using namespace std;
class Postac
{
private:
string imie;
int lvl, hp, energia, sila, bron, obrazenia,exp;
public:
Postac();
virtual ~Postac();
virtual void obrazenia1()=0;
virtual void wyswietl() = 0;
virtual void level() = 0;
virtual void getexp()=0;
virtual void atak1()=0;
virtual void podnieshp()=0;
virtual void podniessile()=0;
virtual void podniesenergie()=0;
virtual void s1()=0;
virtual void s1o() = 0;
virtual void s2()=0;
virtual void hpn()=0;
friend void walka(Postac &wsk1, Postac &wsk2);
};
Problem pojawia się gdy chce by dwa obiekty działały na siebię to znaczy żeby pobrać ilość punktów hp od jednego obiektu i odjąć o ilość punktów ataku z drugiego, próbowałem wielu różnych zapisów ale za każdym razem gdy używam metody wyswietl(); obiekt zostaje taki sam jak był a gdy spróbuję wyświetlić pojedyńczą wartość z danego obiektu np cout<<wsk2.hp; to pokazuje mi dużo randomowych cyferek tak samo jak postawie przed wsk ampersanda. Proszę o wytłumaczenie o co tu chodzi coś w rodzaju interpretacji kodu oraz jak rozwiązać ten problem, jeżeli ktoś ma inny pomysł jak zrobić taki system walki na kształt turowej to chętnie przeczytam.
Dziękuje
int main()
{
wojownik woj1;
wojownik *wsk1;
wsk1 = &woj1;
wojownik woj2("artur",3,30,30,10,20,0,50);
wojownik *wsk2;
wsk2 = &woj2;
walka(woj1,woj2);
wsk1->wyswietl();
system("pause");
return 0;
}
oraz plik wojownik.cpp
#include "stdafx.h"
#include "wojownik.h"
wojownik::wojownik(string imie,int lvl,int hp,int energia, int sila, int bron, int obrazenia,int exp):Postac()
{
this->imie = imie;
this->lvl=lvl;
this->hp = hp;
this->energia = energia;
this->sila = sila;
this->bron = bron;
this->obrazenia = obrazenia;
this->exp = exp;
}
wojownik::~wojownik()
{
}
void wojownik::wyswietl()
{
obrazenia1();
cout << "Parametry twojej postaci" << endl;
cout << "imie : " << imie << endl << "lvl : " << lvl << endl;
cout << "punkt zycia : "<< hp << endl<<"punkt energi :" << energia << endl <<
"sila : " <<sila << endl <<"atak od broni : " <<bron << endl<< "obrazenia w walce: " << obrazenia << endl;
cout << " Nastepny level za : " << exp << " punktow doswiadczenia " << endl;
}
void wojownik::obrazenia1()
{
obrazenia = sila + bron;
}
void wojownik::atak1()
{
}
void wojownik::level()
{
if (exp >= 100)
{
int punktyr = 5;
cout << "wlasnie awansowales na " << ++lvl << "level! " << endl;
cout << " Teraz mozesz podniesc swoje statystki : " << endl;
for (int i = 0; i<= 4; i++)
{
int wyborparametru;
cout << " masz do dyspozycji :" << punktyr << " punktow do rozdania " << endl;
cout << "jaki parametr chcesz podniesc? : 1-hp, 2-energia, 3-sila, " << endl;
cin >> wyborparametru;
switch (wyborparametru)
{
case 1:
podnieshp();
break;
case 2:
podniesenergie();
break;
case 3:
podniessile();
break;
}
--punktyr;
}
exp = exp - 100;
wyswietl();
}
else
cout << "coraz blizej nowego poziomu!" << endl;
}
void wojownik::hpn()
{
hp;
}
void wojownik::getexp()
{
exp = exp + 20;
}
void wojownik::podnieshp()
{
hp = hp + 2;
}
void wojownik::podniesenergie()
{
energia = energia + 2;
}
void wojownik::podniessile()
{
sila = sila + 2;
}
void wojownik::s1()
{
obrazenia = obrazenia + 10;
cout << "postac "<<imie<<"podnosi swoj atak o : " << obrazenia;
}
void wojownik::s1o()
{
obrazenia = obrazenia - 10;
cout << "opadasz z sil" << obrazenia;
}
void wojownik::s2()
{
hp = hp - obrazenia;
}