View difference between Paste ID: V3CXhCRW and hdSD0QiH
SHOW: | | - or go back to the newest paste.
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()