Piškvorky v Pythone

Piškvorky hrajú dvaja hráči proti sebe na štvorcovej sieti. Úlohou hráčov je vytvoriť za sebou 5 rovnakých symbolov vodorovne, zvislo alebo po diagonálach. Keď sa podarí projekt vytvoriť, pokúsime sa doplniť aj možnosť hrať proti počítaču.

  1. Nakreslenie prázdneho plánu štvorčekov, s rozmermi 15×15.
  2. Nastavenie hráča, ktorý je prvý na ťahu.
  3. Kliknutie na štvorček, kam chceme nakresliť symbol. Ak je štvorček voľný, nakreslí symbol a vyhodnotí, či je 5 rovnakých symbolov za sebou. Ak je, zmení skóre a opakuje sa bod 1, inak sa opakuje bod 3 s iným hráčom.

Nakreslenie plánu

Popis grafických príkazov modulu tkinter.

V úvode programu naimportujeme modul tkinter a vytvoríme plátno, na ktoré budeme kresliť.

import tkinter
platno=tkinter.Canvas(height=500, width=700)
platno.pack()

Vytvoríme procedúru plan. Nakreslíme 15 vodorovných a 15 zvislých čiar v prijateľných rozostupoch. Po vyskúšaní viacerých rozostupov som sa rozhodol pre rozostup 30. Na rôznych zariadeniach môže byť optimálny rozostup rôzny.

def plan():
      for i in range(15):
           x=i*30 
           platno.create_line(x, 0, x, 450)
           platno.create_line(0, x, 450, x)

Pred koniec programu dáme volanie procedúry plan.

Na koniec programu dáme príkaz tkinter.mainloop(). Program bude čakať na udalosti, na ktoré bude reagovať.

Program spustíme a otestujeme, či sa vykreslí plán. Ak sa nám plán nebude páčiť, upravíme parametre a znova program spustíme, kým nebudeme s dizajnom plánu spokojní.

Kliknutie na štvorček

Vytvorenie procedúry klik, ktorá po kliknutí myšou vykreslí symbol hráča, ktorý štvorček obsadil. Pred koniec programu dáme čakanie na udalosť kliknutie ľavým tlačidlom myši: platno.bind(‚<Button-1>‘, klik)

Keď budeme symbol umiestňovať presne tam, kam sme klikli, symboly budú na pláne umiestnené neusporiadane a pri nepresnom kliknutí môžu zasahovať aj do iných štvorčekov. Preto procedúru kliknutia upravíme tak, aby poloha symbolu bola korigovaná presne do stredu. Vľavo je nekorigovaný variant vpravo korigovaný.

def klik(mys):

    global farba,hrac,pole
    x=mys.x
    y=mys.y
    x=x//30
    xs=x*30+15 
    y=y//30
    ys=y*30+15
    if pole[x][y]==0:
        pole[x][y]=hrac
        platno,.create_text(xs,ys,text='X',font='Arial 20',fill=farba)
        if vyhodnot(x,y,hrac,pole)<5:
           hrac=hrac+1
           if hrac>2:
              hrac=1
              farba='red'
          else:
              farba='blue'
        stav()

Stlačenie ľavého tlačidla myši zavolá funkciu klik, pričom jej odovzdá informáciu, na akú pozíciu sme klikli. Skôr, než sa symbol vykreslí, otestujeme, či už políčko nie je obsadené. Obsadenosť políčka možno zisťovať buď tak, že zistíme, akej farby je bod, na ktorý sme klikli, efektívnejšie bude, ak vytvoríme premennú pole so zoznamom políčok, ktoré majú na začiatku hodnotu 0 a po kliknutí sa do príslušného políčka zapíše číslo hráča, ktorý políčko obsadil. Na začiatok programu musíme pridať vytvorenie a nastavenie premennej pole. Ak políčko nebolo obsadené, vyhodnotíme, či nevzniklo 5 rovnakých symbolov niektorom smere.

print

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *