Gra w życie - program w c++
Ostatnio zmodyfikowano 2018-11-23 19:43
obeeey Temat założony przez niniejszego użytkownika |
Gra w życie - program w c++ » 2018-11-21 08:58:55 Cześć, muszę stworzyć Conway's game of life, tyle, że z moimi zdolnościami w c++ musi to być bardzo proste, bez użycia struktur czy klas najlepiej. Problem zaczyna się już w stworzeniu samej ramki dla planszy - nie wiem jak dodać znak "|" po prawej stronie, by jakby "zamykał" spójnie całą planszę. Następnie... nie wiem nawet jak zapisać sprawdzanie ilości sąsiadów w tablicy, tzn. jak sprawdzić czy dookoła jednego pola są trzy znaki "o" oznaczające w tym przypadku życie? Mam nadzieję, że sensownie objaśniłam problem. Oto kod: #include <iostream> #include <ctime> using namespace std;
const int width = 60; const int height = 20;
void generujpole(char pole[][height]) { for(int i=0; i<width; i++) { for(int j=0; j<height; j++) { int maluj = rand()%100; if(maluj < 90) pole[i][j] = ' '; else pole[i][j] = 'o'; } } }
void wypiszpole(char pole[][height]) { cout <<endl; cout<< " GRA W ZYCIE"; cout << endl << endl; cout << "+------------------------------------------------------------+"<<endl; for(int i=0; i<height; i++) { cout << "|"; for(int j=0; j<width; j++) { cout << pole[i][j]; } cout << endl; } cout << "+------------------------------------------------------------+"<<endl; }
int main() { srand(time(NULL)); char plansza[60][20];
generujpole(plansza); wypiszpole(plansza);
return 0; }
Proszę o pomoc. :) |
|
qwertyui |
» 2018-11-21 15:31:19 Wedlug mnie najlepiej bedzie zmienic pozycje kursora i dopisac na koncu kazdej linii planszy znak "|", kod: #include <iostream> #include <ctime> #include <windows.h>
using namespace std;
const int width = 60; const int height = 20;
void gotoxy( int x, int y ) { COORD c1; c1.X = x; c1.Y = y; SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), c1 ); }
void generujpole( char pole[][ height ] ) { for( int i = 0; i < width; i++ ) { for( int j = 0; j < height; j++ ) { int maluj = rand() % 100; if( maluj < 90 ) pole[ i ][ j ] = ' '; else pole[ i ][ j ] = 'o'; } } }
void wypiszpole( char pole[][ height ] ) { cout << endl; cout << " GRA W ZYCIE"; cout << endl << endl; cout << "+------------------------------------------------------------+" << endl; for( int i = 0; i < height; i++ ) { cout << "|"; for( int j = 0; j < width; j++ ) { cout << pole[ i ][ j ]; } cout << endl; } cout << "+------------------------------------------------------------+" << endl; for( int i = 4; i < height + 4; i++ ) { gotoxy( width + 1, i ); cout << "|"; } gotoxy( 0, height + 5 ); cout << "o <--- aktualna pozycja kursora"; cin.get(); }
int main() { srand( time( NULL ) ); char plansza[ 60 ][ 20 ]; generujpole( plansza ); wypiszpole( plansza ); return 0; }
|
|
pekfos |
» 2018-11-21 18:41:31 najlepiej bedzie zmienic pozycje kursora i dopisac na koncu kazdej linii planszy znak "|" |
A najprościej byłoby to dopisać na końcu każdej linii. cout << "|"; for( int j = 0; j < width; j++ ) { cout << pole[ i ][ j ]; }
cout << '|' << endl;
Następnie... nie wiem nawet jak zapisać sprawdzanie ilości sąsiadów w tablicy, tzn. jak sprawdzić czy dookoła jednego pola są trzy znaki "o" oznaczające w tym przypadku życie? |
Zapewne wystarczy sprawdzić co jest na pozycjach o indeksach mniejszych/większych o jeden. |
|
obeeey Temat założony przez niniejszego użytkownika |
» 2018-11-23 19:43:06 @pekfos, dziękuję za odpowiedź. Faktycznie przeoczyłam możliwość tak łatwego zamknięcia tej ramki. Co do reszty, niestety nie mam głowy jak się za to zabrać by przeszukać tę tablicę i sumować odpowiednie dane... Byłbyś w stanie podać mi jakoś łopatologicznie zamysł na to? Edit: Problem rozwiązany, zamykam ten temat :) |
|
« 1 » |