-
Notifications
You must be signed in to change notification settings - Fork 0
/
Prisoner.cpp
148 lines (104 loc) · 2.55 KB
/
Prisoner.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
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
#include "Prisoner.h"
#include <stdlib.h>
#include <stdio.h>
#include <fstream>
#include <sstream>
long long int Prisoner::lengthTunnel = 0;
Prisoner::Prisoner()
{
// Generowanie imienia
// _name = Knowledge::name();
// Przyznajemy cechy
_determination = rand() % 10 + 1;
_force = rand() % 10 + 1;
// Zerujemy
_isKey = false;
_isTunnel = false;
_isFree = false;
lengthTunnel = 0;
_isAlive =true ;
srand(time(NULL));
}
void Prisoner::stealKey()
{
// Jezeli los usmiechnie sie to wieznia
//i przyjmie taka sama wartosc jak zmienna steal
// zadanie zostanie wykonanne
int steal = rand() % 1100 + 1;
int fate = rand() % 1100 + 1 ;
// Zwroci wartosc true
if(steal==fate) _isKey = true ;
else _isKey = false ;
}
bool Prisoner::checkStatus()
{
// Funkcja sprawdza czy zadania zostaly wykonanne
// i daje wynik o statusie ucieczki
if( isKey() ==true && isTunnel() == true ){
_isFree = true ;
return true ; // Mozna uciekac
}
else{
_isFree = false ;
return false ;
} // Zadania nie zostaly wykonane
}
bool Prisoner::isKey()
{
return _isKey ;
}
bool Prisoner::isAlive()
{
return _isAlive ;
}
bool Prisoner::isTunnel()
{
long long int l = currentlength();
// Sprawdza czy wykopany tunnel ma odpowiednia dlugosc
if( l >= 10000) return true;
else return false ;
}
void Prisoner::showAdvance ()
{
long long int l = currentlength() ;
if( _isFree == true ){
printf("Wszystkie warunki zostay spenione !!! UCIECZKA\n");
}
else{
if(isTunnel() == false) printf("Dlugosc tunelu wynosi : %lld \n" , l);
else printf("Dlugosc tunelu jest wystarczajaca .\n");
printf("Zdobycie klucza : ");
if(isKey()==true) printf("tak\n") ;
else printf("nie\n");
}
}
//////////////////////////////////
void Prisoner::digTunnel ( )
{
//printf("Kopanie Tunelu :\n");
//static long long int l = currentlength () ;
if( isTunnel() == false)
{
// Wyliczamy iloczyn sily
float factor = _determination * _force ;
float badLuck = 0 ;
do{
// Wyliczamy ilocyzn pecha i sytuacji wiezenia czy ma szanse na powodzenie akcji
badLuck = 0 ;
badLuck = ( rand()% 100 + 1 );// * Knowledge::chanceToFailure( );
if( badLuck > 80 ) break ; // Przypadek uniemozliwiajacy kopanie
int x = ( rand()% 10 + 1 );
lengthTunnel += _determination * x ;
}while( factor > badLuck);
}
}
void Prisoner::die()
{
_isAlive = false;
}
bool Prisoner::willDie()
{
float chanceToDie = Knowledge::chanceToDie();
float fate = (rand() % 1000000) / 1000000.;
return !_isAlive || fate < chanceToDie;
}