-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPokemon.cpp
More file actions
158 lines (95 loc) · 3.58 KB
/
Copy pathPokemon.cpp
File metadata and controls
158 lines (95 loc) · 3.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
#include <iostream>
/*Si vuole scrivere un programma che simuli la battaglia tra Pokemon.
Un Pokemon è caratterizzato da un nome, da una barra della vita (HP), da un attacco base e da un attacco speciale.
Gli attacchi speciali possono essere di tipo:
- "Fuoco" (moltiplica il danno base per 1.2),
- "Acqua" (moltiplica il danno base per 1.2 ),
- "Erba" (moltiplica il danno base per 1.2).
Un Pokemon viene sconfitto se il suo HP è inferiore o uguale a zero.
Un Pokemon può attaccare un altro Pokemon o con un attacco base o con un attacco speciale (rispettivamente, subire danno da attacco base o da attacco speciale).
Si fornisca la possibilità di confrontare l' HP di due Pokemon con l'operatore ==.
Si fornisca la possibilità di stampare a schermo con l'operatore << le informazioni di un Pokemon.
Si fornisca la possibilità di utilizzare l'operatore -= e /= per simulare l'attacco base e speciale subito, rispettivamente e += e *= per simulare l'attacco base e speciale effettuato, rispettivamente.
Esempio:
p -= p1 //riduce l' HP di p del danno base di p1
p += p1 //infligge a p1 il danno base di p
p /= p1 //riduce l' HP di p del danno speciale di p1
p *= p1 //infligge a p1 il danno speciale di p
Si creino due Pokemon a scelta e si effettuino tre attacchi, di cui uno base e uno speciale.*/
using namespace std;
class printable{ // classe astratta
virtual void print() = 0;
};
class att_speciale {
private:
double moltiplicatore;
protected:
att_speciale(double moltiplicatore) : moltiplicatore(moltiplicatore) {}
public:
const double& get_moltiplicatore() const {
return moltiplicatore;
}
};
class att_fuoco : public att_speciale{
public:
att_fuoco() : att_speciale(1.6) {}
};
class att_acqua : public att_speciale{
public:
att_acqua() : att_speciale(1.4) {}
};
class att_erba : public att_speciale{
public:
att_erba() : att_speciale(1.2) {}
};
class Pokemon : printable {
private:
string nome;
double HP;
double att_bs;
att_speciale* attacco_speciale;
public:
Pokemon(string nome, double HP, double att_bs, att_speciale* attacco_speciale) : nome(nome), HP(HP), att_bs(att_bs), attacco_speciale(attacco_speciale) {}
// void att_speciale(Pokemon*) {}
//// void att_bs(Pokemon*) {}
const void set_nome(string nome) {
this->nome = nome;
}
const void set_HP(double HP) {
this->HP = HP;
}
const void set_att_bs(double att_bs) {
this->HP = HP;
}
const string& get_nome() {
return nome;
}
const double& get_HP() {
return HP;
}
void print() override {
cout << "Nome: " << nome << " HP: " << HP << " att_bs "<< att_bs << endl;
}
};
int operator == (Pokemon& p, Pokemon& p1) {
return (p.get_HP() == p1.get_HP());
}
ostream& operator << (ostream& out, Pokemon& p){
out<< p.get_nome() << " " << p.get_HP();
return out;
}
int main(){
size_t size = 3;
att_speciale** attacchi_speciali = new att_speciale*[size];
attacchi_speciali[0] = new att_fuoco();
attacchi_speciali[1] = new att_acqua();
attacchi_speciali[2] = new att_erba();
/**for(size_t i = 0; i<size; i++){
cout<<attacchi_speciali[i]->get_moltiplicatore() << endl;
}
return 0;*/
Pokemon p("charizard", 10.0, 3, attacchi_speciali[0]);
Pokemon p1("blastoise", 12.0, 2, attacchi_speciali[1]);
p.print();
cout<<p;
}