Ok,można pominąć to co wyżej bo juz mniej więcej rozkminiłem koncepcje nie wiem czy słuszną czy też nie…Chodzi o to że mam pewien problem który za bardzo nic mi nie mówi…po prostu nie wiem czemu kod nie chce się z kompilować wyświetlając błąd:
Błąd
error: ld returned 1 exit status
A tu wstawie kod którego zapewne dotyczy:
Lizard.h
#pragma once
#ifndef LIZARD_H
#define LIZARD_H
#include "Monster.h"
#include "Character.h"
class Character;
class Lizard : public Monster
{
public:
Lizard(std::string = "Jaszczur", int = 5, int = 5, float = 150, int = 5, int = 5); //konstruktor i wartosci domyslne tego konstruktora
~Lizard(); //destruktor
int LVL(Character& Char); ///funkcja losująca level
void respawn(); ///funkcja pokazująca z kim mamy do czynienia…
void show(); ///funkcja obliczająca oraz pokazująca staty potwora oraz zamiana ich na wynik który ma wpływ na wynik walki
int getExp_m() const; ///funkcja zwracająca punkty doświadczenia za potworka
int getScore() const; ///funkcja zwracająca wynik
std::string getName() const; ///funkcja zwracająca nazwe potworka
};
#endif // LIZARD_H
Lizard.cpp
#include <iostream>
#include <random>
#include <cstdlib>
#include "Character.h"
#include "Lizard.h"
using namespace std;
Lizard::Lizard(string n, int s, int w, float zdr, int zr, int intel) //konstruktor
{
nazwa = n;
sila = s;
wytrzymalosc = w;
zdrowie = zdr;
zrecznosc = zr;
inteligencja = intel;
}
Lizard::~Lizard()
{
cout << "\nSzacunek…Udało ci się pokonać tą bestie!" << endl; //dtor
}
random_device rd; // generator liczb losowych (przynajmniej tak zrozumiałem z tłumaczenia) ;)
mt19937 gen(rd()); // to seed mersenne twister. - do zasiania mersenne twister
uniform_int_distribution<> wR(1,4); // zakres losowania pkt. wytrzymałości wyłącznie pomiędzy 1 a 2.
uniform_int_distribution<> sR(1,6); // zakres losowania pkt. siły wyłącznie pomiędzy 1 a 2.
uniform_int_distribution<> zrR(1,5); // zakres losowania pkt. zręczności wyłącznie pomiędzy 1 a 2.
uniform_int_distribution<> intelR(1,2); // zakres losowania pkt. inteligencji wyłącznie pomiędzy 1 a 2.
int s1=sR(gen);
int w1=wR(gen);
int zr1=zrR(gen);
int intel1=intelR(gen);
int sila1,wytrzymalosc1,zrecznosc1,inteligencja1;
float zdrowie1;
struct lvl //struktura w której jest przechowywana zmienna w której przechowywać się będzie lvl potwora
{
int LVL_M;
int Exp_m;
};
lvl lvl1; //nazwa struktury i obiekt tej struktury
//zwracanie lvl'a gracza oraz losowanie lvl'a potworka
int Lizard::LVL(Character& Char1)
{
uniform_int_distribution<> LvL_M(Char1.getLVL(),Char1.getLVL()+2); // zakres losowania lvli wyłącznie pomiędzy 1 a 10.
lvl1.LVL_M=LvL_M(gen);
cout<<"\nJaszczur ma LVL: "<<lvl1.LVL_M<<endl;
}
void Lizard::respawn() //funkcja zwracająca Lvl Potworka- Szczura oraz naliczająca exp za stworka
{
cout<<"UWAGA!To POTWÓR!"<<np<<"!"<<endl;
lvl1.Exp_m=40*lvl1.LVL_M; //exp jak naliczyć należy za szczura
}
void Lizard::show() //metoda ukazująca dane potworka
{
cout <<Italic_cyan<<"Nazwa Potwora"<<white<<":" << nazwa <<endl
<<"Poziom Potwora:"<<lvl1.LVL_M<<endl
<<yellow<< "Sila" <<white<<":"<< sila + s1 * lvl1.LVL_M<< endl
<<purple<<"Wytrzymalosc"<<white<<":" << wytrzymalosc + w1 *lvl1.LVL_M<< endl
<<red<<"Zdrowie"<<white<<":"<< zdrowie*lvl1.LVL_M<< endl
<<green<<"Zrecznosc"<<white<<":"<< zrecznosc + zr1 *lvl1.LVL_M<< endl
<<blue<<"Inteligencja"<<white<<":" << inteligencja + intel1 *lvl1.LVL_M<< endl;
np = nazwa;
//dodawanie wartości podstawowej do wylosowanej
sila1=sila + s1*lvl1.LVL_M;
wytrzymalosc1=wytrzymalosc + w1*lvl1.LVL_M;
zdrowie1=zdrowie*lvl1.LVL_M;
zrecznosc1=zrecznosc + zr1*lvl1.LVL_M;
inteligencja1=inteligencja + intel1*lvl1.LVL_M;
wynik = (sila1 + wytrzymalosc1 + zrecznosc1 + inteligencja1) * zdrowie1;
}
int Lizard::getExp_m() const //zwracanie exp'a z potworka
{
return lvl1.Exp_m;
}
int Lizard::getScore() const //funkcja zwracająca wartość całkowitą czyli "int"
{
return wynik;
}
string Lizard::getName() const //funkcja zwracająca nazwe czyli "string"
{
return nazwa;
}
Character.h
#pragma once
#include <iostream>
#include "Creature.h"
#include "Rat.h"
#include "Lizard.h"
class Rat;
class Lizard;
class Character : public Creature {
public:
Character(std::string = "Mr.Nobody", int = 5, int = 5, float = 100, int = 5, int = 5); //konstruktor i wartosci domyslne tego konstruktora
~Character(); //destruktor
//Level
int Exp=10;
int Max_exp,pkt_exp;
int New_LVL_R(const Rat& m);
int New_LVL_L(const Lizard& l);
/*int New_LVL_G(const Goblin& g);
int New_LVL_B(const Bat& b);
*/
void load();
void show();
int LVL_P=1;
void porownaj_R(const Rat& monster);
void porownaj_L(const Lizard& monster_l);
/*
void porownaj_B(const Bat& monster_b);
void porownaj_G(const Goblin& monster_g);
*/
int getLVL();
};
Character.cpp
///modyfikacje: Wprowadzenie LVLi
#include <iostream>
#include <cstdlib>
#include "Rat.h"
#include "Lizard.h"
#include "Character.h"
#include <unistd.h>
using namespace std;
struct wins
{
bool win=false;
};
wins win1;
void Character::load() //metoda wczytujaca dane postaci
{
cout << "\nCzy chcesz wprowadzić Atrybuty Postaci(t/n)?";
cin >> odp;
if (odp == 't' || odp == 'T') {
cout << "\nPodaj "<<Italic_cyan<<"Nazwe Postaci"<<white<<":";
cin >> nazwa;
cout << "Podaj "<<yellow<<"Sile "<<white<< nazwa << "'a:";
cin >> sila;
cout << "Podaj "<<purple<<"Wytrzymalosc "<<white<< nazwa << "'a:";
cin >> wytrzymalosc;
cout << "Podaj Ilosc "<<red<<"Zdrowia "<<white << nazwa << "'a:";
cin >> zdrowie;
cout << "Podaj "<<green<<"Zrecznosc "<<white<< nazwa << "'a:";
cin >> zrecznosc;
cout << "Podaj "<<blue<<"Inteligencje "<<white<< nazwa << "'a:";
cin >> inteligencja;
cout << "\n";
}
}
void Character::show() //metoda ukazująca dane postaci
{
system("clear");
cout <<Italic_cyan<<"Nazwa Postaci"<<white<<":" << nazwa << endl
<<"Poziom Postaci:"<<LVL_P<<endl
<<yellow<<"Sila"<<white<<":" << sila << endl
<<purple<<"Wytrzymalosc"<<white<<":" << wytrzymalosc << endl
<<red<<"Zdrowie"<<white<<":" << zdrowie *LVL_P<< endl
<<green<<"Zrecznosc"<<white<<":" << zrecznosc << endl
<<blue<<"Inteligencja"<<white<<":" << inteligencja << endl;
sleep(2);
nP = nazwa;
wynik1 = (sila + wytrzymalosc + zrecznosc + inteligencja )* zdrowie;
}
Character::Character(string n, int s, int w, float zdr, int zr, int intel) //konstruktor klasy Character
{
nazwa = n;
sila = s;
wytrzymalosc = w;
zdrowie = zdr;
zrecznosc = zr;
inteligencja = intel;
}
Character::~Character() //destruktor klasy Character
{
cout << "\nJezeli widzisz ten komunikat to znaczy,ze twoj komputer zniknie za…1…2…3 BOOM!" << endl;
}
int Character::getLVL() //funkcja zwracająca poziom postaci do losowania poziomu Potwora
{
return LVL_P;
}
//funkcja sprawdzająca czy wbiliśmy lvl jeżeli wygraliśmy rzecz jasna!
//funkcja podobnie działająca do funkcji losującej level lub funkcji porównującej czyli pobieranie z innej klasy zmiennej
int Character::New_LVL_R(const Rat& m)
{
Exp+=m.getExp_m(); //exp po wygranej walce
Max_exp=100*LVL_P;
if(Exp==Max_exp)
{
cout<<"Masz nowy Poziom!\n"<<
"Twoj LVL to"<<LVL_P+1<<
"\nDo wydania :"<<pkt_exp+10;
}
else
{
cout<<"Brawo,Wygrales ! Dostajesz "<<m.getExp_m()<<".Brakuje ci "
<<Max_exp-Exp<<" expa do nowego LVL'a"<<endl;
}
}
int Character::New_LVL_L(const Lizard& l)
{
Exp+=l.getExp_m(); //exp po wygranej walce
Max_exp=100*LVL_P;
if(Exp==Max_exp)
{
cout<<"Masz nowy Poziom!\n"<<
"Twoj LVL to"<<LVL_P+1<<
"\nDo wydania :"<<pkt_exp+10;
}
else
{
cout<<"Brawo,Wygrales ! Dostajesz "<<l.getExp_m()<<".Brakuje ci "
<<Max_exp-Exp<<" expa do nowego LVL'a"<<endl;
}
}
void Character::porownaj_R(const Rat& monster)
{
if (wynik1 > monster.getScore())
{
cout << monster.getName() << " Przegralby z " << nP;
win1.win=true;
int New_LVL_R(const Rat& monster);
}
if (wynik1 < monster.getScore())
cout << monster.getName() << " Wygralby z " << nP;
if (wynik1 == monster.getScore())
cout << "Bylby remis";
}
void Character::porownaj_L(const Lizard& monster_l)
{
if (wynik1 > monster_l.getScore())
{
cout << monster_l.getName() << " Przegralby z " << nP;
win1.win=true;
int New_LVL_L(const Lizard& monster_l);
}
if (wynik1 < monster_l.getScore())
cout << monster_l.getName() << " Wygralby z " << nP;
if (wynik1 == monster_l.getScore())
cout << "Bylby remis";
}
main.cpp
///modyfikacje: Wprowadzenie LVLi
#include <iostream>
#include <cstdlib>
#include "Rat.h"
#include "Lizard.h"
#include "Character.h"
#include <unistd.h>
using namespace std;
struct wins
{
bool win=false;
};
wins win1;
void Character::load() //metoda wczytujaca dane postaci
{
cout << "\nCzy chcesz wprowadzić Atrybuty Postaci(t/n)?";
cin >> odp;
if (odp == 't' || odp == 'T') {
cout << "\nPodaj "<<Italic_cyan<<"Nazwe Postaci"<<white<<":";
cin >> nazwa;
cout << "Podaj "<<yellow<<"Sile "<<white<< nazwa << "'a:";
cin >> sila;
cout << "Podaj "<<purple<<"Wytrzymalosc "<<white<< nazwa << "'a:";
cin >> wytrzymalosc;
cout << "Podaj Ilosc "<<red<<"Zdrowia "<<white << nazwa << "'a:";
cin >> zdrowie;
cout << "Podaj "<<green<<"Zrecznosc "<<white<< nazwa << "'a:";
cin >> zrecznosc;
cout << "Podaj "<<blue<<"Inteligencje "<<white<< nazwa << "'a:";
cin >> inteligencja;
cout << "\n";
}
}
void Character::show() //metoda ukazująca dane postaci
{
system("clear");
cout <<Italic_cyan<<"Nazwa Postaci"<<white<<":" << nazwa << endl
<<"Poziom Postaci:"<<LVL_P<<endl
<<yellow<<"Sila"<<white<<":" << sila << endl
<<purple<<"Wytrzymalosc"<<white<<":" << wytrzymalosc << endl
<<red<<"Zdrowie"<<white<<":" << zdrowie *LVL_P<< endl
<<green<<"Zrecznosc"<<white<<":" << zrecznosc << endl
<<blue<<"Inteligencja"<<white<<":" << inteligencja << endl;
sleep(2);
nP = nazwa;
wynik1 = (sila + wytrzymalosc + zrecznosc + inteligencja )* zdrowie;
}
Character::Character(string n, int s, int w, float zdr, int zr, int intel) //konstruktor klasy Character
{
nazwa = n;
sila = s;
wytrzymalosc = w;
zdrowie = zdr;
zrecznosc = zr;
inteligencja = intel;
}
Character::~Character() //destruktor klasy Character
{
cout << "\nJezeli widzisz ten komunikat to znaczy,ze twoj komputer zniknie za…1…2…3 BOOM!" << endl;
}
int Character::getLVL() //funkcja zwracająca poziom postaci do losowania poziomu Potwora
{
return LVL_P;
}
//funkcja sprawdzająca czy wbiliśmy lvl jeżeli wygraliśmy rzecz jasna!
//funkcja podobnie działająca do funkcji losującej level lub funkcji porównującej czyli pobieranie z innej klasy zmiennej
int Character::New_LVL_R(const Rat& m)
{
Exp+=m.getExp_m(); //exp po wygranej walce
Max_exp=100*LVL_P;
if(Exp==Max_exp)
{
cout<<"Masz nowy Poziom!\n"<<
"Twoj LVL to"<<LVL_P+1<<
"\nDo wydania :"<<pkt_exp+10;
}
else
{
cout<<"Brawo,Wygrales ! Dostajesz "<<m.getExp_m()<<".Brakuje ci "
<<Max_exp-Exp<<" expa do nowego LVL'a"<<endl;
}
}
int Character::New_LVL_L(const Lizard& l)
{
Exp+=l.getExp_m(); //exp po wygranej walce
Max_exp=100*LVL_P;
if(Exp==Max_exp)
{
cout<<"Masz nowy Poziom!\n"<<
"Twoj LVL to"<<LVL_P+1<<
"\nDo wydania :"<<pkt_exp+10;
}
else
{
cout<<"Brawo,Wygrales ! Dostajesz "<<l.getExp_m()<<".Brakuje ci "
<<Max_exp-Exp<<" expa do nowego LVL'a"<<endl;
}
}
void Character::porownaj_R(const Rat& monster)
{
if (wynik1 > monster.getScore())
{
cout << monster.getName() << " Przegralby z " << nP;
win1.win=true;
int New_LVL_R(const Rat& monster);
}
if (wynik1 < monster.getScore())
cout << monster.getName() << " Wygralby z " << nP;
if (wynik1 == monster.getScore())
cout << "Bylby remis";
}
void Character::porownaj_L(const Lizard& monster_l)
{
if (wynik1 > monster_l.getScore())
{
cout << monster_l.getName() << " Przegralby z " << nP;
win1.win=true;
int New_LVL_L(const Lizard& monster_l);
}
if (wynik1 < monster_l.getScore())
cout << monster_l.getName() << " Wygralby z " << nP;
if (wynik1 == monster_l.getScore())
cout << "Bylby remis";
}
Rat.h
#pragma once
#ifndef RAT_H
#define RAT_H
#include "Monster.h"
#include "Character.h"
class Character;
class Rat : public Monster
{
public:
Rat(std::string = "Szczur", int = 5, int = 5, float = 100, int = 5, int = 5); //konstruktor i wartosci domyslne tego konstruktora
~Rat(); //destruktor
int LVL(Character& Char); ///funkcja losująca level
void respawn(); ///funkcja pokazująca z kim mamy do czynienia…
void show(); ///funkcja obliczająca oraz pokazująca staty potwora oraz zamiana ich na wynik który ma wpływ na wynik walki
int getExp_m() const; ///funkcja zwracająca punkty doświadczenia za potworka
int getScore() const; ///funkcja zwracająca wynik
std::string getName() const; ///funkcja zwracająca nazwe potworka
};
#endif // RAT_H
Rat.cpp
#include <iostream>
#include <random>
#include <cstdlib>
#include "Character.h"
#include "Rat.h"
using namespace std;
Rat::Rat(string n, int s, int w, float zdr, int zr, int intel) //konstruktor
{
nazwa = n;
sila = s;
wytrzymalosc = w;
zdrowie = zdr;
zrecznosc = zr;
inteligencja = intel;
}
Rat::~Rat() //destruktor
{
cout << "\nMozna dzialac na nowo :D" << endl;
}
random_device rd; // generator liczb losowych (przynajmniej tak zrozumiałem z tłumaczenia) ;)
mt19937 gen(rd()); // to seed mersenne twister. - do zasiania mersenne twister
uniform_int_distribution<> wR(1,2); // zakres losowania pkt. wytrzymałości wyłącznie pomiędzy 1 a 2.
uniform_int_distribution<> sR(1,2); // zakres losowania pkt. siły wyłącznie pomiędzy 1 a 2.
uniform_int_distribution<> zrR(1,5); // zakres losowania pkt. zręczności wyłącznie pomiędzy 1 a 2.
uniform_int_distribution<> intelR(1,3); // zakres losowania pkt. inteligencji wyłącznie pomiędzy 1 a 2.
int s1=sR(gen);
int w1=wR(gen);
int zr1=zrR(gen);
int intel1=intelR(gen);
int sila1,wytrzymalosc1,zrecznosc1,inteligencja1;
float zdrowie1;
struct lvl //struktura w której jest przechowywana zmienna w której przechowywać się będzie lvl potwora
{
int LVL_M;
int Exp_m;
};
lvl lvl1; //nazwa struktury i obiekt tej struktury
//zwracanie lvl'a gracza oraz losowanie lvl'a potworka
int Rat::LVL(Character& Char)
{
uniform_int_distribution<> LvL_M(Char.getLVL(),Char.getLVL()+2); // zakres losowania lvli wyłącznie pomiędzy 1 a 10.
lvl1.LVL_M=LvL_M(gen);
cout<<"\nSzczur ma LVL: "<<lvl1.LVL_M<<endl;
}
void Rat::respawn() //funkcja zwracająca Lvl Potworka- Szczura oraz naliczająca exp za stworka
{
cout<<"UWAGA!To POTWÓR!"<<np<<"!"<<endl;
lvl1.Exp_m=10*lvl1.LVL_M; //exp jak naliczyć należy za szczura
}
void Rat::show() //metoda ukazująca dane potworka
{
cout <<Italic_cyan<<"Nazwa Potwora"<<white<<":" << nazwa <<endl
<<"Poziom Potwora:"<<lvl1.LVL_M<<endl
<<yellow<< "Sila" <<white<<":"<< sila + s1 * lvl1.LVL_M<< endl
<<purple<<"Wytrzymalosc"<<white<<":" << wytrzymalosc + w1 *lvl1.LVL_M<< endl
<<red<<"Zdrowie"<<white<<":"<< zdrowie*lvl1.LVL_M<< endl
<<green<<"Zrecznosc"<<white<<":"<< zrecznosc + zr1 *lvl1.LVL_M<< endl
<<blue<<"Inteligencja"<<white<<":" << inteligencja + intel1 *lvl1.LVL_M<< endl;
np = nazwa;
//dodawanie wartości podstawowej do wylosowanej
sila1=sila + s1*lvl1.LVL_M;
wytrzymalosc1=wytrzymalosc + w1*lvl1.LVL_M;
zdrowie1=zdrowie*lvl1.LVL_M;
zrecznosc1=zrecznosc + zr1*lvl1.LVL_M;
inteligencja1=inteligencja + intel1*lvl1.LVL_M;
wynik = (sila1 + wytrzymalosc1 + zrecznosc1 + inteligencja1) * zdrowie1;
}
//koniec voida
int Rat::getExp_m() const //zwracanie exp'a z potworka
{
return lvl1.Exp_m;
}
int Rat::getScore() const //funkcja zwracająca wartość całkowitą czyli "int"
{
return wynik;
}
string Rat::getName() const //funkcja zwracająca nazwe czyli "string"
{
return nazwa;
}
Monster.h
#pragma once
#include <iostream>
#include "Creature.h"
class Monster : public Creature {
public:
//int exp_m; //exp za potworka
virtual void respawn()=0;
};