Witam. Piszę grę w życie i po paru ostatnich zmianach zaczął mi wyskakiwać segmentation faullt 11 i już naprawdę długi czas dojść nie mogę co poszło nie tak. Może mógłby mi ktoś w tym pomóc, będę bardzo wdzięczna.
#include <ncurses.h>
#include <stdlib.h>
#include <math.h>
#include <unistd.h>
double get_random(double min, double max)
{
return ((double)rand()/RAND_MAX)*(max-min)+min;
}
void rysuj(int x, int y)
{
int i, j;
for(i = 1; i < x - 1; i++)
{
for(j = 1; j < y - 1; j++)
{
if(get_random(0.0, 1.0) <= 0.35) mvaddch(i, j, '*');
else mvaddch(i, j, ' ');
}
}
refresh();
}
void okno()
{
noecho();
initscr();
start_color();
init_pair(1, COLOR_MAGENTA, COLOR_BLUE);
attron(COLOR_PAIR(1));
wbkgd(stdscr, COLOR_PAIR(1));
attron( A_BOLD );
}
char gra(int x, int y, int k, int licz)
{
int i, j, h, a, b;
int arr[25][80];
char c[25][80];
for(h = 0; h < k; h++)
{
for(i = 1; i < x; i++)
{
for(j = 1; j < y; j++)
{
if(c[i][j] == '*') licz--;
for(a = i - 1; a <= i + 1; a++)
{
for(b = j - 1; b <= j + 1; b++)
{
if(c[a][b] == '*') licz++;
}
}
if((licz > 3 || licz < 2) && c[i][j] == '*') arr[i][j]=1;
else if(licz == 3 && c[i][j] == ' ') arr[i][j]=1;
else arr[i][j]=0;
if(c[i][j] == '*' && arr[i][j] == 1) mvaddch(i, j, ' ');
if(c[i][j] == ' ' && arr[i][j] == 1) mvaddch(i, j, '*');
refresh();
sleep(1);
}
}
}
}
int main()
{
int x, y, k, licz;
licz = 0;
okno();
printw("\n\t\t\t Gra w zycie\n");
while(1)
{
printw("\t\tPodaj wymiary planszy gry (max 25 x 80)\n\t\t\twysokosc = ");
scanw("%d", &x);
if(x == false || x>25)
{
printw("\t\t\tWprowadzono niepoprawne dane\n");
continue;
}
else break;
}
while(1)
{
printw("\t\t\t szerokosc = ");
scanw("%d", &y);
if(y == false || y>80)
{
printw("\t\t\tWprowadzono niepoprawne dane\n");
continue;
}
else break;
}
while(1)
{
printw("\t Podaj ilosc krokow, po ktorych program zakonczy dzialanie : ");
scanw("%d", &k);
if(k == false || k<1)
{
printw("\t\t\tWprowadzono niepoprawne dane\n");
continue;
}
else break;
}
getmaxyx(stdscr, LINES, COLS);
refresh();
wclear(stdscr);
refresh();
rysuj(x, y);
gra(x, y, k, licz);
getch();
endwin();
return 0;
}