From 89656e1787faf956c3c122693edc7bb00b1908a3 Mon Sep 17 00:00:00 2001 From: Przemyslaw Date: Mon, 1 Apr 2024 08:55:31 +0200 Subject: Init --- src/menu.c | 879 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 879 insertions(+) create mode 100644 src/menu.c (limited to 'src/menu.c') diff --git a/src/menu.c b/src/menu.c new file mode 100644 index 0000000..31e204b --- /dev/null +++ b/src/menu.c @@ -0,0 +1,879 @@ +#include "trix.h" +/* + * Trix - klikanie po klockach + * Przemysław R. Pietraszczyk + * + * paźdżiernik 2006 r. + * + * licencja: Public Domain + */ + /* +#if WINDOWS +//#include "img\\about.xpm" +#include "xpm//about.xpm" +#elif LINUX +#include "xpm//about.xpm" +#endif +*/ +#define Y_RETURN 400 + + +#define X_START X_CENTER(white_start_inscription->w) +#define X_HISCORES X_CENTER(white_hiscores_inscription->w) +#define X_ABOUT X_CENTER(white_about_inscription->w) +#define X_OPTIONS X_CENTER(white_options_inscription->w) + +#define X_RETURN X_CENTER(white_return_inscription->w) + +#define X_START_LEVEL X_CENTER(start_level_inscription->w) +#define X_TOPICAL_LEVEL 150 +#define X_MINUS 165 +#define X_PLUS 250 +#define X_NET 165 + +#define Y_START_LEVEL 100 +#define Y_TOPICAL_LEVEL 150 +#define Y_NET 250 + +// z trix.h begin +SDL_Surface * block[8]; +SDL_Surface * explode; +SDL_Surface * bomb; +SDL_Surface * wall; +SDL_Surface * smoke; + +SDL_Surface * net; +SDL_Surface * banner; +SDL_Surface * bg; +SDL_Surface * screen; +TTF_Font* font; + +SDL_Renderer * renderer; +SDL_Texture * tex_screen; + +SDL_Rect source, dest; +//int use_net; // zmienna wyswietlania siatki +//int start_level; // start gry od poziomu ... +//int score; +//int bonus; // nalicza premie + +//char * hifile; // path do hiscore + + +int use_net; // zmienna wyswietlania siatki +int start_level; // start gry od poziomu ... +int score; +int bonus; // nalicza premie + +char * hifile; // path do hiscore +struct tab tab_hiscores[5]; +char catalogue[N_PIC][40]; +struct FIELD field[23][26]; +// z trix.h end + + +SDL_Surface * prepare_text(int r, int b, int g, char *buffer); +void draw_text (int x, int y, SDL_Surface * image); +void save_settings(void); +void print_inscription(char * buffor, int desx, int desy); +void save_hiscores_to_file (void); + +/* sortuje tabele wynikiow i umieszcza + nowy wpis na odpowiednim miejscu */ +void prepare_new_place(char *new_name) { + + int i, j, hi = -1; + + /* szukamy miejsca na wpis */ + for (i=4; i>=0; --i) { + if (tab_hiscores[i].score < score)hi = i; + } + + /* przesowamy gorsze wyniki o miejsce w dol */ + for (i=4; i>hi; --i) { + tab_hiscores[i].score = tab_hiscores[i-1].score; + strcpy(tab_hiscores[i].name, tab_hiscores[i-1].name); + } + + /* nowy wpis */ + tab_hiscores[hi].score = score; + strcpy(tab_hiscores[hi].name, new_name); + + + /* zapamietanie wpisu */ + save_hiscores_to_file(); + +} + + +/* pobiera imie gracza */ +void get_name_of_player(void) { + + int i, done, p; + SDL_Rect srcrect, destrect; + SDL_Surface * enter = NULL; + SDL_Surface * enter_name_inscription; + char buffor[20]; + + destrect = set_rect(0,0,screen->w,screen->h); + SDL_FillRect(screen,&destrect,0); + +#define MAX 20 + + /* wypisanie informacji o wprowadzeniu danych */ + enter_name_inscription = (SDL_Surface *) prepare_text(255, 255, 255, "ENTER YOUR NAME"); + draw_text(X_CENTER(enter_name_inscription->w) , 100, enter_name_inscription); + + //SDL_Flip(screen); + + p = done = 0; + while (!done) + { + SDL_Event event; + + /* Check for events */ + while (SDL_PollEvent (&event)) + { + switch (event.type) + { + case SDL_KEYDOWN: +// printf("Nacini�o klawisz: %s\n", +// SDL_GetKeyName(event.key.keysym.sym)); + + if (event.key.keysym.sym==SDLK_ESCAPE) + done = 1; + + /* kasowanie ostatniej litery */ + if (event.key.keysym.sym==SDLK_BACKSPACE) + { + if (p) { + /* skracamy bufor */ + --p; + buffor[p] = '\0'; + + /* najperw czyscimy miejsce wpisu */ + destrect = set_rect(0, 150, screen->w,enter->h); + SDL_FillRect(screen,&destrect,0); + //SDL_UpdateRect(screen, 0, 150, screen->w, enter->h); + + SDL_FreeSurface(enter); + + if (strlen(buffor)) { + enter = (SDL_Surface *) prepare_text(255, 255, 255, buffor); + draw_text(X_CENTER(enter->w), 150, enter); + // SDL_UpdateRect(screen, X_CENTER(enter->w), 150, + // enter->w, enter->h); + } + /* jesli bufor jest pusty to koniecznie */ + else enter = NULL; + } + break; + } + /* zatwierdzanie */ + if (event.key.keysym.sym==SDLK_RETURN) + { + /* tylko wtedy gdy jest jakis podpis */ + if (p) + prepare_new_place(buffor); + + done = 1; + break; + } + /* dopisywanie litery na koncu */ + if (p < 20 && event.key.keysym.sym >= 97 && + event.key.keysym.sym <= 122) { + + /* najperw czyscimy miejsce wpisu */ + destrect = set_rect(0, 150, screen->w,32); + SDL_FillRect(screen,&destrect,0); + //SDL_UpdateRect(screen, 0, 150, screen->w, 32); + + SDL_FreeSurface(enter); + sprintf(&buffor[p], "%s", SDL_GetKeyName(event.key.keysym.sym)); + ++p; + enter = (SDL_Surface *) prepare_text(255, 255, 255, buffor); + draw_text(X_CENTER(enter->w), 150, enter); + //SDL_UpdateRect(screen, X_CENTER(enter->w), 150, + // enter->w, enter->h); + } + + break; + case SDL_QUIT: + exit(0); + break; + } + } + + dest = set_rect(0, 0, screen->w, screen->h); + //SDL_FillRect(screen, &dest, SDL_MapRGB(screen->format, 255, 255, 255)); + + source = set_rect(0, 0, screen->w, screen->h); + + tex_screen = SDL_CreateTextureFromSurface(renderer, screen); + SDL_RenderClear ( renderer ); + SDL_RenderCopy(renderer, tex_screen,&source,&dest); + SDL_RenderPresent(renderer); + SDL_DestroyTexture(tex_screen); + + } + + SDL_FreeSurface(enter); + SDL_FreeSurface(enter_name_inscription); + +} + +/* opcje */ +void options (void) { + + SDL_Surface * start_level_inscription; + SDL_Surface * white_net_inscription; + SDL_Surface * yellow_net_inscription; + SDL_Surface * white_minus_inscription; + SDL_Surface * yellow_minus_inscription; + SDL_Surface * white_plus_inscription; + SDL_Surface * yellow_plus_inscription; + SDL_Surface * yes_inscription; + SDL_Surface * no_inscription; + SDL_Surface * white_return_inscription; + SDL_Surface * yellow_return_inscription; + + + int done; + SDL_Rect srcrect, destrect; + char buffor[10]; + + start_level_inscription = (SDL_Surface *) prepare_text(255, 255, 255, "START LEVEL"); + white_net_inscription = (SDL_Surface *) prepare_text(255, 255, 255, "NET:"); + yellow_net_inscription = (SDL_Surface *) prepare_text(237, 0, 255, "NET:"); + white_minus_inscription = (SDL_Surface *) prepare_text(255, 255, 255, "<<"); + yellow_minus_inscription = (SDL_Surface *) prepare_text(237, 0, 255, "<<"); + white_plus_inscription = (SDL_Surface *) prepare_text(255, 255, 255, ">>"); + yellow_plus_inscription = (SDL_Surface *) prepare_text(237, 0, 255, ">>"); + yes_inscription = (SDL_Surface *) prepare_text(255, 255, 255, "YES"); + no_inscription = (SDL_Surface *) prepare_text(255, 255, 255, "NO "); + + white_return_inscription = (SDL_Surface *) prepare_text(255, 255, 255, "RETURN TO MENU"); + yellow_return_inscription = (SDL_Surface *) prepare_text(237, 0, 255, "RETURN TO MENU"); + + /* czysci ekran */ + destrect = set_rect(0,0,screen->w,screen->h); + SDL_FillRect(screen,&destrect,0); + + draw_text(X_START_LEVEL, Y_START_LEVEL, start_level_inscription); + draw_text(X_MINUS, Y_TOPICAL_LEVEL, white_minus_inscription); + draw_text(X_PLUS, Y_TOPICAL_LEVEL, white_plus_inscription); + + sprintf(buffor, "%2d", start_level); + print_inscription(buffor, X_MINUS+47, Y_TOPICAL_LEVEL); + + draw_text(X_NET, Y_NET, white_net_inscription); + + if (!use_net) draw_text(X_NET+60, Y_NET, no_inscription); + else draw_text(X_NET+60, Y_NET, yes_inscription); + + draw_text(X_RETURN, Y_RETURN, white_return_inscription); + + ////SDL_Flip(screen); + + done = 0; + while (!done) + { + SDL_Event event; + + /* Check for events */ + while (SDL_PollEvent (&event)) + { + switch (event.type) + { + case SDL_KEYDOWN: +// printf("Nacini�o klawisz: %s\n", +// SDL_GetKeyName(event.key.keysym.sym)); + + if (event.key.keysym.sym==SDLK_ESCAPE) + done = 1; + break; + case SDL_QUIT: + exit(0); + break; + case SDL_MOUSEMOTION: + + case SDL_MOUSEBUTTONDOWN: +// printf("Nacini�o przycisk o numerze %d na " +// "punkcie o wsp�rz�nych %d,%d\n", event.button.button, +// event.button.x, event.button.y); + /* Kursor na << */ + if (!event.button.button && event.button.x >= X_MINUS && + event.button.y >= Y_TOPICAL_LEVEL && + event.button.x <= X_MINUS + yellow_minus_inscription->w && + event.button.y <= Y_TOPICAL_LEVEL + yellow_minus_inscription->h) { + + draw_text(X_MINUS, Y_TOPICAL_LEVEL, yellow_minus_inscription); + // SDL_UpdateRect(screen, X_MINUS, Y_TOPICAL_LEVEL, + // yellow_minus_inscription->w, yellow_minus_inscription->h); + + } + /* gdy wcisnieto << */ + else if (event.button.button && event.button.x >= X_MINUS && + event.button.y >= Y_TOPICAL_LEVEL && + event.button.x <= X_MINUS + yellow_minus_inscription->w && + event.button.y <= Y_TOPICAL_LEVEL + yellow_minus_inscription->h) { + + if (start_level > 1) start_level -= 1; + + /* wymazuje wpis */ + destrect = set_rect(212,Y_TOPICAL_LEVEL, 28, 32); + SDL_FillRect(screen,&destrect,0); + // SDL_UpdateRect(screen, 212, Y_TOPICAL_LEVEL, 28, 32); + + /* nowy wpis */ + sprintf(buffor, "%2d", start_level); + print_inscription(buffor, X_MINUS+47, Y_TOPICAL_LEVEL); + //SDL_UpdateRect(screen, X_MINUS+47, Y_TOPICAL_LEVEL, 28, 32); + + /* << na zolto */ + draw_text(X_MINUS, Y_TOPICAL_LEVEL, yellow_minus_inscription); + //SDL_UpdateRect(screen, X_MINUS, Y_TOPICAL_LEVEL, + // yellow_minus_inscription->w, yellow_minus_inscription->h); + } + else { + /* << na bialo */ + draw_text(X_MINUS, Y_TOPICAL_LEVEL, white_minus_inscription); + // SDL_UpdateRect(screen, X_MINUS, Y_TOPICAL_LEVEL, + // white_minus_inscription->w, white_minus_inscription->h); + } + /* kursor na >> */ + if (!event.button.button && event.button.x >= X_PLUS && + event.button.y >= Y_TOPICAL_LEVEL && + event.button.x <= X_PLUS + yellow_plus_inscription->w && + event.button.y <= Y_TOPICAL_LEVEL + yellow_plus_inscription->h) { + + draw_text(X_PLUS, Y_TOPICAL_LEVEL, yellow_plus_inscription); + //SDL_UpdateRect(screen, X_PLUS, Y_TOPICAL_LEVEL, + // yellow_plus_inscription->w, yellow_plus_inscription->h); + + } + /* gdy wcisnieto >> */ + else if (event.button.button && event.button.x >= X_PLUS && + event.button.y >= Y_TOPICAL_LEVEL && + event.button.x <= X_PLUS + yellow_plus_inscription->w && + event.button.y <= Y_TOPICAL_LEVEL + yellow_plus_inscription->h) { + + if (start_level<10) start_level += 1; + + /* wymazuje wpis */ + destrect = set_rect(212,Y_TOPICAL_LEVEL, 28, 32); + SDL_FillRect(screen,&destrect,0); + //SDL_UpdateRect(screen, 212, Y_TOPICAL_LEVEL, 28, 32); + + /* nowy wpis */ + sprintf(buffor, "%2d", start_level); + print_inscription(buffor, X_MINUS+47, Y_TOPICAL_LEVEL); + //SDL_UpdateRect(screen, X_MINUS+47, Y_TOPICAL_LEVEL, 28, 32); + + /* >> na zolto */ + draw_text(X_PLUS, Y_TOPICAL_LEVEL, yellow_plus_inscription); + // SDL_UpdateRect(screen, X_PLUS, Y_TOPICAL_LEVEL, + // yellow_plus_inscription->w, yellow_plus_inscription->h); + } + else { + /* >> na bialo */ + draw_text(X_PLUS, Y_TOPICAL_LEVEL, white_plus_inscription); + // SDL_UpdateRect(screen, X_PLUS, Y_TOPICAL_LEVEL, + // white_plus_inscription->w, white_plus_inscription->h); +// printf ("nie wcisnieto \n"); + } + /* kursor na NET */ + if (!event.button.button && event.button.x >= X_NET && + event.button.y >= Y_NET && + event.button.x <= X_NET + yellow_net_inscription->w && + event.button.y <= Y_NET + yellow_net_inscription->h) { + + draw_text(X_NET, Y_NET, yellow_net_inscription); + //SDL_UpdateRect(screen, X_NET, Y_NET, + // yellow_net_inscription->w, yellow_net_inscription->h); + + } + /* gdy wcisnieto NET */ + else if (event.button.button && event.button.x >= X_NET && + event.button.y >= Y_NET && + event.button.x <= X_NET + yellow_net_inscription->w && + event.button.y <= Y_NET + yellow_net_inscription->h) { + + if (use_net) use_net =0; + else use_net =1; + + /* wymazuje wpis */ + destrect = set_rect(X_NET+60,Y_NET, + yes_inscription->w,yes_inscription->h); + SDL_FillRect(screen,&destrect,0); + + /* ustawia odpowiedni tekst */ + if (!use_net) draw_text(X_NET+60, Y_NET, no_inscription); + else draw_text(X_NET+60, Y_NET, yes_inscription); + + // SDL_UpdateRect(screen, X_NET+60, Y_NET, + // yes_inscription->w, yes_inscription->h); + + draw_text(X_NET, Y_NET, yellow_net_inscription); + // SDL_UpdateRect(screen, X_NET, Y_NET, + // yellow_net_inscription->w, yellow_net_inscription->h); + } + else { + + draw_text(X_NET, Y_NET, white_net_inscription); + //SDL_UpdateRect(screen, X_NET, Y_NET, + // white_net_inscription->w, white_net_inscription->h); +// printf ("nie wcisnieto \n"); + } + + /* Kursor na powrot do menu */ + if (!event.button.button && event.button.x >= X_RETURN && + event.button.y >= Y_RETURN && + event.button.x <= X_RETURN + yellow_return_inscription->w && + event.button.y <= Y_RETURN + yellow_return_inscription->h) { + + draw_text(X_RETURN, Y_RETURN, yellow_return_inscription); + // SDL_UpdateRect(screen, X_RETURN, Y_RETURN, + // yellow_return_inscription->w, yellow_return_inscription->h); + + } + + /* gdy wcisnieto powrot do menu */ + else if (event.button.button && event.button.x >= X_RETURN && + event.button.y >= Y_RETURN && + event.button.x <= X_RETURN + yellow_return_inscription->w && + event.button.y <= Y_RETURN + yellow_return_inscription->h) { + + done = 1; + save_settings(); + draw_text(X_RETURN, Y_RETURN, yellow_return_inscription); + // SDL_UpdateRect(screen, X_RETURN, Y_RETURN, + // yellow_return_inscription->w, yellow_return_inscription->h); + } + else { + /* powrot do menu na bialo */ + draw_text(X_RETURN, Y_RETURN, white_return_inscription); + // SDL_UpdateRect(screen, X_RETURN, Y_RETURN, + // white_return_inscription->w, white_return_inscription->h); + } + + break; + } + } +// //SDL_Flip(screen); + dest = set_rect(0, 0, screen->w, screen->h); + //SDL_FillRect(screen, &dest, SDL_MapRGB(screen->format, 255, 255, 255)); + + source = set_rect(0, 0, screen->w, screen->h); + + tex_screen = SDL_CreateTextureFromSurface(renderer, screen); + SDL_RenderClear ( renderer ); + SDL_RenderCopy(renderer, tex_screen,&source,&dest); + SDL_RenderPresent(renderer); + SDL_DestroyTexture(tex_screen); + } + + + + // czyscimy ekran przed powrotem + destrect = set_rect(0,0,screen->w,screen->h); + SDL_FillRect(screen,&destrect,0); + //SDL_Flip(screen); + + + + SDL_FreeSurface(start_level_inscription); + SDL_FreeSurface(white_net_inscription); + SDL_FreeSurface(yellow_net_inscription); + SDL_FreeSurface(white_minus_inscription); + SDL_FreeSurface(yellow_minus_inscription); + SDL_FreeSurface(white_plus_inscription); + SDL_FreeSurface(yellow_plus_inscription); + SDL_FreeSurface(yes_inscription); + SDL_FreeSurface(no_inscription); + SDL_FreeSurface(white_return_inscription); + SDL_FreeSurface(yellow_return_inscription); + +} + +void wait_for_return (void) { + + int done; + SDL_Surface * white_return_inscription; + SDL_Surface * yellow_return_inscription; + + white_return_inscription = (SDL_Surface *) prepare_text(255, 255, 255, "RETURN TO MENU"); + yellow_return_inscription = (SDL_Surface *) prepare_text(237, 0, 255, "RETURN TO MENU"); + + draw_text(X_RETURN, Y_RETURN, white_return_inscription); + +// //SDL_Flip(screen); + // SDL_UpdateRect(screen, X_RETURN, Y_RETURN, + // white_return_inscription->w, white_return_inscription->h); + + + done = 0; + while (!done) + { + SDL_Event event; + + /* Check for events */ + while (SDL_PollEvent (&event)) + { + switch (event.type) + { + case SDL_KEYDOWN: +// printf("Nacini�o klawisz: %s\n", +// SDL_GetKeyName(event.key.keysym.sym)); + + if (event.key.keysym.sym==SDLK_ESCAPE) + done = 1; + break; + case SDL_QUIT: + exit(0); + break; + case SDL_MOUSEMOTION: + + case SDL_MOUSEBUTTONDOWN: +// printf("Nacini�o przycisk o numerze %d na " +// "punkcie o wsp�rz�nych %d,%d\n", event.button.button, +// event.button.x, event.button.y); + + /* Kursor na powrot do menu */ + if (!event.button.button && event.button.x >= X_RETURN && + event.button.y >= Y_RETURN && + event.button.x <= X_RETURN + yellow_return_inscription->w && + event.button.y <= Y_RETURN + yellow_return_inscription->h) { + + draw_text(X_RETURN, Y_RETURN, yellow_return_inscription); + // SDL_UpdateRect(screen, X_RETURN, Y_RETURN, + // yellow_return_inscription->w, yellow_return_inscription->h); + + } + + /* gdy wcisnieto powrot do menu */ + else if (event.button.button && event.button.x >= X_RETURN && + event.button.y >= Y_RETURN && + event.button.x <= X_RETURN + yellow_return_inscription->w && + event.button.y <= Y_RETURN + yellow_return_inscription->h) { + + done = 1; + draw_text(X_RETURN, Y_RETURN, yellow_return_inscription); + // SDL_UpdateRect(screen, X_RETURN, Y_RETURN, + // yellow_return_inscription->w, yellow_return_inscription->h); + } + else { + /* powrot do manu na bialo */ + draw_text(X_RETURN, Y_RETURN, white_return_inscription); + // SDL_UpdateRect(screen, X_RETURN, Y_RETURN, + // white_return_inscription->w, white_return_inscription->h); + } + + break; + } + } + + + dest = set_rect(0, 0, screen->w, screen->h); + //SDL_FillRect(screen, &dest, SDL_MapRGB(screen->format, 255, 255, 255)); + + source = set_rect(0, 0, screen->w, screen->h); + + tex_screen = SDL_CreateTextureFromSurface(renderer, screen); + SDL_RenderClear ( renderer ); + SDL_RenderCopy(renderer, tex_screen,&source,&dest); + SDL_RenderPresent(renderer); + SDL_DestroyTexture(tex_screen); + + } + + SDL_FreeSurface(white_return_inscription); + SDL_FreeSurface(yellow_return_inscription); +} + + +void about (void) { + + SDL_Surface * about; + SDL_Rect srcrect, destrect; + + about=IMG_ReadXPMFromArray(about_xpm); + if(!about) { + printf("IMG_ReadXPMFromArray: %s\n", IMG_GetError()); + exit(1); + } + + /* czysci ekran */ + destrect = set_rect(0,0,screen->w,screen->h); + SDL_FillRect(screen,&destrect,0); + + /* umieszcza inskrypcje na ekranie */ + destrect = set_rect(X_CENTER(about->w),50,about->w,about->h); + srcrect = set_rect(0, 0, about->w, about->h); + SDL_BlitSurface(about,&srcrect, screen,&destrect); +// SDL_UpdateRect(screen, X_CENTER(about->w), 50, about->w, about->h); + + //SDL_Flip(screen); + + wait_for_return(); + + SDL_FreeSurface(about); + + /* czyscimy ekran przed powrotem */ + destrect = set_rect(0,0,screen->w,screen->h); + SDL_FillRect(screen,&destrect,0); + //SDL_Flip(screen); + +} + + + + +void hiscores(void) { + + SDL_Surface * place_inscription[5]; + SDL_Rect srcrect, destrect; + int done, i, y_place; + char buffor[50]; + + + destrect = set_rect(0,0,screen->w,screen->h); + SDL_FillRect(screen,&destrect,0); + + /* tworzenie obrazkow z wynikami */ + for (i=0; i<5; ++i) { + sprintf(buffor, "%d %s %d", i+1, tab_hiscores[i].name, tab_hiscores[i].score); + place_inscription[i]= (SDL_Surface *) prepare_text(255, 255, 255, buffor); + } + + + /* wypisuje ranking */ + y_place = 50; + for (i=0; i<5; ++i) { + draw_text(X_CENTER(place_inscription[i]->w), y_place, place_inscription[i]); + y_place += 50; + } + //SDL_Flip(screen); + + wait_for_return(); + + /* usuwanie obrazkow*/ + for (i=0; i<5; ++i) + SDL_FreeSurface(place_inscription[i]); + + + // czyscimy ekran przed powrotem + destrect = set_rect(0,0,screen->w,screen->h); + SDL_FillRect(screen,&destrect,0); + //SDL_Flip(screen); + + +} + + +int menu() { + + int done; + SDL_Rect srcrect, destrect; + SDL_Surface * white_start_inscription; + SDL_Surface * yellow_start_inscription; + SDL_Surface * white_hiscores_inscription; + SDL_Surface * yellow_hiscores_inscription; + SDL_Surface * white_about_inscription; + SDL_Surface * yellow_about_inscription; + SDL_Surface * white_options_inscription; + SDL_Surface * yellow_options_inscription; + + + white_start_inscription = (SDL_Surface *) prepare_text(255, 255, 255, "START"); + white_hiscores_inscription = (SDL_Surface *) prepare_text(255, 255, 255, "HiSCORES"); + white_about_inscription = (SDL_Surface *) prepare_text(255, 255, 255, "ABOUT"); + white_options_inscription = (SDL_Surface *) prepare_text(255, 255, 255, "OPTIONS"); + yellow_start_inscription = (SDL_Surface *) prepare_text(237, 0, 255, "START"); + yellow_hiscores_inscription = (SDL_Surface *) prepare_text(237, 0, 255, "HiSCORES"); + yellow_about_inscription = (SDL_Surface *) prepare_text(237, 0, 255, "ABOUT"); + yellow_options_inscription = (SDL_Surface *) prepare_text(237, 0, 255, "OPTIONS"); + + /* czysci ekran */ + destrect = set_rect(0,0,screen->w,screen->h); + SDL_FillRect(screen,&destrect,0); + + /* rysuje banner */ + destrect = set_rect(X_CENTER(banner->w),50,banner->w,banner->h); + srcrect = set_rect(0, 0, banner->w, banner->h); + SDL_BlitSurface(banner,&srcrect, screen,&destrect); + // SDL_UpdateRect(screen, X_CENTER(banner->w), 50, banner->w, banner->h); + + + draw_text(X_START, Y_START, white_start_inscription); + draw_text(X_HISCORES, Y_HISCORES, white_hiscores_inscription); + draw_text(X_OPTIONS, Y_OPTIONS, white_options_inscription); + draw_text(X_ABOUT, Y_ABOUT, white_about_inscription); + + //SDL_Flip(screen); + + done = 0; + while (!done) + { + SDL_Event event; + + /* Check for events */ + while (SDL_PollEvent (&event)) + { + switch (event.type) + { + case SDL_KEYDOWN: +// printf("Nacini�o klawisz: %s\n", +// SDL_GetKeyName(event.key.keysym.sym)); + + if (event.key.keysym.sym==SDLK_ESCAPE) + done = QUIT_GAME; + break; + case SDL_QUIT: + done = QUIT_GAME; + break; + case SDL_MOUSEMOTION: + case SDL_MOUSEBUTTONDOWN: + /* kursor na starcie */ + if (!event.button.button && event.button.x >= X_START && + event.button.y >= Y_START && + event.button.x <= X_START + yellow_start_inscription->w && + event.button.y <= Y_START + yellow_start_inscription->h) { + + draw_text(X_START, Y_START, yellow_start_inscription); + // SDL_UpdateRect(screen, X_START, Y_START, + // yellow_start_inscription->w, yellow_start_inscription->h); + } + /* gdy wcisnieto start */ + else if (event.button.button && event.button.x >= X_START && + event.button.y >= Y_START && + event.button.x <= X_START + yellow_start_inscription->w && + event.button.y <= Y_START + yellow_start_inscription->h) { + + done = START_GAME; + + draw_text(X_START, Y_START, yellow_start_inscription); + // SDL_UpdateRect(screen, X_START, Y_START, + // yellow_start_inscription->w, yellow_start_inscription->h); + } + else { + /* kursor poza napisem start */ + draw_text(X_START, Y_START, white_start_inscription); + // SDL_UpdateRect(screen, X_START, Y_START, + // white_start_inscription->w, white_start_inscription->h); + } + /* kursor na hiscores */ + if (!event.button.button && event.button.x >= X_HISCORES && + event.button.y >= Y_HISCORES && + event.button.x <= X_HISCORES + yellow_hiscores_inscription->w && + event.button.y <= Y_HISCORES + yellow_hiscores_inscription->h) { + + draw_text(X_HISCORES, Y_HISCORES, yellow_hiscores_inscription); + // SDL_UpdateRect(screen, X_HISCORES, Y_HISCORES, + // yellow_hiscores_inscription->w, yellow_hiscores_inscription->h); + } + /* gdy wcisnieto hiscores */ + else if (event.button.button && event.button.x >= X_HISCORES && + event.button.y >= Y_HISCORES && + event.button.x <= X_HISCORES + yellow_hiscores_inscription->w && + event.button.y <= Y_HISCORES + yellow_hiscores_inscription->h) { + + done = HISCORES; + + draw_text(X_HISCORES, Y_HISCORES, yellow_hiscores_inscription); + // SDL_UpdateRect(screen, X_HISCORES, Y_HISCORES, + // yellow_hiscores_inscription->w, yellow_hiscores_inscription->h); + } + else { + /* kursor poza napisem hiscore */ + draw_text(X_HISCORES, Y_HISCORES, white_hiscores_inscription); + // SDL_UpdateRect(screen, X_HISCORES, Y_HISCORES, + // white_hiscores_inscription->w, white_hiscores_inscription->h); + } + /* kursor na options */ + if (!event.button.button && event.button.x >= X_OPTIONS && + event.button.y >= Y_OPTIONS && + event.button.x <= X_OPTIONS + yellow_options_inscription->w && + event.button.y <= Y_OPTIONS + yellow_options_inscription->h) { + + draw_text(X_OPTIONS, Y_OPTIONS, yellow_options_inscription); + // SDL_UpdateRect(screen, X_OPTIONS, Y_OPTIONS, + // yellow_options_inscription->w, yellow_options_inscription->h); + } + /* gdy wcisnieto options */ + else if (event.button.button && event.button.x >= X_OPTIONS && + event.button.y >= Y_OPTIONS && + event.button.x <= X_OPTIONS + yellow_options_inscription->w && + event.button.y <= Y_OPTIONS + yellow_options_inscription->h) { + + done = OPTIONS; + + draw_text(X_OPTIONS, Y_OPTIONS, yellow_options_inscription); + // SDL_UpdateRect(screen, X_OPTIONS, Y_OPTIONS, + // yellow_options_inscription->w, yellow_options_inscription->h); + } + else { + /* kursor poza napisem options */ + draw_text(X_OPTIONS, Y_OPTIONS, white_options_inscription); + // SDL_UpdateRect(screen, X_OPTIONS, Y_OPTIONS, + // white_options_inscription->w, white_options_inscription->h); + } + + + /* kursor na about */ + if (!event.button.button && event.button.x >= X_ABOUT && + event.button.y >= Y_ABOUT && + event.button.x <= X_ABOUT + yellow_about_inscription->w && + event.button.y <= Y_ABOUT + yellow_about_inscription->h) { + + draw_text(X_ABOUT, Y_ABOUT, yellow_about_inscription); + // SDL_UpdateRect(screen, X_ABOUT, Y_ABOUT, + // yellow_about_inscription->w, yellow_about_inscription->h); + } + /* gdy wcisnieto about */ + else if (event.button.button && event.button.x >= X_ABOUT && + event.button.y >= Y_ABOUT && + event.button.x <= X_ABOUT + yellow_about_inscription->w && + event.button.y <= Y_ABOUT + yellow_about_inscription->h) { + + done = ABOUT; + + draw_text(X_ABOUT, Y_ABOUT, yellow_about_inscription); + // SDL_UpdateRect(screen, X_ABOUT, Y_ABOUT, + // yellow_about_inscription->w, yellow_about_inscription->h); + } + else { + /* kursor poza napisem about */ + draw_text(X_ABOUT, Y_ABOUT, white_about_inscription); + // SDL_UpdateRect(screen, X_ABOUT, Y_ABOUT, + // white_about_inscription->w, white_about_inscription->h); + } + + break; + default: + break; + + } + } + + dest = set_rect(0, 0, screen->w, screen->h); + source = set_rect(0, 0, screen->w, screen->h); + + tex_screen = SDL_CreateTextureFromSurface(renderer, screen); + SDL_RenderClear ( renderer ); + SDL_RenderCopy(renderer, tex_screen,&source,&dest); + SDL_RenderPresent(renderer); + SDL_DestroyTexture(tex_screen); + + } + SDL_FreeSurface(white_start_inscription); + SDL_FreeSurface(yellow_start_inscription); + SDL_FreeSurface(white_hiscores_inscription); + SDL_FreeSurface(yellow_hiscores_inscription); + SDL_FreeSurface(white_about_inscription); + SDL_FreeSurface(yellow_about_inscription); + SDL_FreeSurface(white_options_inscription); + SDL_FreeSurface(yellow_options_inscription); + + return done; +} -- cgit v1.2.3