• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Gra Kółko i krzyżyk

0 głosów
1,047 wizyt
pytanie zadane 1 lutego 2022 w Python przez Makapaka182 Nowicjusz (230 p.)

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

1 odpowiedź

+1 głos
odpowiedź 1 lutego 2022 przez Mezeon Obywatel (1,670 p.)
wybrane 3 lutego 2022 przez Makapaka182
 
Najlepsza

W linii 165 masz:

Plansza = [[None] *3, [None] *3]

A powinno być

Plansza = [[None] *3, [None] *3, [None] *3]

 

1
komentarz 3 lutego 2022 przez Makapaka182 Nowicjusz (230 p.)
Dziękuje bardzo, pomogło

Podobne pytania

0 głosów
0 odpowiedzi 1,041 wizyt
pytanie zadane 30 listopada 2021 w C i C++ przez niezalogowany
0 głosów
0 odpowiedzi 671 wizyt

93,742 zapytań

142,678 odpowiedzi

323,297 komentarzy

63,327 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...