import pygame
import random
from pygame.locals import *
pygame.init()
screen = pygame.display.set_mode((1000, 700), 0, 32)
zegar = pygame.time.Clock()
kolor_niebieski = (0, 0, 255)
kolor_czerwony = (255, 0, 0)
kolor_zielonkawy = (71, 102, 58)
kolor_bialy = (255, 255, 255)
domyslny_font = pygame.font.SysFont(None, 45)
grafika_options_wcisniety = pygame.image.load('grafiki/options_2.png')
grafika_play_wcisniety = pygame.image.load('grafiki/play.png')
grafika_exit_wcisniety = pygame.image.load('grafiki/quit.png')
grafika_options = pygame.image.load('grafiki/options.png')
grafika_play = pygame.image.load('grafiki/play_2.png')
grafika_exit = pygame.image.load('grafiki/quit_2.png')
grafika_tlo = pygame.image.load('grafiki/tlo.png')
grafika_jablko = pygame.image.load('grafiki/jablko.png')
grafika_napis = pygame.image.load('grafiki/tekst.png')
grafika_ramka = pygame.image.load('grafiki/ramka.png')
grafiki_waz = {
'glowa_gora': pygame.image.load('grafiki/waz_glowa_gora.png'),
'glowa_dol': pygame.image.load('grafiki/waz_glowa_dol.png'),
'glowa_prawo': pygame.image.load('grafiki/waz_glowa_prawo.png'),
'glowa_lewo': pygame.image.load('grafiki/waz_glowa_lewo.png'),
'ogon_gora': pygame.image.load('grafiki/waz_ogon_dol.png'),
'ogon_dol': pygame.image.load('grafiki/waz_ogon_gora.png'),
'ogon_prawo': pygame.image.load('grafiki/waz_ogon_lewo.png'),
'ogon_lewo': pygame.image.load('grafiki/waz_ogon_prawo.png'),
'cialo_poziomo': pygame.image.load('grafiki/waz_poziomo.png'),
'cialo_pionowo': pygame.image.load('grafiki/waz_pionowo.png'),
'lewo_dol': pygame.image.load('grafiki/waz_zakret_dol_lewo.png'),
'prawo_dol': pygame.image.load('grafiki/waz_zakret_dol_prawo.png'),
'lewo_gora': pygame.image.load('grafiki/waz_zakret_gora_lewo.png'),
'prawo_gora': pygame.image.load('grafiki/waz_zakret_gora_prawo.png')
}
class Kwadrat():
bok = 50
def __init__(self, kolumna, wiersz, kolor = None, grafika = None):
self.kolumna = kolumna
self.wiersz = wiersz
self.kolor = kolor
self.grafika = grafika
def polozenie(self):
return list([self.kolumna, self.wiersz])
def rysuj(self):
print(f"self.grafika = {self.grafika}")
if self.grafika == None:
pygame.draw.rect(screen, self.kolor, (self.kolumna * self.bok, self.wiersz * self.bok, self.bok, self.bok))
else:
screen.blit(self.grafika, (self.kolumna * self.bok, self.wiersz * self.bok, self.bok, self.bok))
class ElementCiala(Kwadrat):
def __init__(self, kolumna, wiersz, kierunek):
self.kierunek = kierunek
Kwadrat.__init__(self, kolumna, wiersz)
class Snake():
def __init__(self):
self.dlugosc = 3
self.tablica = []
self.tablica.append(ElementCiala(0, 0, 'prawo'))
self.tablica.append(ElementCiala(0, 1, 'prawo'))
self.tablica.append(ElementCiala(0, 2, 'prawo'))
self.kierunek = [1, 0]
self.poprzedni_kierunek = [1, 0]
self.update_grafiki()
def update(self, jedzenie):
nowa_glowa = self.tablica[-1].polozenie()
nowa_glowa[0] += self.kierunek[0]
nowa_glowa[1] += self.kierunek[1]
self.poprzedni_kierunek = self.kierunek
if jedzenie.polozenie() == nowa_glowa:
print("teraz bede jadl")
jedzenie.kolumna = random.randint(0, 19)
jedzenie.wiersz = random.randint(0, 13)
self.dlugosc += 1
else:
print("teraz nie jem")
self.tablica.pop(0)
k = None
if self.kierunek == [1, 0]:
k = 'prawo'
elif self.kierunek == [-1, 0]:
k = 'lewo'
elif self.kierunek == [0, -1]:
k = 'gora'
else:
k = 'dol'
self.tablica.append(ElementCiala(nowa_glowa[0], nowa_glowa[1], k))
self.update_grafiki()
def update_grafiki(self):
for i in range(1, len(self.tablica) - 1):
if self.tablica[i].kierunek == 'prawo':
if self.tablica[i + 1].kierunek == 'dol':
self.tablica[i].grafika = grafiki_waz['lewo_dol']
elif self.tablica[i + 1].kierunek == 'gora':
self.tablica[i].grafika = grafiki_waz['lewo_gora']
else:
self.tablica[i].grafika = grafiki_waz['cialo_poziomo']
elif self.tablica[i].kierunek == 'lewo':
if self.tablica[i + 1].kierunek == 'dol':
self.tablica[i].grafika = grafiki_waz['prawo_dol']
elif self.tablica[i + 1].kierunek == 'gora':
self.tablica[i].grafika = grafiki_waz['prawo_gora']
else:
self.tablica[i].grafika = grafiki_waz['cialo_poziomo']
elif self.tablica[i].kierunek == 'gora':
if self.tablica[i + 1].kierunek == 'prawo':
self.tablica[i].grafika = grafiki_waz['prawo_dol']
elif self.tablica[i + 1].kierunek == 'lewo':
self.tablica[i].grafika = grafiki_waz['lewo_dol']
else:
self.tablica[i].grafika = grafiki_waz['cialo_pionowo']
elif self.tablica[i].kierunek == 'dol':
if self.tablica[i + 1].kierunek == 'prawo':
self.tablica[i].grafika = grafiki_waz['prawo_gora']
elif self.tablica[i + 1].kierunek == 'lewo':
self.tablica[i].grafika = grafiki_waz['lewo_gora']
else:
self.tablica[i].grafika = grafiki_waz['cialo_pionowo']
# grafika ogona
if self.tablica[1].kierunek == 'prawo':
self.tablica[0].grafika = grafiki_waz['ogon_prawo']
elif self.tablica[1].kierunek == 'lewo':
self.tablica[0].grafika = grafiki_waz['ogon_lewo']
elif self.tablica[1].kierunek == 'dol':
self.tablica[0].grafika = grafiki_waz['ogon_dol']
elif self.tablica[1].kierunek == 'gora':
self.tablica[0].grafika = grafiki_waz['ogon_gora']
# grafika glowy
if self.tablica[-1].kierunek == 'prawo':
self.tablica[-1].grafika = grafiki_waz['glowa_prawo']
elif self.tablica[-1].kierunek == 'lewo':
self.tablica[-1].grafika = grafiki_waz['glowa_lewo']
elif self.tablica[-1].kierunek == 'dol':
self.tablica[-1].grafika = grafiki_waz['glowa_dol']
elif self.tablica[-1].kierunek == 'gora':
self.tablica[-1].grafika = grafiki_waz['glowa_gora']
def rysuj(self):
for element in self.tablica:
print('rysuje element ciala')
print(f'grafika = {element.grafika}')
print(f'polozenie = {element.polozenie()}')
print(f'kolor = {element.kolor}')
print(f'kierunek = {element.kierunek}')
element.rysuj()
class Plansza():
def __init__(self):
self.snake = Snake()
kolumna = random.randint(0, 19)
wiersz = random.randint(0, 13)
self.jedzenie = Kwadrat(kolumna, wiersz, None, grafika_jablko)
def update(self):
glowa = self.snake.tablica[-1].polozenie()
if glowa[0] >= 20 or glowa[0] < 0 or glowa[1] >= 14 or glowa[1] < 0:
print("!!!!! Uderzenie")
return -1
for i in range(len(self.snake.tablica) - 1):
if glowa == self.snake.tablica[i].polozenie():
print("Zderzenie z samym soba")
return -1
self.snake.update(self.jedzenie)
def punkty_rysuj(self):
punkty = self.snake.dlugosc - 3
punkty_img = domyslny_font.render(str(punkty), True, kolor_bialy)
screen.blit(punkty_img, (950, 10))
def rysuj(self):
if self.update() == -1:
return -1
self.snake.rysuj()
self.jedzenie.rysuj()
self.punkty_rysuj()
def gra():
plansza = Plansza()
while 1:
# wylacza okienko gry po klijnieciu X'a
events = pygame.event.get()
for event in events:
if event.type == pygame.QUIT:
break
#obsluga klawiatury
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_DOWN:
if plansza.snake.poprzedni_kierunek != [0, -1]:
plansza.snake.kierunek = [0, 1]
if event.key == pygame.K_UP:
if plansza.snake.poprzedni_kierunek != [0, 1]:
plansza.snake.kierunek = [0, -1]
if event.key == pygame.K_LEFT:
if plansza.snake.poprzedni_kierunek != [1, 0]:
plansza.snake.kierunek = [-1, 0]
if event.key == pygame.K_RIGHT:
if plansza.snake.poprzedni_kierunek != [-1, 0]:
plansza.snake.kierunek = [1, 0]
screen.blit(grafika_tlo, (0, 0))
if plansza.rysuj() == -1:
ranking()
pygame.display.update()
zegar.tick(2)
def zapisz_wynik(wynik):
pole_wpisywania = pygame.Rect(200, 200, 140, 32)
wpisany_tekst = ''
while True:
click = False
for event in pygame.event.get():
if event.type == MOUSEBUTTONDOWN:
if event.button == 1:
click = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_BACKSPACE:
#usuwamy ostatnia litere tekstu - wytlumaczyc jak to dziala
wpisany_tekst = wpisany_tekst[:len(wpisany_tekst)-1]
else:
wpisany_tekst += event.unicode
przycisk_zapisz = pygame.Rect(389, 207.5, 222, 108)
przycisk_nie_zapisuj = pygame.Rect(389, 452.5, 222, 108)
myszka_x, myszka_y = pygame.mouse.get_pos()
if przycisk_zapisz.collidepoint((myszka_x, myszka_y)):
if click:
#zapisywanie do pliku
with open('wyniki.txt', 'a') as plik:
plik.write(wpisany_tekst+';'+str(wynik))
main()
if przycisk_nie_zapisuj.collidepoint((myszka_x, myszka_y)):
screen.blit(grafika_exit_wcisniety, (389, 465.5))
if click:
main()
screen.fill(kolor_zielonkawy)
pygame.draw.rect(screen, kolor_czerwony, pole_wpisywania)
tekst_img = domyslny_font.render(wpisany_tekst, True, kolor_bialy)
screen.blit(tekst_img, (pole_wpisywania.x + 5, pole_wpisywania.y + 5))
pygame.display.update()
def wczytaj_ranking():
plik = open('wyniki.txt')
dane = plik.read()
print(dane)
linijki = dane.splitlines()
wyniki = []
for linijka in linijki:
wyniki.append(linijka.split(';'))
return wyniki
def ranking():
wyniki = wczytaj_ranking()
click = False
while 1:
screen.fill(kolor_zielonkawy)
for i in range(len(wyniki)):
screen.blit(grafika_ramka, (250, 50 + 50* i))
nazwa_gracza = domyslny_font.render(wyniki[i][0], True, kolor_bialy)
punkty = domyslny_font.render(wyniki[i][1], True, kolor_bialy)
screen.blit(nazwa_gracza, (300, 55 + 50 * i + 5))
screen.blit(punkty, (650, 55 + 50 * i + 5))
przycisk_main_menu = pygame.Rect(389, 600, 222, 108)
click = False
for event in pygame.event.get():
if event.type == MOUSEBUTTONDOWN:
if event.button == 1:
click = True
myszka_1, myszka_2 = pygame.mouse.get_pos()
if przycisk_main_menu.collidepoint((myszka_1, myszka_2)):
screen.blit(grafika_options_wcisniety, (389, 600))
if click:
main()
else:
screen.blit(grafika_options, (389, 583))
myszka_x, myszka_y = pygame.mouse.get_pos()
if przycisk_main_menu.collidepoint((myszka_x, myszka_y)):
if click:
main()
pygame.display.update()
def main():
click = False
while 1:
screen.fill(kolor_zielonkawy)
przycisk_graj = pygame.Rect(389, 207.5, 222, 108)
przycisk_exit = pygame.Rect(389, 452.5, 222, 108)
click = False
for event in pygame.event.get():
if event.type == MOUSEBUTTONDOWN:
if event.button == 1:
click = True
myszka_x, myszka_y = pygame.mouse.get_pos()
if przycisk_graj.collidepoint((myszka_x, myszka_y)):
screen.blit(grafika_play_wcisniety, (389, 220.5))
if click:
gra()
else:
screen.blit(grafika_play, (389, 207.5))
if przycisk_exit.collidepoint((myszka_x, myszka_y)):
screen.blit(grafika_exit_wcisniety, (389, 465.5))
if click:
exit()
else:
screen.blit(grafika_exit, (389, 452.5))
screen.blit(grafika_napis, (325, 25))
pygame.display.update()
gra()