-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathplayer.cpp
71 lines (64 loc) · 1.98 KB
/
player.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
#include "player.h"
#include <cstdlib>
#include <ctime>
// zapisywanie danych gracza do strumienia
ostream & operator<<(ostream & os, const Player & p){
os << p.name << ' ' << p.moves << ' ' <<
p.hits << ' ' << p.misses << ' ' << p.ships << '\n';
os << p.my << p.enemy;
return os;
}
// wczytywanie danych gracza ze strumienia
istream & operator>>(istream & is, Player & p){
is >> p.name >> p.moves >> p.hits >> p.misses >> p.ships;
is >> p.my >> p.enemy;
return is;
}
// ruch czlowieka
int HumanPlayer::move(){
int x, y;
// pokaaz info gracza
cout << "Ruch gracza " + name << '\n';
cout << "Trafien: " << hits << ", straty = " << 20 - ships << "\n\n";
cout << "Twoje statki:\n\n";
cout << my << '\n';
cout << "\n\nTwoje posuniecia:\n\n";
cout << enemy << '\n';
// pytaj o wspolrzedne pola
do {
cout << "Podaj wspolrzedne(x y): ";
if(!(cin >> x >> y)){ // podano inny znak niz cyfre
cin.clear(); // czyscimy strumien
cin.ignore(); // ignorujemy reszte znakow
return -1; // informacja o przerwaniu gry
}
// powtarzaj dotad az gracz wprowadzi poprawne pole
} while(!(x < 10 && x >= 0 && y < 10 && y >=0)
|| enemy.get(x * 10 + y) == '0' || enemy.get(x * 10 + y) == 'X');
++moves; // zwieksz liczbe ruchow
cout << '\n';
return x * 10 + y; // zwracamy numer pola
}
// ruch gracza komputerowego
int ComputerPlayer::move(){
srand(time(0)); // nowe ziarno losowosci
int x;
std::cout << enemy << '\n';
do {
x = rand() % 100;
// losuj az trafi na niesprawdzone pole
} while(enemy.get(x) == '0' || enemy.get(x) == 'X');
++moves; // zwieksz liczbe ruchow
return x; // zwroc numer pola
}
// sprawdzanie pola przeciwnika
bool Player::check(int t) {
if(my.get(t) == '#'){ // jesli trafiono statek
my.set(t, 'X'); // oznaczamy 'trafienie'
--ships; // zmniejsz liczbe statkow
return true; // true - trafiony
} else {
my.set(t, '0'); // oznaczamy 'pudlo'
}
return false; // false - pudlo
}