Witam
Mam problem z poruszaniem się węża, po naciśnięciu strzałki tworzy się tylko jeden element, a poprzedni się nie zeruje. Wiem, że dużo rzeczy jeszcze nie jest napisane, oraz dużo rzeczy nie wykorzystanych, jednak na razie chciałbym aby działało samo poruszanie się po planszy. Proszę o pomoc.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#define WYS 50 // 296 do gory , 304 dol, 299 lewo, 301 prawo
#define SZER 50
typedef struct tab{
int value;
struct tab *ogon;
} Tab;
int CreateMap(Tab ***tab);
void Show(Tab **tab);
int Odczytaj(int *temp);
void Losuj(Tab **tab, int zebrano);
void Ruch(Tab **tab, int odczytaj, Tab *glowa, int temp);
int main(){
int temp;
int err, flag = 0, x, y, zebrano = 0, odczytaj;
Tab **tab, *glowa;
srand(time(NULL));
if (CreateMap(&tab)){
fprintf(stderr, "Blad z alokacja");
return 1;
}
x = rand() % SZER;
y = rand() % WYS;
tab[y][x].value = 2;
tab[20][20].value = 1;
glowa = &tab[20][20];
while(temp != 3){
odczytaj = Odczytaj(&temp);
system("cls");
Losuj(tab, zebrano);
Ruch(tab, odczytaj, glowa, temp);
Show(tab);
Sleep(100);
printf("-------------------------");
}
return 0;
}
int CreateMap(Tab ***tab){
int i, j, x, y;
//ALOKACJA TAB
*tab = (Tab**)malloc(WYS * sizeof(Tab*));
if (*tab == NULL){
fprintf(stderr, "Blad alokacji!");
return 1;
}
for (i = 0; i < WYS; i++){
(*tab)[i] = (Tab*)malloc(SZER * sizeof(Tab));
if ((*tab)[i] == NULL){
fprintf(stderr, "Blad alokcji %d wiersza", i);
for (j = 0; j < i; j++)
free((*tab)[j]);
return 1;
}
}
for (i = 0; i < WYS; i++){
for (j = 0; j < SZER; j++){
(*tab)[i][j].ogon = NULL;
(*tab)[i][j].value = 0;
}
}
return 0;
}
void Show(Tab **tab){
int i, j;
for (i = 0; i < WYS; i++){
for (j = 0; j < SZER; j++){
if (tab[i][j].value == 0)
printf(" ");
else
printf("*");
}
printf("\n");
}
}
int Odczytaj(int *temp){
if(*temp = getch()){
if (*temp == 224)
*temp += getch();
return 1;
}
else
return 0;
}
void Losuj(Tab **tab, int zebrano){
int x, y;
if (zebrano){
x = rand() % SZER;
y = rand() % WYS;
tab[y][x].value = 2;
zebrano = 0;
}
}
void Ruch(Tab **tab, int odczytaj, Tab *glowa, int temp){
int i, j;
if (odczytaj){
if (temp == 296){//GORA
glowa->ogon = NULL;
glowa->value = 0;
glowa = glowa - SZER;
glowa->value = 1;
glowa->ogon = NULL;
}
else if (temp == 304){//DOL
glowa->ogon = NULL;
glowa->value = 0;
glowa = glowa + SZER;
glowa->value = 1;
glowa->ogon = NULL;
}
else if (temp == 299){//LEWY
glowa->ogon = NULL;
glowa->value = 0;
glowa = glowa - 1;
glowa->value = 1;
glowa->ogon = NULL;
}
else if (temp == 301){//PRAWY
glowa->ogon = NULL;
glowa->value = 0;
glowa = glowa + 1;
glowa->value = 1;
glowa->ogon = NULL;
}
}
}