SHOW:
|
|
- or go back to the newest paste.
1 | #include <iostream> | |
2 | #include<stdio.h> | |
3 | using namespace std; | |
4 | ||
5 | const int rozmiar = 20; | |
6 | ||
7 | void wyswietl(int tab[rozmiar][rozmiar]) | |
8 | { | |
9 | for (int i = 0; i < rozmiar; i++) | |
10 | { | |
11 | for (int j = 0; j < rozmiar; j++) | |
12 | { | |
13 | if (tab[i][j] == 0) | |
14 | { | |
15 | cout << " "; | |
16 | } | |
17 | else | |
18 | { | |
19 | cout << "X"; | |
20 | } | |
21 | } | |
22 | cout << endl; | |
23 | } | |
24 | } | |
25 | ||
26 | int policz_sasiadow(int tab[rozmiar][rozmiar], int i, int j) | |
27 | { | |
28 | int sasiedzi = 0; | |
29 | int gora; | |
30 | int dol; | |
31 | int srodekGoraDol; | |
32 | int prawo; | |
33 | int lewo; | |
34 | int srodekPrawoLewo; | |
35 | ||
36 | if (i == 0) | |
37 | { | |
38 | gora = rozmiar - 1; | |
39 | srodekGoraDol = 0; | |
40 | dol = 1; | |
41 | } | |
42 | else if (i == rozmiar - 1) | |
43 | { | |
44 | gora = rozmiar - 2; | |
45 | srodekGoraDol = rozmiar - 1; | |
46 | dol = 0; | |
47 | } | |
48 | else | |
49 | { | |
50 | gora = i - 1; | |
51 | srodekGoraDol = i; | |
52 | dol = i + 1; | |
53 | } | |
54 | if (j == 0) | |
55 | { | |
56 | lewo = rozmiar - 1; | |
57 | srodekPrawoLewo = 0; | |
58 | prawo = 1; | |
59 | } | |
60 | else if (j == rozmiar - 1) | |
61 | { | |
62 | lewo = rozmiar - 2; | |
63 | srodekPrawoLewo = rozmiar - 1; | |
64 | prawo = 0; | |
65 | } | |
66 | else | |
67 | { | |
68 | lewo = j - 1; | |
69 | srodekPrawoLewo = j; | |
70 | prawo = j + 1; | |
71 | } | |
72 | ||
73 | sasiedzi += tab[gora][lewo]; | |
74 | sasiedzi += tab[srodekGoraDol][lewo]; | |
75 | sasiedzi += tab[dol][lewo]; | |
76 | sasiedzi += tab[gora][srodekPrawoLewo]; | |
77 | sasiedzi += tab[dol][srodekPrawoLewo]; | |
78 | sasiedzi += tab[gora][prawo]; | |
79 | sasiedzi += tab[srodekGoraDol][prawo]; | |
80 | sasiedzi += tab[dol][prawo]; | |
81 | return sasiedzi; | |
82 | } | |
83 | ||
84 | ||
85 | void pokolenie(int tab[rozmiar][rozmiar]) | |
86 | { | |
87 | ||
88 | int nowa_tab[rozmiar][rozmiar]={0}; | |
89 | ||
90 | for (int i = 0; i < rozmiar; i++) | |
91 | { | |
92 | for (int j = 0; j < rozmiar; j++) | |
93 | { | |
94 | int sasiedzi = policz_sasiadow(tab, i, j); | |
95 | if (tab[i][j] == 1 && sasiedzi < 2) | |
96 | { | |
97 | nowa_tab[i][j] = 0; | |
98 | } | |
99 | else if (tab[i][j] == 1 && sasiedzi > 3) | |
100 | { | |
101 | nowa_tab[i][j] = 0; | |
102 | } | |
103 | else if (tab[i][j] == 1) | |
104 | { | |
105 | nowa_tab[i][j] = 1; | |
106 | } | |
107 | else if (tab[i][j] == 0 && sasiedzi == 3) | |
108 | { | |
109 | nowa_tab[i][j] = 1; | |
110 | } | |
111 | } | |
112 | } | |
113 | ||
114 | for (int i = 0; i < rozmiar; i++) | |
115 | { | |
116 | for (int j = 0; j < rozmiar; j++) | |
117 | { | |
118 | tab[i][j] = nowa_tab[i][j]; | |
119 | } | |
120 | } | |
121 | } | |
122 | ||
123 | void dodaj_populacje(int tab[rozmiar][rozmiar], int ilosc) | |
124 | { | |
125 | for (int i = 0; i < ilosc; i++) | |
126 | { | |
127 | tab[rand() % rozmiar][rand() % rozmiar] = 1; | |
128 | } | |
129 | } | |
130 | ||
131 | ||
132 | void graj_dzwiek() | |
133 | { | |
134 | cout<<"\a"; | |
135 | } | |
136 | ||
137 | ||
138 | int policz_populacje(int tab[rozmiar][rozmiar]) | |
139 | { | |
140 | int rozmiarPopulacji = 0; | |
141 | for (int i = 0; i < rozmiar; i++) | |
142 | { | |
143 | for (int j = 0; j < rozmiar; j++) | |
144 | { | |
145 | rozmiarPopulacji += tab[i][j]; | |
146 | } | |
147 | } | |
148 | return rozmiarPopulacji; | |
149 | } | |
150 | ||
151 | ||
152 | void zmiana_koloru(int kolor) | |
153 | { | |
154 | if (kolor == 0) | |
155 | { | |
156 | printf("\033[34m"); | |
157 | printf("\033[41m"); | |
158 | } | |
159 | else if (kolor == 1) | |
160 | { | |
161 | printf("\033[31m"); | |
162 | printf("\033[44m"); | |
163 | } | |
164 | else if (kolor == 2) | |
165 | { | |
166 | printf("\033[35m"); | |
167 | printf("\033[40m"); | |
168 | } | |
169 | else if (kolor == 3) | |
170 | { | |
171 | printf("\033[30m"); | |
172 | printf("\033[45m"); | |
173 | } | |
174 | } | |
175 | int main() | |
176 | { | |
177 | int plansza[rozmiar][rozmiar] = { 0 }; | |
178 | int nrPokolenia = 0; | |
179 | int liczbaPopulacji = 0; | |
180 | ||
181 | plansza[9][8] = 1; | |
182 | plansza[9][10] = 1; | |
183 | plansza[10][10] = 1; | |
184 | plansza[10][9] = 1; | |
185 | plansza[11][9] = 1; | |
186 | printf("\033[32m"); | |
187 | printf("\033[47m"); | |
188 | ||
189 | int wybor; | |
190 | while (true) | |
191 | { | |
192 | printf("\033[H\033[J"); | |
193 | ||
194 | ||
195 | liczbaPopulacji = policz_populacje(plansza); | |
196 | cout << "Numer pokolenia: " << nrPokolenia << " ilosc osobnikow: " << liczbaPopulacji << endl; | |
197 | wyswietl(plansza); | |
198 | cout << endl << endl; | |
199 | cout << "Co chcesz zrobic?" << endl; | |
200 | cout << "1-Kolejne pokolenie" << endl; | |
201 | cout << "2-Zakoncz symulacje" << endl; | |
202 | cout << "3-Zmien kolor" << endl; | |
203 | cout << "4-Dodaj populacje" << endl; | |
204 | cout << "5-Zagraj dzwiek pokolenia" << endl; | |
205 | ||
206 | ||
207 | ||
208 | ||
209 | cin >> wybor; | |
210 | switch (wybor) | |
211 | { | |
212 | case 1 : | |
213 | nrPokolenia++; | |
214 | pokolenie(plansza); | |
215 | break; | |
216 | case 2: | |
217 | exit(0); | |
218 | break; | |
219 | case 3: | |
220 | zmiana_koloru(rand() % 4); | |
221 | break; | |
222 | case 4: | |
223 | int dodanaPopulacja; | |
224 | cout << "Ile populacji chcesz dodac?" << endl; | |
225 | cin >> dodanaPopulacja; | |
226 | dodaj_populacje(plansza, dodanaPopulacja); | |
227 | liczbaPopulacji = policz_populacje(plansza); | |
228 | break; | |
229 | case 5: | |
230 | graj_dzwiek(); | |
231 | break; | |
232 | ||
233 | ||
234 | default: | |
235 | cout << "Blad symulacji, nieznane polecenie" << endl; | |
236 | break; | |
237 | ||
238 | ||
239 | } | |
240 | } | |
241 | ||
242 | } |