diff trix/src/menu.c @ 0:2787f5e749ae

INIT
author prymula <prymula76@outlook.com>
date Thu, 21 Sep 2023 22:33:57 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/trix/src/menu.c	Thu Sep 21 22:33:57 2023 +0200
@@ -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;
+}