Untitled
unknown
plain_text
a year ago
14 kB
1
Indexable
Never
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_ranking_wcisniety = pygame.image.load('grafiki/ranking_2.png') grafika_menu_wcisniety = pygame.image.load('grafiki/menu2.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_ranking = pygame.image.load('grafiki/ranking.png') grafika_menu = pygame.image.load('grafiki/menu.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_menu_wcisniety, (389, 600)) if click: main() else: screen.blit(grafika_menu, (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_ranking = pygame.Rect(389, 330, 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_ranking.collidepoint((myszka_x, myszka_y)): screen.blit(grafika_ranking_wcisniety, (389, 343)) if click: ranking() else: screen.blit(grafika_ranking, (389, 330)) 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()