Witam,
napisałem funkcję która służy do wyboru gracza w moim programie, powinna ona zwracać wskaźnik na strukturę z danymi gracza. Jednak mam pewien problem, funkcja New_Player zwraca listę z wskaźnikiem na strukturę nowego gracza i wszystko niby jest dobrze ale gdy program dojdzie do momentu, że powinien wyświetlić nazwę gracza aby móc go wybrać, string z nazwą gracza zamienia się na jakieś śmiecie, a gdy klikniemy w jakąś linijkę z pustym miejscem, co powoduje, że cała pętla przelatuje jeszcze raz cała struktura z nowym graczem zostaje wyczyszczona.
Używam biblioteki Allegro.
Player *Player_List(BITMAP *plist)
{
int i,k,j,loop,n,l,y;
Player *list = NULL,*tmp,*tmp2 = NULL;
list = Make_List(list);
loop = k = j = n = l = 0;
tmp = list;
while(loop != END)
{
j = 0;
blit(plist,screen,0,0,0,0,SIZE_X,SIZE_Y);
if(n != 0)
list = Go_To_Player(list,n);
y = 210;
tmp = list;
for(i=0;i<10;i++)
{
if(list != NULL)
{
textprintf(screen,font,20,y,GREEN,"%d. %s.",i+1,(*list).name);
list = (*list).next;
}
else
textprintf(screen,font,20,y,GREEN,"%d. ------------.",i+1);
y = y + 30;
}
if(k == 10 && (*list).next != NULL)
{
textprintf(screen,font,20,y,GREEN,"Nastepne");
k = 1;
}
if(n > 0)
{
textprintf(screen,font,20,y,GREEN,"Poprzednie");
if(k == 1)
k = 3;
else
k= 2;
}
list = tmp;
i = 0;
while(j == 0)
{
if(mouse_b == 0 && i != 1)
i = 1;
if(mouse_b == Left_Click && i == 1)
{
i = 0;
j++;
l = Check_Menu6(mouse_x,mouse_y,k);
if(l > 0 && l < 10)
{
tmp = Go_To_Player(list,l-1);
if(tmp != NULL)
loop = END;
}
else
{
switch(l)
{
case 11:
list = New_Player(list);
break;
case 12:
n = n + 10;
break;
case 13:
n = n + 10;
break;
default:
j = 0;
break;
}
}
}
}
}
Save_Player(list);
Delete_Player(list);
return tmp;
}
edit:
Dodam jeszcze, że dzieje się to podczas wykonywania się funkcji blit a gdy usunę tę funkcje to dzieje się podczas textprintf.