Witam!
Chciałem napisać grę typu układanka, czyli mamy tablice 3x3 i jedno puste miejsce którym ruszamy by ułożyć liczby w kolejności od 1 do 8. Wszystko działało całkiem fajnie gdy na rozmieszczenie elementów było stałe, jednakże problem zaczął się gdy chciałem zrobić losowe rozmieszczenie elementów. Nie wiem dlaczego ale teraz zamiast spritów mam całe czarne ekran, jak gdyby wgl. nie czytał pliku. Dodam, że programuje na Visual Studio 2013 i projekt mam odpowiednio skonfigurowany do działania na bibliotece SDL.
Z góry dziękuje za pomoc.
#include<SDL.h>
#include<stdio.h>
#include<time.h>
SDL_Surface * ekran = NULL;
SDL_Surface * obraz = NULL;
SDL_Rect sprst[9];
SDL_Rect dprst[9];
SDL_Event zdarzenie;
int CzyBylaPowtorzona(int liczba, int tablica[], int indeks)
{
for (int i = 0; i < indeks; i++)
{
if (tablica[i] == liczba) return 1;
}
return 0;
}
int main(int argc, char * args[])
{
srand(time(0));
SDL_Init(SDL_INIT_EVERYTHING);
ekran = SDL_SetVideoMode(600, 600, 32, SDL_SWSURFACE);
obraz = SDL_LoadBMP("liczby.bmp");
SDL_WM_SetCaption("Ukladanka", NULL);
Uint8 *keystate = SDL_GetKeyState(NULL);
int x = NULL, y = NULL, i = NULL, k = NULL, wyjscie = NULL, n = 8;
int wylosowane[8], liczba = NULL;
for (i = 0; i<9; i++)
{
sprst[i].x = k;
sprst[i].y = 0;
sprst[i].w = 200;
sprst[i].h = 200;
k = k + 200;
}
for (i = 0; i < 3; i++)
{
dprst[i].x = x;
dprst[i].y = 0;
x = x + 200;
}
for (i = 3, x = 0; i < 6; i++)
{
dprst[i].x = x;
dprst[i].y = 200;
x = x + 200;
}
for (i = 6, x = 0; i < 9; i++)
{
dprst[i].x = x;
dprst[i].y = 400;
x = x + 200;
}
for (i = 0; i < 8; i++)
{
liczba = rand() % 8;
if (CzyBylaPowtorzona(liczba, wylosowane, i) == 0)
{
wylosowane[i] = liczba;
}
}
for (i = 0; i < 8; i++)
{
y = wylosowane[i];
SDL_BlitSurface(obraz, &sprst[i], ekran, &dprst[y]);
}
SDL_BlitSurface(obraz, &sprst[8], ekran, &dprst[8]);
/* SDL_BlitSurface(obraz, &sprst[0], ekran, &dprst[3]);
SDL_BlitSurface(obraz, &sprst[1], ekran, &dprst[5]);
SDL_BlitSurface(obraz, &sprst[2], ekran, &dprst[7]);
SDL_BlitSurface(obraz, &sprst[3], ekran, &dprst[2]);
SDL_BlitSurface(obraz, &sprst[4], ekran, &dprst[1]);
SDL_BlitSurface(obraz, &sprst[5], ekran, &dprst[4]);
SDL_BlitSurface(obraz, &sprst[6], ekran, &dprst[6]);
SDL_BlitSurface(obraz, &sprst[7], ekran, &dprst[0]);
SDL_BlitSurface(obraz, &sprst[8], ekran, &dprst[8]);*/
while (wyjscie == 0)
{
while (SDL_PollEvent(&zdarzenie))
{
if (zdarzenie.type == SDL_QUIT)
wyjscie = 1;
if (zdarzenie.type == SDL_KEYDOWN)
{
switch (zdarzenie.key.keysym.sym)
{
case SDLK_LEFT:
if ((dprst[n].x) > 0)
{
SDL_BlitSurface(ekran, &dprst[n - 1], ekran, &dprst[n]);
SDL_BlitSurface(obraz, &sprst[8], ekran, &dprst[n - 1]);
n = n - 1;
}
break;
case SDLK_RIGHT:
if ((dprst[n].x) < 400)
{
SDL_BlitSurface(ekran, &dprst[n + 1], ekran, &dprst[n]);
SDL_BlitSurface(obraz, &sprst[8], ekran, &dprst[n + 1]);
n = n + 1;
}
break;
case SDLK_UP:
if ((dprst[n].y) > 0)
{
SDL_BlitSurface(ekran, &dprst[n - 3], ekran, &dprst[n]);
SDL_BlitSurface(obraz, &sprst[8], ekran, &dprst[n - 3]);
n = n - 3;
}
break;
case SDLK_DOWN:
if ((dprst[n].y) < 400)
{
SDL_BlitSurface(ekran, &dprst[n + 3], ekran, &dprst[n]);
SDL_BlitSurface(obraz, &sprst[8], ekran, &dprst[n + 3]);
n = n + 3;
}
break;
}
}
}
SDL_Flip(ekran);
}
SDL_FreeSurface(obraz);
SDL_Quit();
return 0;
}