Advertisement
PrezesSmoku

Can't Stop 2

Jun 3rd, 2023 (edited)
969
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.82 KB | None | 0 0
  1. import pygame
  2. import random
  3. #szerokość i wysokość ekranu
  4. SZEROKOSC_EKRANU = 1280
  5. WYSOKOSC_EKRANU = 960
  6.  
  7. pygame.init()
  8. ekran = pygame.display.set_mode([SZEROKOSC_EKRANU, WYSOKOSC_EKRANU])
  9. zegar = pygame.time.Clock()
  10. obraz_tla = pygame.image.load('images/mountain.png')
  11. czcionka = pygame.font.SysFont('Comic Sans MS', 35) #nazwa i rozmiar czcionki
  12. obrazki_kosci = []
  13. #wyniki kości
  14. kosci = [1,1,1,1]
  15. #kombinacje na kościach
  16. kombinacje = []
  17. mozliwe_ruchy = []
  18. wybrane_kolumny = []
  19. zablokowane_kolumny = []
  20. for i in range(4):
  21.     obrazki_kosci.append(pygame.image.load('images/kosc-1.png'))
  22.  
  23. teksty = ["Naciśnij Spacje"]
  24. liczba_pol = [3,5,7,9,11,13,11,9,7,5,3]
  25. skok_x = 70
  26. skok_y = 50
  27. start_x = 240
  28. start_y = 900
  29.  
  30. def budowa_planszy():
  31.     #współrzędne pierwszego pola
  32.     x = start_x
  33.     y = start_y
  34.     #numer kolumny
  35.     num = 2
  36.     #Operacje wykonywane dla każdej kolumny
  37.     for kolumna in liczba_pol:
  38.         #modyfikacja współrzędnych
  39.         #przesuwamy x w prawo po każdej zbudowanej kolumnie
  40.         x += skok_x
  41.         #Wracamy na dół kolumny aby zacząć budować nową
  42.         y = start_y
  43.         #budowa jednej kolumny
  44.         for i in range(kolumna):
  45.             #Przesuwamy współrzędną y w górę
  46.             y -= skok_y
  47.             #rysowanie koła które będzie czarną obwódką
  48.             pygame.draw.circle(ekran, (0, 0, 0), (x,y), 22)
  49.             #rysowanie środka pola - kolor dowolny
  50.             #ważne aby dać inne kolory graczom potem
  51.             pygame.draw.circle(ekran, (255, 230, 0), (x,y), 20)
  52.         #przekształcamy liczbę na tekst
  53.         numer_kolumny = czcionka.render(str(num), True,(0,0,0))
  54.         #Wyświetlamy to nad kolumną
  55.         #cofamy x odrobinę aby wyśrodkować napis
  56.         ekran.blit(numer_kolumny, (x-10,y-70))
  57.         #Przechodzimy do kolejnej kolumny
  58.         num += 1
  59.  
  60. def pokaz_teksty():
  61.     #współrzędne tekstu
  62.     x_tekstu = 800
  63.     y_tekstu = 40
  64.     #przesunięcie tekstu między linijkami
  65.     skok_tekstu = 50
  66.     for tekst in teksty:
  67.         #stworzenie linijki.
  68.         #Kolor potem zmienimy na kolor aktywnego gracza
  69.         linijka = czcionka.render(tekst, True,(0,0,0))
  70.         ekran.blit(linijka, (x_tekstu,y_tekstu))
  71.         y_tekstu += skok_tekstu
  72.  
  73. def rzut_kosci():
  74.     for i in range(4):
  75.         #losowanie dla jednej kostki
  76.         kosci[i] = random.randint(1,6)
  77.         #załadowanie obrazka o nazwie zależnej od wyniku losowania
  78.         obrazki_kosci[i] = pygame.image.load(f'images/kosc-{kosci[i]}.png')
  79.  
  80. def sprawdz_mozliwe_ruchy():
  81.     kombinacje.clear()
  82.     #Wyznaczenie wszystkich kombinacji
  83.     kombinacje.append([kosci[0]+kosci[1], kosci[2]+kosci[3]])
  84.     kombinacje.append([kosci[0]+kosci[2], kosci[1]+kosci[3]])
  85.     kombinacje.append([kosci[0]+kosci[3], kosci[1]+kosci[2]])
  86.     mozliwe_ruchy.clear()
  87.     liczba_opcji = 0
  88.     for i in range(len(kombinacje)):
  89.         # tworzymy nową pustą listę na możliwe ruchy z tej kombinacji kości,
  90.         # jeśli ruch nie będzie możliwy z tej kombinacji to
  91.         # pustą listę później usuniemy
  92.         mozliwe_ruchy.append([])
  93.         #3 pionki postawione
  94.         if len(wybrane_kolumny) == 3:
  95.             #Sprawdzamy czy pierwsza suma kości znajduje się
  96.             # w liście wybranych kolumn
  97.             if kombinacje[i][0] in wybrane_kolumny:
  98.                 mozliwe_ruchy[liczba_opcji].append(kombinacje[i][0])
  99.             #analogicznie z drugą wartością
  100.             if kombinacje[i][1] in wybrane_kolumny:
  101.                 mozliwe_ruchy[liczba_opcji].append(kombinacje[i][1])
  102.         #2 pionki postawione
  103.         elif len(wybrane_kolumny) == 2:
  104.             # Sprawdzenie czy pierwszy wynik jest już wybrany
  105.             if kombinacje[i][0] in wybrane_kolumny:
  106.                 mozliwe_ruchy[liczba_opcji].append(kombinacje[i][0])
  107.                 #Jeśli pierwsza opcja jest w liście wybranych to druga jeśli
  108.                 # nie jest zablokowana to możemy się poruszyć również w tej kolumnie
  109.                 if not kombinacje[i][1] in zablokowane_kolumny:
  110.                     mozliwe_ruchy[liczba_opcji].append(kombinacje[i][1])
  111.             #analogiczne sprawdzenie drugiego wyniku
  112.             elif kombinacje[i][1] in wybrane_kolumny:
  113.                 mozliwe_ruchy[liczba_opcji].append(kombinacje[i][1])
  114.                 if not kombinacje[i][0] in zablokowane_kolumny:
  115.                     mozliwe_ruchy[liczba_opcji].append(kombinacje[i][0])
  116.             #Jeśli obie wartości nie znajdują się w liście wybranych
  117.             #to sprawdzam czy pierwsza jest nie zablokowana
  118.             elif not kombinacje[i][0] in zablokowane_kolumny:
  119.                 mozliwe_ruchy[liczba_opcji].append(kombinacje[i][1])
  120.                 #Jeśli obie nie są zablokowane to musze je dodać oddzielnie
  121.                 # jest to przypadek gdy mamy dwa pionki na planszy
  122.                 # A dodać możemy tylko jeden, więc musimy wybrać który
  123.                 #Dlatego zwiększamy liczbę opcji i dodajemy kolejną opcję jako nową listę
  124.                 if not kombinacje[i][1] in zablokowane_kolumny:
  125.                     liczba_opcji += 1
  126.                     mozliwe_ruchy.append([kombinacje[i][1]])
  127.             #Sprawdzenie czy choć druga opcja jest dostępna
  128.             elif not kombinacje[i][1] in zablokowane_kolumny:
  129.                 mozliwe_ruchy[liczba_opcji].append(kombinacje[i][1])
  130.         #jeden lub zero użytych pionków
  131.         else:
  132.             if not kombinacje[i][0] in zablokowane_kolumny:
  133.                 mozliwe_ruchy[liczba_opcji].append(kombinacje[i][0])
  134.             if not kombinacje[i][1] in zablokowane_kolumny:
  135.                 mozliwe_ruchy[liczba_opcji].append(kombinacje[i][1])
  136.         liczba_opcji += 1
  137.     #Usunięcie pustych elementów
  138.     while [] in mozliwe_ruchy:
  139.         mozliwe_ruchy.remove([])
  140.     #wyświetlenie tekstów
  141.     teksty.clear()
  142.     for i in range(len(mozliwe_ruchy)):
  143.         teksty.append(f'{i+1}. Ruch w kolumnach {mozliwe_ruchy[i]}')
  144.        
  145.  
  146.  
  147.  
  148.  
  149. program_dziala = True
  150. while program_dziala:
  151.     for zdarzenie in pygame.event.get():
  152.         if zdarzenie.type == pygame.KEYDOWN:
  153.             if zdarzenie.key == pygame.K_ESCAPE:
  154.                 program_dziala = False
  155.             if zdarzenie.key == pygame.K_SPACE:
  156.                 rzut_kosci()
  157.                 sprawdz_mozliwe_ruchy()
  158.         elif zdarzenie.type == pygame.QUIT:
  159.             program_dziala = False
  160.    
  161.  
  162.     #wyświetl tło
  163.     ekran.blit(obraz_tla, (0,0))
  164.     #Kosci
  165.     ekran.blit(obrazki_kosci[0], (16,16))
  166.     ekran.blit(obrazki_kosci[1], (116,16))
  167.     ekran.blit(obrazki_kosci[2], (16,116))
  168.     ekran.blit(obrazki_kosci[3], (116,116))
  169.     #Plansza
  170.     budowa_planszy()
  171.     #Teksty
  172.     pokaz_teksty()
  173.     #odśwież ekran
  174.     pygame.display.flip()
  175.     zegar.tick(60) #liczba klatek na sekunde
  176.  
  177. pygame.quit()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement