-
Notifications
You must be signed in to change notification settings - Fork 0
/
casella.cpp
121 lines (90 loc) · 2.69 KB
/
casella.cpp
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
//Andrea Zorzi 561818 casella.cpp
#include "casella.h"
CasellaBase::CasellaBase(int n,const ImpostazioniGioco &im,GiocatoriBase*g):numero(n),impo(im),gio(g){}
CasellaBase::~CasellaBase(){};
int CasellaBase::getNumeroCasella()const{
return numero;
}
int CasellaBase::mossa(int spostamento){//gestione mossa da una casella base
GiocatoriOro*go=dynamic_cast<GiocatoriOro*>(gio);
if(go){
//si deve considerare l'oro attuale del giocatore
int rallentamento=0;
int rapp=(go->getPunteggioGiocatore(gio->getGiocatoreDiTurno()))/go->getRapportoOro();
if(rapp!=0){
rallentamento=rapp;
if(spostamento<=rallentamento)
spostamento=0;
else
spostamento=spostamento-rallentamento;
}
}
int pos_casella;
pos_casella=numero+spostamento;
if(pos_casella>(impo.getNumeroCaselle())){
int scarto=pos_casella-(impo.getNumeroCaselle());
int diff=(impo.getNumeroCaselle())-numero;
pos_casella=numero+(diff-scarto);
}
return pos_casella;
}
CasellaForza::CasellaForza(int n,const ImpostazioniGioco &im,GiocatoriBase*g):CasellaBase(n,im,g){
valoreForza=getRand(150);
}
int CasellaForza::rapporto_forza=40;
int CasellaForza::getRapportoForza()const{
return rapporto_forza;
}
int CasellaForza::getForzaCasella()const{
return valoreForza;
}
void CasellaForza::acquistaForza(){
valoreForza=0;
}
int CasellaForza::mossa(int spostamento){//gestione mossa da una casella forza(effetto accellerativo istantaneo e non cumulativo)
int incremento=0;
int rapp=valoreForza/rapporto_forza;
if(valoreForza!=0){
acquistaForza();
if(rapp!=0)
incremento=rapp;
spostamento=incremento;
}
int pos_casella=CasellaBase::mossa(spostamento);
return pos_casella;
}
CasellaOro::CasellaOro(int n,const ImpostazioniGioco &im,GiocatoriBase*g):CasellaBase(n,im,g){
dobloniOro=getRand(50);
}
int CasellaOro::getOroCasella()const{
return dobloniOro;
}
void CasellaOro::acquistaOro(){
dobloniOro=0;
}
int CasellaOro::mossa(int spostamento){//gestione mossa da una casella oro
GiocatoriOro*go=dynamic_cast<GiocatoriOro*>(gio);
int pos_casella=getNumeroCasella();
if(dobloniOro!=0){
if(go){
go->setPunteggio(dobloniOro);
}
acquistaOro();
}
else{
pos_casella=CasellaBase::mossa(spostamento);
}
return pos_casella;
}
CasellaForzaOro::CasellaForzaOro(int n,const ImpostazioniGioco &im,GiocatoriBase*g):CasellaBase(n,im,g),CasellaForza(n,im,g),CasellaOro(n,im,g){}
int CasellaForzaOro::mossa(int spostamento){//gestione mossa da una casella forza-oro
GiocatoriOro*go=dynamic_cast<GiocatoriOro*>(gio);
if(getOroCasella()!=0){
if(go){
go->setPunteggio(getOroCasella());
}
acquistaOro();
}
int pos_casella=CasellaForza::mossa(spostamento);
return pos_casella;
}