-
Notifications
You must be signed in to change notification settings - Fork 0
/
global_ruch.cpp
258 lines (250 loc) · 5.8 KB
/
global_ruch.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
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
#include<Windows.h> //smieszna biblioteka Windows do kolorkow
#include<iostream>
#include"global_ruch.h"
using namespace std;
//prawo
void right(int &size, char** &tab, int &x, int &y, int &licznik, int &ruch, bool &mr)
{
bool tmp2 = false, tmp1 = false;
ruch = 0;
while(true) //zeby nie konczyl ruchu po jednym kroku
{
//sprawdzam czy nie mam przeszkody, albo sciany przed soba
if(tab[x][y+1] != 'X' && tab[x][y+1] != '#' && y+1<size )
{
tab[x][y] = '#';
tab[x][y+1] = 'A';
y++; //zmieniam pozycje bohatera
licznik++; //zwiekszam glowny licznik
ruch++; //zwiekszam licznik aktualnego ruchu
}
else
{
cout<<"\n\nGOIN' RIGHT by "<<ruch;
poka_tab(size, tab); //pokazuje ile przeszdlem
cout<<"\nI CANNOT GO MORE!";
if(x==size-1) //sprawdzam czy nie mam ponizej sciany
tmp1 = true; //mam
if(tmp1 == false) //jesli nie mam to
{
//sprawdzam czy nie mam tam przeszkody
if(tab[x+1][y] !='X' && tab[x+1][y] !='#')
{
cout<<"\nI TRY GO DOWN... "; //ide w dol
down(size,tab, x, y, licznik, ruch, mr);
break;
}
}
if(x<=1) //sprawdzam czy nie mam nad soba sciany
tmp2 = true; //mam
if(tmp2 == false) //jesli nie mam to
{
//sprawdzam czy nie ma tam przeszkody
if(tab[x-1][y] !='X' && tab[x-1][y] !='#')
{
cout<<"\nI TRY GO UP!... "; //ide w gore
up(size,tab, x, y, licznik, ruch, mr);
break;
}
}
cout<<"\nDEAD END!! END OF TRIP!";
mr = false; //blokada! - brak mozliwosci ruchu
break; //wyjscie z while(true)
}
}
}
//dol
void down(int &size, char** &tab, int &x, int &y, int &licznik, int &ruch, bool &mr)
{
bool tmp2 = false, tmp1 = false;
ruch=0;
while(true)
{
bool zmiana=false;
if(x+1<size)
{
zmiana = false;
if(tab[x+1][y]!= 'X' && tab[x+1][y]!= '#')
{
zmiana = true;
tab[x][y] = '#';
tab[x+1][y] = 'A';
x++;
licznik++;
ruch++;
}
}
if(zmiana == false)
{
cout<<"\n\nGOIN' DOWN by "<<ruch;
poka_tab(size, tab);
cout<<"\nI CANNOT GO MORE!";
if(y<=1)
tmp1 = true;
if(tmp1 == false)
{
if(tab[x][y-1] != 'X' && tab[x][y-1] != '#')
{cout<<"\nI TRY GO LEFT... ";
left(size,tab, x, y, licznik, ruch, mr);
break;
}
}
if(y==size-1)
tmp2 = true;
if(tmp2 == false)
{
if(tab[x][y+1] != 'X' && tab[x][y+1] != '#')
{
cout<<"\nI TRY GO RIGHT... ";
right(size,tab, x, y, licznik, ruch, mr);
break;
}
}
cout<<"\nDEAD END!! END OF TRIP!";
mr = false;
break;
}
}
}
//lewo
void left(int &size, char** &tab, int &x, int &y, int &licznik, int &ruch, bool &mr)
{
bool tmp2=false, tmp1=false;
ruch=0;
while(true)
{
if(tab[x][y-1] != 'X' && tab[x][y-1] != '#' && y-1>=0)
{
tab[x][y] = '#';
tab[x][y-1] = 'A';
y--;
licznik++;
ruch++;
}
else
{
cout<<"\n\nGOIN' LEFT by "<<ruch;
poka_tab(size, tab);
cout<<"\nI CANNOT GO MORE!";
if(x<=1)
tmp2 = true;
if(tmp2 == false)
{
if(tab[x-1][y] !='X' && tab[x-1][y] !='#')
{
cout<<"\nI TRY GO UP... ";
up(size,tab, x, y, licznik, ruch, mr);
break;
}
}
if(x==size-1)
tmp1 = true;
if(tmp1 == false)
{
if(tab[x+1][y] !='X' && tab[x+1][y] !='#')
{
cout<<"\nI TRY GO DOWN... ";
down(size,tab, x, y, licznik, ruch, mr);
break;
}
}
cout<<"\nDEAD END!! END OF TRIP!";
mr = false;
break;
}
}
}
//gora
void up(int &size, char** &tab, int &x, int &y, int &licznik, int &ruch, bool &mr)
{
bool tmp1 = false;
ruch=0; //zerowanie licznika dla nowego ruchu
while(true) //zeby sie ruszal w gore do oporu
{
//nie kazda przeszkoda ma pozycje sciany wiec
//cos tam nie dzialalalo przy odejmowaniu
//i robila sie nieskoczona petla- flagi to rozwiazaly sprawe
//podobnie przy ruchu w dol
bool zmiana=false;
if(x-1>=0)
{
zmiana = false;
if(tab[x-1][y] != 'X' && tab[x-1][y] != '#')
{
zmiana=true; //potwierdzam to ze ruszylem sie do gory
tab[x-1][y] = 'A';
tab[x][y]= '#';
x--; //zmiana pozycji w gore
licznik++;
ruch++;
}
}
//jesli nie ruszyl sie do gory tzn ze trafil na przeszkode
if(zmiana ==false)
{
cout<<"\n\nGOIN' UP by "<<ruch;
poka_tab(size, tab);
cout<<"\nI CANNOT GO MORE!";
if(y==size-1) //nie mam sciany na prawo?
tmp1 = true; //masz
if(tmp1 == false) //jesli nie sciana
{ //to moze przeszkoda?
if(tab[x][y+1] != 'X' && tab[x][y+1] != '#')
{
cout<<"\nI TRY GO RIGHT... "; //czysto, idz
right(size,tab, x, y, licznik, ruch, mr);
break;
}
}
if(tab[x][y-1] != 'X' && tab[x][y-1] != '#')
{
cout<<"\nI TRY GO LEFT... ";
left(size,tab, x, y, licznik, ruch, mr);
break;
}
cout<<"\nDEAD END!! END OF TRIP!";
mr = false; //blokada. nie da sie w gore, nie da sie w prawo/lewo
break;
}
}
}
//wswietlanie tablicy
void poka_tab(int size, char **tab)
{
//do ustawienia kolorkow
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
cout<<"\n/";
for(int i=0; i<size; i++)
cout<<"-";
cout<<"\\\n";
for(int i=0; i<size; i++)
{
cout<<"|";
for(int j=0; j<size; j++)
{
if(tab[i][j] == '#')
{
SetConsoleTextAttribute( hOut, 11); //cyan
cout<<tab[i][j];
}
else if(tab[i][j] == 'A')
{
SetConsoleTextAttribute( hOut, 10); //neongreen
cout<<tab[i][j];
}
else if(tab[i][j] == 'X')
{
SetConsoleTextAttribute( hOut, 19 ); //lightbluewithdark
cout<<tab[i][j];
}
else
cout<<tab[i][j];
SetConsoleTextAttribute( hOut, 7); //console grey
}
cout<<"|\n";
}
cout<<"\\";
for(int i=0; i<size; i++)
cout<<"-";
cout<<"/";
}