Tah hráče

Je tam opravdu vše potřeba?

In [ ]:
def tah_hrace (pole):
    'Vrátí herní pole se zaznamenaným tahem hráče'
    t = 0
    while t == 0:
        pozice = int(input('Na které políčko chceš hrát? '))
        if (pozice > 0) and (pozice<=20) and (pole[pozice-1] == '-'):
            return tah(pole,pozice,'x')
            t = 1
        else:
            print('Špatně zadaná pozice, zkus to znovu.')

Není

In [ ]:
def tah_hrace(pole):
    'Vrátí herní pole se zaznamenaným tahem hráče'
    while True:
        pozice = int(input('Na které políčko chceš hrát? '))
        if (pozice > 0) and (pozice<=20) and (pole[pozice-1] == '-'):
            return tah(pole,pozice,'x')
        else:
            print('Špatně zadaná pozice, zkus to znovu.')

Vyhodnocení piškvorek

Co by se tady dalo udělat jednodušeji?

In [ ]:
def vyhodnot(pole):
    "Vyhodnotí stav pole."
    krizek = "xxx"
    kolecko = "ooo"
    volno = "-"
    if krizek in pole and kolecko not in pole:
        return("x")
    elif kolecko in pole and krizek not in pole:
        return("o")
    elif volno not in pole and krizek not in pole and kolecko not in pole:
        return("!")
    else:
        None

Upravená varianta

In [ ]:
def vyhodnot(pole):
    "Vyhodnotí stav pole."
    if 'xxx' in pole:
        return("x")
    elif 'ooo' in pole:
        return("o")
    elif '-' not in pole:
        return("!")
    else:
        return '-'

Piškvorky

In [ ]:
from random import randrange

def vyhodnot(pole):
    "Vyhodnotí stav pole."
    if 'xxx' in pole:
        return("x")
    elif 'ooo' in pole:
        return("o")
    elif '-' not in pole:
        return("!")
    else:
        return '-'

def tah(pole, pozice, symbol):
    "Vrátí herní pole s daným symbolem umístěným na danou pozici."
    return pole[:pozice] + symbol + pole[pozice + 1:]

def tah_hrace(herni_pole):
    "Ptá se hráče na kterou pozici chce hrát a vrací herní pole se zaznamenaným tahem"
    while True:
        cislo_pozice = int(input("Na kterou pozici chceš hrát? "))
        if cislo_pozice >= 0 and cislo_pozice < len(herni_pole) and herni_pole[cislo_pozice] == "-":
            return tah(herni_pole, cislo_pozice, "x")
        else:
            print("Špatná pozice, zkus to znovu. ")

def tah_pocitace(herni_pole):
    "Vrátí herní pole se zaznamenaným tahem počítače. "
    while True:
        cislo_pozice = randrange(len(herni_pole))
        if herni_pole[cislo_pozice] == "-":
            return tah(herni_pole, cislo_pozice, "o")

def piskvorky():
    "Vygeneruje prázdné pole a střídá tah hráče a počítače. "
    pole = "-" * 20
    while True:
        print(pole)
        pole = tah_hrace(pole)
        print(pole)
        if vyhodnot(pole) != '-':
            break
        pole = tah_pocitace(pole)
        if vyhodnot(pole) != '-':
            break
    
    print(pole)
    if vyhodnot(pole) == '!':
        print('Remíza!')
    elif vyhodnot(pole) == 'x':
        print('Vyhrála jsi!')
    elif vyhodnot(pole) == 'o':
        print('Vyhrál počítač!')

piskvorky()

Obecné rady a doporučení

  • Je zbytečné volat print na funkci, která nic nevrací.