diff arkanoid/arkanoid.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/arkanoid/arkanoid.c	Thu Sep 21 22:33:57 2023 +0200
@@ -0,0 +1,937 @@
+/*
+	arkanoid - moja implementacja klasyka
+	wymaga: SDL2, SDL_TTF2
+	09-01-2021
+	licencja: Public Domain
+	edytor: VS Code
+	utworzono na platformie: Windows 10 - MinGW32
+*/
+
+#include "arkanoid.h"
+#include "levels.h"
+
+Kafel kafle[8][8];
+SDL_Surface * gumka_kafla;
+SDL_Window  *gWindow=NULL;
+SDL_Renderer * renderer=NULL;
+SDL_Texture * tex_screen=NULL;
+
+int liczba_kafli=0;
+int wynik, najlepszy, poziom, zycia;
+
+void rysuj_obrazek (int x, int y, SDL_Surface * obrazek, int przezroczystosc);
+SDL_Surface * utworz_powierzchnie(int sz, int w, int r, int g, int b);
+
+SDL_Rect set_rect(int x, int y, int w, int h)
+{
+	SDL_Rect rect;
+	rect.x = x;
+	rect.y = y;
+	rect.w = w;
+	rect.h = h;
+	return rect;
+}
+
+Uint32 getpixel(SDL_Surface *surface, int x, int y)
+{
+	int bpp = surface->format->BytesPerPixel;
+	/* Here p is the address to the pixel we want to retrieve */
+	Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * bpp;
+
+	switch(bpp) {
+		case 1:
+			return *p;
+		case 2:
+			return *(Uint16 *)p;
+		case 3:
+			if(SDL_BYTEORDER == SDL_BIG_ENDIAN)
+				return p[0] << 16 | p[1] << 8 | p[2];
+			else
+				return p[0] | p[1] << 8 | p[2] << 16;
+		case 4:
+			return *(Uint32 *)p;
+		default:
+			return 0;
+	}
+}
+
+
+
+void putpixel(SDL_Surface *surface, int x, int y, Uint8 R, Uint8 G, Uint8 B)
+{
+    Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x *
+               surface->format->BytesPerPixel;
+    if(SDL_BYTEORDER == SDL_BIG_ENDIAN)
+    {
+       p[0] = R;
+       p[1] = G;
+       p[2] = B;
+    }
+    else
+    {
+       p[0] = B;
+       p[1] = G;
+       p[2] = R;
+    }
+}
+
+SDL_Surface * preparuj_tekst(int r, int b, int g, char *bufor) {
+
+   SDL_Color fgcolor;
+
+   fgcolor.r = r;
+   fgcolor.b = b;
+   fgcolor.g = g;
+
+   return TTF_RenderText_Solid(font_panel, bufor,  fgcolor);
+}
+
+
+void print_text(int r, int g, int b, char *c, int x, int y, int z) {
+
+	SDL_Surface * obraz_info;
+	SDL_Surface * gum_info;
+	SDL_Rect zrodlo, cel;
+
+	obraz_info = (SDL_Surface *) preparuj_tekst(r, g, b, c);
+
+	// chce wymazac napis
+	//cel = set_rect(obraz_info->clip_rect.x, obraz_info->clip_rect.y,
+	//				obraz_info->w, obraz_info->h);
+	cel = set_rect(x, y,
+					obraz_info->w, obraz_info->h);
+	zrodlo = set_rect(0, 0, obraz_info->w,  obraz_info->h);
+	gum_info=utworz_powierzchnie(obraz_info->w, obraz_info->h, 65, 190, 215);
+
+	SDL_BlitSurface(gum_info, &zrodlo, obraz, &cel);
+	SDL_FreeSurface(gum_info);
+
+	rysuj_obrazek(x, y, obraz_info, 1);
+	SDL_FreeSurface(obraz_info);
+}
+
+
+SDL_Surface * ustaw_kolor (Kolor kol) {
+
+	SDL_Surface * kafel;
+	SDL_Rect cel;
+
+	kafel = SDL_CreateRGBSurface(SDL_SWSURFACE, XKAFLA, YKAFLA,16,0,0,0,0);
+	cel = set_rect(0, 0, XKAFLA, YKAFLA);
+	SDL_FillRect(kafel, &cel, SDL_MapRGB(kafel->format, kol.r, kol.g, kol.b));
+
+	return kafel;
+
+}
+
+void ustaw_kolor_tla(void) {
+
+   SDL_Rect przez;
+	//obraz->clip_rect.x=0;
+	//obraz->clip_rect.y=0;
+	//obraz->clip_rect.w=640;
+	//obraz->clip_rect.h=480;
+	asm("nop");
+   przez = set_rect(0, 0, obraz->w, obraz->h);
+   //przez = set_rect(0, 0, 640, 480);
+
+   SDL_FillRect(obraz, &przez, SDL_MapRGB(obraz->format,65,190,215));
+   //SDL_Flip(obraz);
+   SDL_RenderPresent ( renderer );
+}
+
+void erase (RuchomyObiekt *p){
+
+	SDL_Rect zrodlo, cel;
+
+    cel = set_rect(p->px, p->py, p->gumka->w, p->gumka->h);
+	zrodlo = set_rect(0, 0, p->gumka->w, p->gumka->h);
+	SDL_BlitSurface(p->gumka,&zrodlo,obraz,&cel);
+}
+
+
+void przerysuj(RuchomyObiekt *p) {
+	SDL_Rect zrodlo, cel;
+	// wymazuje stara pozycje
+    cel = set_rect(p->px, p->py, p->gumka->w, p->gumka->h);
+	zrodlo = set_rect(0, 0, p->gumka->w, p->gumka->h);
+	SDL_BlitSurface(p->gumka,&zrodlo,obraz,&cel);
+    // rysuje na nowej pozycji
+    cel = set_rect(p->ax, p->ay, p->obraz->w, p->obraz->h);
+	zrodlo = set_rect(0, 0, p->obraz->w, p->obraz->h);
+	SDL_BlitSurface(p->obraz,&zrodlo,obraz,&cel);
+
+}
+
+void rysuj_obrazek (int x, int y, SDL_Surface * obrazek, int przezroczystosc) {
+
+   SDL_Rect srcrect, destrect;
+
+	if (przezroczystosc) SDL_SetColorKey(obrazek,SDL_TRUE,getpixel(obrazek,0,0));
+
+   destrect = set_rect(x, y, obrazek->w, obrazek->h);
+   srcrect = set_rect(0,0,obrazek->w, obrazek->h);
+   SDL_BlitSurface(obrazek,&srcrect,obraz,&destrect);
+}
+
+
+SDL_Surface * utworz_powierzchnie(int sz, int w, int r, int g, int b) {
+
+	SDL_Surface * powierzchnia;
+	SDL_Rect cel;
+
+	powierzchnia = SDL_CreateRGBSurface(SDL_SWSURFACE, sz, w,16,0,0,0,0);
+	cel = set_rect(0, 0, sz, w);
+	SDL_FillRect(powierzchnia, &cel, SDL_MapRGB(powierzchnia->format, r, g, b));
+
+	return powierzchnia;
+}
+
+Uint32 ruch_pilki(Uint32 interval, void *param)
+{
+	SDL_Rect zrodlo, cel;
+	Teczka * t = (Teczka *) param;
+	int i, j;
+
+	przerysuj(t->pilka);
+
+	if (t->pilka->ax <= 5) t->pilka->kx=5;
+	if (t->pilka->ax >= 605) t->pilka->kx=-5;
+	if (t->pilka->ay <=30) t->pilka->ky=5;
+
+	/* odpicie przez paletke */
+	if (t->pilka->ax+XPILKI >= t->paletka->ax && (t->pilka->ax) <= (t->paletka->ax+XPALETKI) &&
+		t->pilka->ay >= 420) {
+
+		/* odbicie lewym brzegiem */
+		if (t->pilka->ax >= t->paletka->ax && t->pilka->ax <= t->paletka->ax+30) {
+			t->pilka->kx=-5;
+			printf ("kx = -5\n");
+
+		}
+		/* odbicie lewym srodkiem */
+		else if (t->pilka->ax >= t->paletka->ax+30  && t->pilka->ax <= t->paletka->ax+60) {
+			t->pilka->kx=-2;
+			printf ("kx = -2\n");
+		}
+		/* odbicie prawym srodkiem */
+		else if (t->pilka->ax >= t->paletka->ax+60  && t->pilka->ax <= t->paletka->ax+90) {
+			t->pilka->kx=2;
+			printf ("kx = 2\n");
+		}
+		/* odbicie prawym brzegiem */
+		else if (t->pilka->ax >= t->paletka->ax+90 && t->pilka->ax <= t->paletka->ax+120) {
+//			t->pilka->kx=-5;
+			t->pilka->kx=5;
+			printf ("kx = 5\n");
+
+		}
+
+		/* odbijamy od paletki */
+		t->pilka->ky=-5;
+	}
+
+	int flaga_zmiany=0; // zapobiega przebijaniu sie pilki przez kafle
+	/* reakcje pilki z kaflami */
+	for (i=0; i<8; i++) {
+
+		for (j=0; j<8; j++) {
+			if (kafle[i][j].obraz != NULL) {
+
+				if (t->pilka->ay+YPILKI >= kafle[i][j].y &&
+					t->pilka->ay <= kafle[i][j].y+YKAFLA &&
+					t->pilka->ax >= kafle[i][j].x-XPILKI &&
+					t->pilka->ax <= kafle[i][j].x+XKAFLA) {
+#define XTOL 1
+// #define YTOL 3
+					printf ("twardosc: %d\n", kafle[i][j].twardosc);
+					if (kafle[i][j].twardosc !=2) {
+						rysuj_obrazek(kafle[i][j].x, kafle[i][j].y, gumka_kafla, 0);
+						kafle[i][j].obraz=NULL;
+					// w ktora strone znikajacy kafel odbije pilke
+
+					// lewy przeg kafla
+
+						printf ("ax: %d   kafel %d \n", t->pilka->ax, kafle[i][j].x+XKAFLA);
+
+						if (t->pilka->ay+YPILKI >= kafle[i][j].y &&
+							t->pilka->ay <= kafle[i][j].y+YKAFLA &&
+							t->pilka->ax >= kafle[i][j].x-XPILKI &&
+							t->pilka->ax <= kafle[i][j].x-XPILKI+XTOL) {
+
+							if (!flaga_zmiany) {
+								t->pilka->kx = -5;
+								flaga_zmiany=1;
+							}
+
+							printf ("lewy bok\n");
+							liczba_kafli--;
+							wynik+=PUNKTY;
+//
+						}
+					// prawy  przeg kafla
+						else if (t->pilka->ay+YPILKI >= kafle[i][j].y &&
+							t->pilka->ay <= kafle[i][j].y+YKAFLA &&
+							t->pilka->ax <= kafle[i][j].x+XKAFLA &&
+							t->pilka->ax >= kafle[i][j].x+XKAFLA-XTOL) {
+
+							if (!flaga_zmiany) {
+								t->pilka->kx = 5;
+								flaga_zmiany=1;
+							}
+							printf ("prawy bok\n");
+							liczba_kafli--;
+							wynik+=PUNKTY;
+//
+						}
+						else if (t->pilka->ky == 5) {
+							if (!flaga_zmiany) {
+								t->pilka->ky =-5;
+								flaga_zmiany=1;
+							}
+							printf ("zmina kirunku: do gory (%d)\n", t->pilka->ay);
+							liczba_kafli--;
+							wynik+=PUNKTY;
+						}
+						else if (t->pilka->ky == -5) {
+							if (!flaga_zmiany) {
+								t->pilka->ky =5;
+								flaga_zmiany=1;
+							}
+							printf ("zmina kirunku: na dól %d \n", t->pilka->ay );
+							liczba_kafli--;
+							wynik+=PUNKTY;
+						}
+
+
+					printf ("\n\nliczba kafli: %d\n", liczba_kafli);
+					}
+					/* jesli twardosc 2 */
+					else {
+						if (t->pilka->ay+YPILKI >= kafle[i][j].y &&
+							t->pilka->ay <= kafle[i][j].y+YKAFLA &&
+							t->pilka->ax >= kafle[i][j].x-XPILKI &&
+							t->pilka->ax <= kafle[i][j].x-XPILKI+XTOL) {
+
+							if (!flaga_zmiany) {
+								t->pilka->kx = -5;
+								flaga_zmiany=1;
+							}
+							printf ("lewy bok\n");
+//							liczba_kafli--;
+							kafle[i][j].twardosc=1;
+//
+						}
+					// prawy  przeg kafla
+						else if (t->pilka->ay+YPILKI >= kafle[i][j].y &&
+							t->pilka->ay <= kafle[i][j].y+YKAFLA &&
+							t->pilka->ax <= kafle[i][j].x+XKAFLA &&
+							t->pilka->ax >= kafle[i][j].x+XKAFLA-XTOL) {
+
+							if (!flaga_zmiany) {
+								t->pilka->kx = 5;
+								flaga_zmiany=1;
+							}
+
+							printf ("prawy bok\n");
+//							liczba_kafli--;
+							kafle[i][j].twardosc=1;
+//
+						}
+
+						else if (t->pilka->ky == 5) {
+							if (!flaga_zmiany) {
+								t->pilka->ky =-5;
+								flaga_zmiany=1;
+							}
+							printf ("zmina kirunku: do gory (%d)\n", t->pilka->ay);
+							liczba_kafli--;
+						}
+						else if (t->pilka->ky == -5) {
+							if (!flaga_zmiany) {
+								t->pilka->ky =5;
+								flaga_zmiany=1;
+							}
+							printf ("zmina kirunku: na dól %d \n", t->pilka->ay );
+							liczba_kafli--;
+						}
+						printf("opuszczam Twardosc 2\n");
+					}
+
+				}
+			}
+		}
+	}
+
+
+
+	t->pilka->px=t->pilka->ax;
+	t->pilka->py=t->pilka->ay;
+	t->pilka->ax+=t->pilka->kx;
+	t->pilka->ay+=t->pilka->ky;
+
+	//return interval;
+}
+
+
+
+/* poziom liczymy od zera */
+void zaladuj_poziom(SDL_Surface ** kolor_kafla, int poziom) {
+
+	int i, j, l, x, y;
+
+	printf ("bede rysowac poziom: %d\n", poziom);
+   /* dane odczytwane beda dla poziomu 'level' */
+	l = poziom*8;
+	liczba_kafli=0;
+	x=0;
+	y=30;
+	// wiersze
+	for (i=0; i < 8; ++i) {
+		// kolumny
+		for (j = 0; j < 8; ++j) {
+
+			printf ("levels -%d-", levels[i+l][j]);
+			/* jesli pole rozne od zera to jakis kafel */
+			if (levels[i+l][j] != 48) {
+				kafle[i][j].obraz= kolor_kafla[levels[i+l][j]-48];
+
+				if (levels[i+l][j] != 52) kafle[i][j].twardosc=1;
+				else kafle[i][j].twardosc=2;
+
+				kafle[i][j].x = x;
+				kafle[i][j].y = y;
+				liczba_kafli++;
+			}
+			else {
+				kafle[i][j].obraz= NULL;
+			}
+			x+=XKAFLA;
+		}
+		x=0;
+		y+=YKAFLA;
+
+		putchar('\n');
+//      if (i == 19) putchar('\n');
+	}
+
+}
+
+void wyswietl_kafle(void) {
+
+	int i, j;
+	SDL_Rect zrodlo, cel;
+
+	for (i=0; i < 8; ++i) {
+
+		for (j = 0; j < 8; ++j) {
+
+			if (kafle[i][j].obraz != NULL) {
+				printf ("rysuje\n");
+				cel = set_rect(kafle[i][j].x, kafle[i][j].y, kafle[i][j].obraz->w, kafle[i][j].obraz->h);
+				zrodlo = set_rect(0, 0, kafle[i][j].obraz->w, kafle[i][j].obraz->h);
+				SDL_BlitSurface(kafle[i][j].obraz, &zrodlo, obraz, &cel);
+
+			}
+			//else printf ("Kafle nie maja przydzielonego obrazu\n");
+		}
+	}
+}
+
+SDL_Surface * utworz_kafle(SDL_Surface ** tab) {
+	int i;
+	Kolor kolory[4]  = {{62, 246, 26}, // zielony
+									{246, 26, 202}, // filoet
+									{26, 36, 246}, // indygo
+									{246, 26, 52}}; // czerwony
+	//								{253, 157, 79}  // pomaranczowy
+	for (i=0; i<8; i++) {
+			tab[i] = ustaw_kolor(kolory[i]);
+	}
+
+}
+
+SDL_bool end() {
+	SDL_Rect zrodlo, cel;
+	char txt1[30] = "G A M E   O V  E R";
+	char txt2[10] = "Wynik";
+	char txt3[24];
+	ustaw_kolor_tla();
+
+	print_text(0, 0, 0, txt1,  200, 200, 10);
+	print_text(234, 0, 0, txt2,  250, 250, 10);
+	sprintf (txt3, "%d", wynik);
+	print_text(33, 249, 11, txt3, 260, 300, 10);
+
+	cel = set_rect(0, 0, obraz->w, obraz->h);
+	zrodlo = set_rect(0, 0, obraz->w, obraz->h);
+ 	tex_screen = SDL_CreateTextureFromSurface(renderer, obraz);
+	SDL_RenderClear ( renderer );
+	SDL_RenderCopy(renderer, tex_screen,&zrodlo,&cel);
+	SDL_RenderPresent(renderer);
+	SDL_DestroyTexture(tex_screen);
+
+	sleep(5);
+	return SDL_TRUE;
+}
+
+SDL_bool file_exist(){
+	char *file;
+
+	#if WINDOWS
+	char * FILE_NAME = "\\arkanoid.txt";
+	char * HOME = "HOMEPATH";
+
+	#elif LINUX
+	char * FILE_NAME = "/.arkanoid.txt";
+	char * HOME = "HOME";
+	#endif
+
+
+	if (!getenv(HOME)) exit (1);
+
+	file=(char *)malloc(strlen(getenv(HOME))+strlen(FILE_NAME)+1);
+	
+	strcpy(file, getenv(HOME));
+	strcat(file, FILE_NAME);
+	printf("1");
+
+	if (access(file, F_OK)==0){
+		printf("PLIK istnieje %s",file);
+		free(file);
+		return SDL_TRUE;
+	}
+	printf("PLIK nie istnieje %s",file);
+	free(file);
+	return SDL_FALSE;
+	
+}
+
+void save_hiscore(){
+	char *file;
+
+	#if WINDOWS
+	char * FILE_NAME = "\\arkanoid.txt";
+	char * HOME = "HOMEPATH";
+
+	#elif LINUX
+	char * FILE_NAME = "/.arkanoid.txt";
+	char * HOME = "HOME";
+	#endif
+
+
+	char bufor[48];
+
+	if (!getenv(HOME)) exit (1);
+
+
+	//file=(char *)malloc(strlen(getenv(HOME)+strlen(FILE_NAME)+1));
+	file=(char *)malloc(strlen(getenv(HOME))+strlen(FILE_NAME)+1);
+
+	strcpy(file, getenv(HOME));
+	strcat(file, FILE_NAME);
+
+	sprintf(bufor,"%d",najlepszy);
+
+	FILE * f = fopen(file, "w");
+	fwrite(bufor, sizeof(char), strlen(bufor), f);
+	fclose(f);
+	printf ("Zapisałem: %s\n", file);
+	free(file);
+
+
+
+}
+
+void load_hiscore(){
+	char *file;
+
+	#if WINDOWS
+	char * FILE_NAME = "\\arkanoid.txt";
+	char * HOME = "HOMEPATH";
+
+	#elif LINUX
+	char * FILE_NAME = "/.arkanoid.txt";
+	char * HOME = "HOME";
+	#endif
+
+
+	char bufor[48];
+
+	if (!getenv(HOME)) exit (1);
+
+	//file=(char *)malloc(strlen(getenv(HOME)+strlen(FILE_NAME)+1));
+	file=(char *)malloc(strlen(getenv(HOME))+strlen(FILE_NAME)+1);
+
+	strcpy(file, getenv(HOME));
+	strcat(file, FILE_NAME);
+
+	FILE * f = fopen(file, "r");
+	fscanf(f, "%s", bufor);
+	fclose(f);
+	free(file);
+
+	najlepszy=atoi(bufor);
+
+// najlepszy=0;
+}
+
+
+
+
+ SDL_bool gra () {
+
+	int wykonano, rozpoczecie;
+	int px, py, kx, ky;
+	char bufor[50];
+	SDL_bool quit=SDL_TRUE;
+
+	SDL_Surface * tablica_kolorow_kafli[4];
+	SDL_TimerID uchwyt_pilki;
+	Uint32 predkosc_pilki=50, czas_zwloki=50;
+	RuchomyObiekt pilka, paletka;
+	Teczka teczka;
+//	Teczka2 teczka2;
+//	Kafel kafle[4][8];
+	int powolna_paletka=0, pauza=0;
+	SDL_Rect zrodlo, cel;
+	char level_bufor[24], score_bufor[24], lives_bufor[24], hi_bufor[24];
+
+	wynik=000;
+	pilka.ax=640/2-XPILKI/2;
+	pilka.ay=420;
+	pilka.px=pilka.ax;
+	pilka.py=pilka.ay;
+	pilka.kx=-5;
+	pilka.ky=-5;
+
+	zycia=2;
+	poziom=1;
+	//najlepszy=1000;
+
+	asm("nop");
+	ustaw_kolor_tla();
+
+	pilka.obraz=utworz_pilke();
+	//pilka.obraz = SDL_LoadBMP("ball.bmp");
+	//pilka.gumka=utworz_powierzchnie(XPILKI, YPILKI, 65, 190, 215);
+#if WINDOWS
+	pilka.gumka = SDL_LoadBMP("icon/gumka_arkanoid.bmp");
+#elif LINUX
+	pilka.gumka = SDL_LoadBMP("/usr/share/pixmaps/gumka_arkanoid.bmp");
+#endif
+	
+	SDL_SetColorKey(pilka.gumka,SDL_TRUE,getpixel(pilka.gumka,0,0));
+	rysuj_obrazek(pilka.ax, pilka.ay, pilka.obraz, 1);  // colorskey powinno byc 1
+
+	paletka.ax=640/2-XPALETKI/2;
+	paletka.ay=450;
+//	paletka.px=paletka.ax;
+	paletka.py=paletka.ay;
+
+	paletka.obraz=utworz_powierzchnie(XPALETKI, YPALETKI, 0, 0, 0);
+	paletka.gumka=utworz_powierzchnie(XPALETKI, YPALETKI, 65, 190, 215);
+
+	rysuj_obrazek(paletka.ax, paletka.ay, paletka.obraz, 0);
+
+
+	teczka.pilka=&pilka;
+	teczka.paletka=&paletka;
+
+	utworz_kafle(tablica_kolorow_kafli);
+	zaladuj_poziom(tablica_kolorow_kafli, poziom-1);
+	wyswietl_kafle();
+	gumka_kafla=utworz_powierzchnie(XKAFLA, YKAFLA, 65, 190, 215);
+
+	rozpoczecie = wykonano = 0;
+
+	sprintf (level_bufor, "%d", poziom);
+	print_text(253, 255, 100, level_bufor, 250, 0, 2);
+	sprintf (lives_bufor, "%d", zycia);
+	print_text(33, 249, 11, lives_bufor, 400, 0, 2);
+	sprintf (hi_bufor, "%d", najlepszy);
+	print_text(249, 33, 11, hi_bufor, 550, 0, 3);
+
+	//SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL);
+
+	while(!wykonano) {
+
+		SDL_Event event;
+//		SDL_KeyboardEvent zd_klawiszy;
+
+
+        if (pilka.ax+pilka.obraz->w <= 0){
+            pilka.ax=640;
+        }
+
+      while (SDL_PollEvent (&event)) {
+
+         switch (event.type) {
+
+            case SDL_KEYDOWN:
+               printf("Naciśnięto klawisz: %s\n", SDL_GetKeyName(event.key.keysym.sym));
+
+               if (event.key.keysym.sym==SDLK_ESCAPE)
+                  wykonano = 1;
+
+					if (event.key.keysym.sym==SDLK_SPACE && !rozpoczecie) {
+//						teczka.poprzedni_y=pilka.ay;
+//						uchwyt_pilki = SDL_AddTimer(predkosc_pilki, ruch_pilki, &teczka);
+						rozpoczecie = 1;
+					}
+
+                    //printf("powolna_paleka: %d", powolna_paletka);
+					if (event.key.keysym.sym==SDLK_LEFT && paletka.ax>0) {
+						printf("PALETKA LEWA\n");
+						if(powolna_paletka>=1) {
+							paletka.px=paletka.ax;
+							paletka.ax-=10;
+							przerysuj(&paletka);
+							if (!rozpoczecie) {
+								pilka.px=pilka.ax;
+								pilka.ax-=10;
+								przerysuj(&pilka);
+							}
+							powolna_paletka=0;
+						}
+					}
+					if (event.key.keysym.sym==SDLK_RIGHT && paletka.ax<(640-XPALETKI)) {
+						if(powolna_paletka>=1) {
+							paletka.px=paletka.ax;
+							paletka.ax+=10;
+							przerysuj(&paletka);
+							if (!rozpoczecie) {
+								pilka.px=pilka.ax;
+								pilka.ax+=10;
+								przerysuj(&pilka);
+							}
+							powolna_paletka=0;
+						}
+					}
+					if (event.key.keysym.sym==SDLK_r) {
+						wyswietl_kafle();
+						sprintf (score_bufor, "%d", wynik);
+						print_text(255, 255, 255, score_bufor, 10, 0, 3);
+						sprintf (level_bufor, "%d", poziom);
+						print_text(253, 255, 100, level_bufor, 250, 0, 2);
+						sprintf (lives_bufor, "%d", zycia);
+						print_text(33, 249, 11, lives_bufor, 400, 0, 2);
+						sprintf (hi_bufor, "%d", najlepszy);
+						print_text(249, 33, 11, hi_bufor, 550, 0, 3);
+						przerysuj(&paletka);
+						przerysuj(&pilka);
+					}
+
+               break;
+
+            case SDL_QUIT:
+				if (wynik>najlepszy){
+					najlepszy=wynik;
+					save_hiscore();
+				}
+				SDL_DestroyTexture(tex_screen);
+				SDL_DestroyRenderer(renderer);
+    			SDL_DestroyWindow(gWindow);
+               exit(0);
+               break;
+
+            case SDL_MOUSEMOTION:
+				break;
+
+				case SDL_MOUSEBUTTONDOWN:
+					//if (!pauza) pauza=1;
+					//else pauza=0;
+				break;
+
+				case SDL_MOUSEBUTTONUP:
+				break;
+
+            default:
+            break;
+         }
+
+		}
+
+		if (pilka.ay+pilka.obraz->h>=480){
+			printf("Nowe rozdanie!\n\n\n");
+			if(--zycia == -1){
+				wykonano=1;
+				quit=SDL_TRUE;
+				goto label;
+			}
+
+			//erase (&paletka);
+			//erase (&pilka);
+			// wymazujemy caly ekran, erase(&paletka) nie wymazuje dokladnie
+			ustaw_kolor_tla();
+			wyswietl_kafle();
+			//pisz_info(253, 255, 100, poziom, 250, 0, 2);
+			//pisz_info(33, 249, 11, zycia, 400, 0, 2);
+			//pisz_info(249, 33, 11, najlepszy, 550, 0, 3);
+			sprintf (level_bufor, "%d", poziom);
+			print_text(253, 255, 100, level_bufor, 250, 0, 2);
+			sprintf (lives_bufor, "%d", zycia);
+			print_text(33, 249, 11, lives_bufor, 400, 0, 2);
+			sprintf (hi_bufor, "%d", najlepszy);
+			print_text(249, 33, 11, hi_bufor, 550, 0, 3);
+			rozpoczecie=0;
+			pilka.ax=640/2-XPILKI/2;
+			pilka.ay=420;
+			pilka.px=pilka.ax;
+			pilka.py=pilka.ay;
+			pilka.kx=-5;
+			pilka.ky=-5;
+			paletka.ax=640/2-XPALETKI/2;
+			paletka.ay=450;
+		//	paletka.px=paletka.ax;
+			paletka.py=paletka.ay;
+
+			if(powolna_paletka>=1) {
+				paletka.px=paletka.ax;
+				paletka.ax-=10;
+				przerysuj(&paletka);
+				if (!rozpoczecie) {
+					pilka.px=pilka.ax;
+					pilka.ax-=10;
+					przerysuj(&pilka);
+				}
+				powolna_paletka=0;
+			}
+		}
+// zapobiega wywietleniu -1 zycia
+label:
+
+	//pisz_info(255, 255, 255, wynik, 0, 0, 4);
+	sprintf (score_bufor, "%d", wynik);
+	print_text(255, 255, 255, score_bufor, 10, 0, 3);
+
+
+	if (rozpoczecie) {
+		if(!pauza) {
+
+			ruch_pilki(0, &teczka);
+		}
+	}
+	powolna_paletka+=1;
+
+
+	if (!liczba_kafli) {
+		printf ("poziom zaliczony\n");
+		if (pilka.py>300 && poziom<8) {
+			poziom++;
+			printf ("rysuj nowy poziom  liczba kafli przed: %d\n", liczba_kafli);
+			zaladuj_poziom(tablica_kolorow_kafli, poziom-1);
+			wyswietl_kafle();
+			sprintf (level_bufor, "%d", poziom);
+			print_text(253, 255, 100, level_bufor, 250, 0, 2);
+			printf("liczba kafli po: %d\n", liczba_kafli);
+			//pisz_info(253, 255, 100, poziom, 180, 0, 1);
+		}
+		else if (pilka.py>300 && poziom>=8){
+			poziom=1;
+			zaladuj_poziom(tablica_kolorow_kafli, poziom-1);
+			wyswietl_kafle();
+			sprintf (level_bufor, "%d", poziom);
+			print_text(253, 255, 100, level_bufor, 250, 0, 2);
+			printf("liczba kafli po: %d\n", liczba_kafli);
+			//wykonano=1;
+		}
+//		teczka2.czas=&zwloka;
+//		uchwyt_pilki = SDL_AddTimer(czas_zwloki, zwloka_dla_pilki, &teczka2);
+	}
+
+
+
+	cel = set_rect(0, 0, obraz->w, obraz->h);
+	zrodlo = set_rect(0, 0, obraz->w, obraz->h);
+ 	tex_screen = SDL_CreateTextureFromSurface(renderer, obraz);
+	SDL_RenderClear ( renderer );
+	SDL_RenderCopy(renderer, tex_screen,&zrodlo,&cel);
+	SDL_RenderPresent(renderer);
+	SDL_DestroyTexture(tex_screen);
+
+	SDL_Delay(40);
+    //SDL_Delay(500);
+	}
+	if (wynik>najlepszy){
+		najlepszy=wynik;
+		save_hiscore();
+	}
+//	SDL_RemoveTimer(uchwyt_pilki);
+	/* przywrocenie orginalnych ustawien */
+	//SDL_EnableKeyRepeat(0, SDL_DEFAULT_REPEAT_INTERVAL);
+	return quit;
+}
+
+
+
+ int main (int argc, char ** argv) {
+
+
+
+    if (SDL_Init (SDL_INIT_VIDEO | SDL_INIT_TIMER) < 0)
+   {
+      printf ("Nie mozna zainicjowac SDL: %s\n", SDL_GetError ());
+      exit (1);
+   }
+   atexit (SDL_Quit);
+
+    gWindow = SDL_CreateWindow( "Arkanoid", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_SHOWN );
+		if( gWindow == NULL )
+		{
+			printf( "Window could not be created! SDL_Error: %s\n", SDL_GetError() );
+			exit(1);
+		}
+		else
+		{
+			renderer = SDL_CreateRenderer(gWindow, -1,0);
+			SDL_SetRenderDrawColor ( renderer ,65, 190, 215 , 255 );
+			SDL_RenderClear ( renderer );
+			//Get window surface
+			obraz = SDL_GetWindowSurface( gWindow );
+
+		}
+
+
+   /* inicjalizacja fontow */
+   if(TTF_Init()==-1) {
+      printf("TTF_Init: %s\n", TTF_GetError());
+   exit(2);
+   }
+   atexit (TTF_Quit);
+
+
+
+	#if WINDOWS
+	#define NAZWAFONTU "SpicyRice.ttf"
+	#elif LINUX
+	//#define NAZWAFONTU "/usr/share/fonts/SpicyRice.ttf"
+	#define NAZWAFONTU "/usr/share/arkanoid/SpicyRice.ttf"
+	#endif
+
+   if((font_panel = TTF_OpenFont(NAZWAFONTU, WIELKOSCFONTU)) == NULL) {
+       printf("TTF_OpenFont: %s\n", TTF_GetError());
+       exit(1);
+	}
+	if (file_exist()){
+		load_hiscore();
+	}
+	else {
+		najlepszy=0;
+	}
+	while(SDL_TRUE){
+		if (gra()==SDL_TRUE){
+			if (end()==SDL_TRUE){
+				printf ("\n\nkontynuje\n");
+				continue;
+			}
+			else break;
+		}
+	}
+	printf ("\n\nwychodze\n");
+	SDL_DestroyTexture(tex_screen);
+    SDL_DestroyRenderer(renderer);
+    SDL_DestroyWindow(gWindow);
+	return 0;
+}
+//	vi: sw=4: ts=4