Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Gra w życie - program w c++

Ostatnio zmodyfikowano 2018-11-23 19:43
Autor Wiadomość
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. :)
P-172906
qwertyui
» 2018-11-21 15:31:19
Wedlug mnie najlepiej bedzie zmienic pozycje kursora i dopisac na koncu kazdej linii planszy znak "|", kod:

C/C++
#include <iostream>
#include <ctime>
#include <windows.h>

using namespace std;

const int width = 60;
const int height = 20;

void gotoxy( int x, int y ) //funkcja umozliwiajaca zmiane aktualnego polozenia kursora (tekst)
{
    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;
    //rysowanie bocznej krawedzi
    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;
}
P-172907
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.
C/C++
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.
P-172909
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 :)
P-172961
« 1 »
  Strona 1 z 1