Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import pygame
- import random
- #szerokość i wysokość ekranu
- SZEROKOSC_EKRANU = 1280
- WYSOKOSC_EKRANU = 960
- pygame.init()
- ekran = pygame.display.set_mode([SZEROKOSC_EKRANU, WYSOKOSC_EKRANU])
- zegar = pygame.time.Clock()
- obraz_tla = pygame.image.load('images/mountain.png')
- czcionka = pygame.font.SysFont('Comic Sans MS', 35) #nazwa i rozmiar czcionki
- obrazki_kosci = []
- #wyniki kości
- kosci = [1,1,1,1]
- #kombinacje na kościach
- kombinacje = []
- mozliwe_ruchy = []
- wybrane_kolumny = []
- zablokowane_kolumny = []
- for i in range(4):
- obrazki_kosci.append(pygame.image.load('images/kosc-1.png'))
- teksty = ["Naciśnij Spacje"]
- liczba_pol = [3,5,7,9,11,13,11,9,7,5,3]
- skok_x = 70
- skok_y = 50
- start_x = 240
- start_y = 900
- def budowa_planszy():
- #współrzędne pierwszego pola
- x = start_x
- y = start_y
- #numer kolumny
- num = 2
- #Operacje wykonywane dla każdej kolumny
- for kolumna in liczba_pol:
- #modyfikacja współrzędnych
- #przesuwamy x w prawo po każdej zbudowanej kolumnie
- x += skok_x
- #Wracamy na dół kolumny aby zacząć budować nową
- y = start_y
- #budowa jednej kolumny
- for i in range(kolumna):
- #Przesuwamy współrzędną y w górę
- y -= skok_y
- #rysowanie koła które będzie czarną obwódką
- pygame.draw.circle(ekran, (0, 0, 0), (x,y), 22)
- #rysowanie środka pola - kolor dowolny
- #ważne aby dać inne kolory graczom potem
- pygame.draw.circle(ekran, (255, 230, 0), (x,y), 20)
- #przekształcamy liczbę na tekst
- numer_kolumny = czcionka.render(str(num), True,(0,0,0))
- #Wyświetlamy to nad kolumną
- #cofamy x odrobinę aby wyśrodkować napis
- ekran.blit(numer_kolumny, (x-10,y-70))
- #Przechodzimy do kolejnej kolumny
- num += 1
- def pokaz_teksty():
- #współrzędne tekstu
- x_tekstu = 800
- y_tekstu = 40
- #przesunięcie tekstu między linijkami
- skok_tekstu = 50
- for tekst in teksty:
- #stworzenie linijki.
- #Kolor potem zmienimy na kolor aktywnego gracza
- linijka = czcionka.render(tekst, True,(0,0,0))
- ekran.blit(linijka, (x_tekstu,y_tekstu))
- y_tekstu += skok_tekstu
- def rzut_kosci():
- for i in range(4):
- #losowanie dla jednej kostki
- kosci[i] = random.randint(1,6)
- #załadowanie obrazka o nazwie zależnej od wyniku losowania
- obrazki_kosci[i] = pygame.image.load(f'images/kosc-{kosci[i]}.png')
- def sprawdz_mozliwe_ruchy():
- kombinacje.clear()
- #Wyznaczenie wszystkich kombinacji
- kombinacje.append([kosci[0]+kosci[1], kosci[2]+kosci[3]])
- kombinacje.append([kosci[0]+kosci[2], kosci[1]+kosci[3]])
- kombinacje.append([kosci[0]+kosci[3], kosci[1]+kosci[2]])
- mozliwe_ruchy.clear()
- liczba_opcji = 0
- for i in range(len(kombinacje)):
- # tworzymy nową pustą listę na możliwe ruchy z tej kombinacji kości,
- # jeśli ruch nie będzie możliwy z tej kombinacji to
- # pustą listę później usuniemy
- mozliwe_ruchy.append([])
- #3 pionki postawione
- if len(wybrane_kolumny) == 3:
- #Sprawdzamy czy pierwsza suma kości znajduje się
- # w liście wybranych kolumn
- if kombinacje[i][0] in wybrane_kolumny:
- mozliwe_ruchy[liczba_opcji].append(kombinacje[i][0])
- #analogicznie z drugą wartością
- if kombinacje[i][1] in wybrane_kolumny:
- mozliwe_ruchy[liczba_opcji].append(kombinacje[i][1])
- #2 pionki postawione
- elif len(wybrane_kolumny) == 2:
- # Sprawdzenie czy pierwszy wynik jest już wybrany
- if kombinacje[i][0] in wybrane_kolumny:
- mozliwe_ruchy[liczba_opcji].append(kombinacje[i][0])
- #Jeśli pierwsza opcja jest w liście wybranych to druga jeśli
- # nie jest zablokowana to możemy się poruszyć również w tej kolumnie
- if not kombinacje[i][1] in zablokowane_kolumny:
- mozliwe_ruchy[liczba_opcji].append(kombinacje[i][1])
- #analogiczne sprawdzenie drugiego wyniku
- elif kombinacje[i][1] in wybrane_kolumny:
- mozliwe_ruchy[liczba_opcji].append(kombinacje[i][1])
- if not kombinacje[i][0] in zablokowane_kolumny:
- mozliwe_ruchy[liczba_opcji].append(kombinacje[i][0])
- #Jeśli obie wartości nie znajdują się w liście wybranych
- #to sprawdzam czy pierwsza jest nie zablokowana
- elif not kombinacje[i][0] in zablokowane_kolumny:
- mozliwe_ruchy[liczba_opcji].append(kombinacje[i][1])
- #Jeśli obie nie są zablokowane to musze je dodać oddzielnie
- # jest to przypadek gdy mamy dwa pionki na planszy
- # A dodać możemy tylko jeden, więc musimy wybrać który
- #Dlatego zwiększamy liczbę opcji i dodajemy kolejną opcję jako nową listę
- if not kombinacje[i][1] in zablokowane_kolumny:
- liczba_opcji += 1
- mozliwe_ruchy.append([kombinacje[i][1]])
- #Sprawdzenie czy choć druga opcja jest dostępna
- elif not kombinacje[i][1] in zablokowane_kolumny:
- mozliwe_ruchy[liczba_opcji].append(kombinacje[i][1])
- #jeden lub zero użytych pionków
- else:
- if not kombinacje[i][0] in zablokowane_kolumny:
- mozliwe_ruchy[liczba_opcji].append(kombinacje[i][0])
- if not kombinacje[i][1] in zablokowane_kolumny:
- mozliwe_ruchy[liczba_opcji].append(kombinacje[i][1])
- liczba_opcji += 1
- #Usunięcie pustych elementów
- while [] in mozliwe_ruchy:
- mozliwe_ruchy.remove([])
- #wyświetlenie tekstów
- teksty.clear()
- for i in range(len(mozliwe_ruchy)):
- teksty.append(f'{i+1}. Ruch w kolumnach {mozliwe_ruchy[i]}')
- program_dziala = True
- while program_dziala:
- for zdarzenie in pygame.event.get():
- if zdarzenie.type == pygame.KEYDOWN:
- if zdarzenie.key == pygame.K_ESCAPE:
- program_dziala = False
- if zdarzenie.key == pygame.K_SPACE:
- rzut_kosci()
- sprawdz_mozliwe_ruchy()
- elif zdarzenie.type == pygame.QUIT:
- program_dziala = False
- #wyświetl tło
- ekran.blit(obraz_tla, (0,0))
- #Kosci
- ekran.blit(obrazki_kosci[0], (16,16))
- ekran.blit(obrazki_kosci[1], (116,16))
- ekran.blit(obrazki_kosci[2], (16,116))
- ekran.blit(obrazki_kosci[3], (116,116))
- #Plansza
- budowa_planszy()
- #Teksty
- pokaz_teksty()
- #odśwież ekran
- pygame.display.flip()
- zegar.tick(60) #liczba klatek na sekunde
- pygame.quit()
Add Comment
Please, Sign In to add comment