Witam
Chcę stworzyć prostą grę - kółko i krzyżyk
Wszystko działa oprócz tego że przy ponownym restarcie gry po wygranej lub remisie wyskakuje następujący błąd:
Traceback (most recent call last):
File "C:\Users\OneDrive\Pulpit_\Python\kolkokrzyzyk\kik\kik\kik.py", line 188, in <module>
RestartujGre()
File "C:\Users\OneDrive\Pulpit_\Python\kolkokrzyzyk\kik\kik\kik.py", line 172, in RestartujGre
SprawdzPole()
File "C:\Users\OneDrive\Pulpit_\Python\kolkokrzyzyk\kik\kik\kik.py", line 154, in SprawdzPole
SprawdzWygrana()
File "C:\Users\OneDrive\Pulpit_\Python\kolkokrzyzyk\kik\kik\kik.py", line 81, in SprawdzWygrana
if ((Plansza[Wiersz][0] == Plansza[Wiersz][1] == Plansza[Wiersz][2]) and (Plansza[Wiersz][0] is not None)):
IndexError: list index out of range
Oto kod:
import pygame as pg, sys, time
from pygame.locals import*
CzyjaTura = 'x'
KtoWygral = None
Remis = False
Szerokosc = 400
Wysokosc = 400
Bialy = (255, 255, 255)
Czarny = (0, 0, 0)
Czerwony = (255, 0, 0)
PunktyX = 0
PunktyO = 0
Plansza = [ [None] *3, [None] *3, [None] * 3]
pg.init()
FPS = 30
Zegar = pg.time.Clock()
Ekran = pg.display.set_mode((Szerokosc, Wysokosc +200), 0, 32)
pg.display.set_caption("Kolko i Krzyzyk")
PlanszaStartowa = pg.image.load('planszastartowa.jpg')
ObrazekX = pg.image.load('krzyzyk.jpg')
ObrazekO = pg.image.load('kolko.jpg')
ObrazekX = pg.transform.scale(ObrazekX, (80, 80))
ObrazekO = pg.transform.scale(ObrazekO, (80, 80))
def RysujPlansze():
Ekran.blit(PlanszaStartowa, (0, 0))
pg.display.update()
time.sleep(1)
Ekran.fill(Bialy)
pg.draw.line(Ekran, Czarny, (Szerokosc /3, 0), (Szerokosc /3, Wysokosc), 7)
pg.draw.line(Ekran, Czarny, (Szerokosc /3*2, 0), (Szerokosc /3*2, Wysokosc), 7)
pg.draw.line(Ekran, Czarny, (0, Wysokosc /3), (Szerokosc, Wysokosc /3), 7)
pg.draw.line(Ekran, Czarny, (0, Wysokosc /3*2), (Szerokosc, Wysokosc /3*2), 7)
pg.display.update()
RysujDodatkoweInformacje()
def RysujDodatkoweInformacje():
global Remis
if KtoWygral is None:
TrescWiadomosci = "Twoja tura: " + CzyjaTura.upper()
else:
TrescWiadomosci = KtoWygral.upper() + " wygrales"
if Remis:
TrescWiadomosci = "Remis"
Czcionka = pg.font.Font(None, 30)
Wiadomosc = Czcionka.render(TrescWiadomosci, True, Bialy)
Punkty = "X: " + str(PunktyX) + " <---> O: " + str(PunktyO)
PunktyWiadomosc = Czcionka.render(Punkty, True, Czarny)
ObramowanieNaWiadomosc = Wiadomosc.get_rect(center = (Szerokosc /2, 500 -50))
ObramowanieNaPunkty = PunktyWiadomosc.get_rect(center = (Szerokosc /2, 600 -50))
Ekran.fill((0, 0, 0), (0, 400, 500, 100))
Ekran.blit(Wiadomosc, ObramowanieNaWiadomosc)
Ekran.blit(PunktyWiadomosc, ObramowanieNaPunkty)
pg.display.update()
def SprawdzWygrana():
global Plansza, KtoWygral, Remis
for Wiersz in range (0,3):
if ((Plansza[Wiersz][0] == Plansza[Wiersz][1] == Plansza[Wiersz][2]) and (Plansza[Wiersz][0] is not None)):
KtoWygral = Plansza[Wiersz][0]
pg.draw.line(Ekran, (0, 0, 0), (0, (Wiersz +1) * Wysokosc /3 - Wysokosc /6), (Szerokosc, (Wiersz + 1) * Wysokosc /3 - Wysokosc /6), 4)
break
for Kolumna in range (0,3):
if ((Plansza[0][Kolumna] == Plansza[1][Kolumna] == Plansza[2][Kolumna]) and (Plansza[0][Kolumna] is not None)):
KtoWygral = Plansza[0][Kolumna]
pg.draw.line(Ekran, (0, 0, 0), ((Kolumna +1) * Szerokosc /3 - Szerokosc /6, 0), ((Kolumna +1) * Szerokosc /3 - Szerokosc /6, Szerokosc), 4)
break
if ((Plansza[0][0] == Plansza[1][1] == Plansza[2][2] and Plansza[0][0] is not None)):
KtoWygral = Plansza[0][0]
pg.draw.line(Ekran, (0, 0, 0), (50,50), (350,350), 4)
if ((Plansza[0][0] == Plansza[1][1] == Plansza[2][2]) and (Plansza[0][0] is not None)):
KtoWygral = Plansza[0][0]
pg.draw.line(Ekran, (0, 0, 0), (350,350), (50,50), 4)
if(all ([all (Wiersz) for Wiersz in Plansza]) and KtoWygral is None):
Remis = True
RysujDodatkoweInformacje()
def NarysujSymbol(Wiersz, Kolumna):
global Plansza, CzyjaTura
if Wiersz == 1:
PozycjaX = 30
elif Wiersz == 2:
PozycjaX = Szerokosc /3+30
elif Wiersz == 3:
PozycjaX = Szerokosc /3*2+30
if Kolumna == 1:
PozycjaY = 30
elif Kolumna == 2:
PozycjaY = Wysokosc /3+30
elif Kolumna == 3:
PozycjaY = Wysokosc /3*2+30
Plansza [Wiersz - 1][Kolumna - 1] = CzyjaTura
if (CzyjaTura == 'x'):
Ekran.blit(ObrazekX, (PozycjaY, PozycjaX))
CzyjaTura = 'o'
elif (CzyjaTura == 'o'):
Ekran.blit(ObrazekO, (PozycjaY, PozycjaX))
CzyjaTura = 'x'
pg.display.update()
def SprawdzPole():
X,Y = pg.mouse.get_pos()
if (X < Szerokosc /3):
Kolumna = 1
elif (X < Szerokosc /3*2):
Kolumna = 2
elif (X < Szerokosc):
Kolumna = 3
else:
Kolumna = None
if (Y < Wysokosc /3):
Wiersz = 1
elif (Y < Wysokosc /3*2):
Wiersz = 2
elif (Y < Wysokosc):
Wiersz = 3
else:
Wiersz = None
if (Wiersz and Kolumna and Plansza[Wiersz - 1][Kolumna - 1] is None):
global CzyjaTura
NarysujSymbol(Wiersz, Kolumna)
SprawdzWygrana()
pg.display.update()
def RestartujGre():
global Plansza, KtoWygral, CzyjaTura, Remis, PunktyX, PunktyO
time.sleep(3)
CzyjaTura = 'x'
Remis = False
if KtoWygral == 'x':
PunktyX +=1
elif KtoWygral == 'o':
PunktyO +=1
KtoWygral = None
Plansza = [[None] *3, [None] *3]
Ekran.fill(Bialy)
RysujPlansze()
SprawdzPole()
RysujPlansze()
pg.display.update()
Zegar.tick(FPS)
while (True):
for Zdarzenie in pg.event.get():
if Zdarzenie.type == QUIT:
pg.quit()
sys.exit()
elif Zdarzenie.type == MOUSEBUTTONDOWN:
if (Zdarzenie.button is 1):
SprawdzPole()
if (KtoWygral == 'x' or KtoWygral == 'o'or Remis == True):
RestartujGre()
Proszę o pomoc