You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

5.3 KiB

ondra.py

# Zdar, tady Lukáš
# Taky je v tvém kódu přímo vidět nějaký ten vliv toho C# nebo tak něčeho, 
# protože pojmenováváš věci s velkým písmenem na začátku. Dále jsi také s pojmenováváním trošku nekonzistentní.
# V Pythonu jsou zvyky trochu jiné, ale chyba to samozřejmě není.

# Dobrý, akorát k tomu mám jednu připomínku  
# tady ukládáš data rovnou v jejich výsledném formátu, ale smysluplnější je ukládat
# data v nějakém jednodušším formátu, který je pak před vypsáním do výsledného formátu převeden,
# protože takto musíš porovnávat políčka s jejich výslednými formáty
board = ["[ ]", "[ ]", "[ ]",
         "[ ]", "[ ]", "[ ]",
         "[ ]", "[ ]", "[ ]"]
player_2 = False
Hra = True
kolo = 1
winner_2 = None

# Lukáš - Docela fajn, vypadá to čitelně
#spuští funkce ve správném pořadí
def tah():
    Tah = Input_pos()
    while Input_chack(Tah) == False: # gay protoze input chack vraci bool - Dawid
        Tah = Input_pos()
    Move(Tah)
    Show()

#zobarí hrací desku
def Show(): # Lukáš - bylo by lepší, kdyby Show bralo board jako argument
    print(board[0], board[1], board[2], sep="")
    print(board[3], board[4], board[5], sep="")
    print(board[6], board[7], board[8], sep="")
    print("_________")

#vrátí array s xy informací o tahu
def Input_pos():
    player = int(player_2) + 1
    print("hráč", player, "hraje")
    vert = int(input("zadej sloupec (max 3)"))
    while vert > 3:
        print("vstup nesmí být větší než 3")
        vert = int(input("zadej sloupec (max 3)"))
    hor = int(input("zadej řádek (max 3)"))
    while hor > 3:
        hor = int(input("zadej řádek (max 3)"))
        print("vstup nesmí být větší než 3")
    tah = [vert, hor]
    return To_Index(tah)

#změní políčko
# Lukáš - tady bereš tah jako argument, ale proč ne board? je to pak takový podivně globální
def Move(tah):
    if Input_chack(tah):
        if player_2:
            x = "O"
        else:
            x = "X"
        board[tah] = "[" + x + "]"
    else:
        pass

# Lukáš - a v tvém komentáři je děsivá pravopisná chyba :^)
# Lukáš - i programátor musí umět pravopis, i když všichni už víme, že programovací jazyky dávají mnohem větší smysl
# Lukáš - (jedna kamarádka mi pořád opravuje chyby, takže už mi to teď taky dost vadí)
#skontroluje platnost vstupu
def Input_chack(index):
    if not board[index] == "[ ]":
        print("pole je již obsazené")
        return Falsetsko
    else:
        return True

#převede array s xy pozicí do indexu
def To_Index(tah):
    index = tah[0] + ((tah[1] - 1) * 3) - 1
    return index

# Lukáš - tohle by se dalo udělat za pomocí cyklů mnohem snadněji, příště to zkus nějak chytřeji
# Lukáš - jakmile začneš psát kód, který se nějak podivně opakuje, tak zkus popřemýšlet, jak by to šlo lépe
# Lukáš - taky by bylo lepší, kdyby Chack bralo board jako argument, je to flexibilnější a znovu použitelné
#skontroluje zde hráč nevyhrál
# Lukáš - další děsivá pravopisná chyba
def Chack():
    if board[0] == board[1] and board[0] == board[2] and not board[0] == "[ ]": #123
        if board[0] == "[X]":
            return True
        else:
            return False
    elif board[3] == board[4] and board[3] == board[5] and not board[3] == "[ ]": #456
        if board[3] == "[X]":
            return True
        else:
            return False
    elif board[6] == board[7] and board[6] == board[8] and not board[6] == "[ ]": #789
        if board[6] == "[X]":
            return True
        else:
            return False
    elif board[0] == board[3] and board[0] == board[6] and not board[0] == "[ ]": #147
        if board[0] == "[X]":
            return True
        else:
            return False
    elif board[1] == board[4] and board[1] == board[7] and not board[1] == "[ ]": #258
        if board[1] == "[X]":
            return True
        else:
            return False
    elif board[2] == board[5] and board[2] == board[8] and not board[2] == "[ ]": #369
        if board[2] == "[X]":
            return True
        else:
            return False
    elif board[0] == board[4] and board[0] == board[8] and not board[0] == "[ ]": #159
        if board[0] == "[X]":
            return True
        else:
            return False
    elif board[2] == board[4] and board[2] == board[6] and not board[2] == "[ ]": #357
        if board[2] == "[X]":
            return True
        else:
            return False
    else:
        return None

Show()
while Hra:
    tah()
    if not Chack() == None: 
        # Lukáš - tohle je neskutečně matoucí, nechápu proč ti Chack vrací None nebo bool a ne True/False, to by bylo mnohem srozumitelnější
        # Lukáš - ty dokonce ten možný True/False výsledek z Chack ani nevyužiješ
        # Lukáš - mimochodem, když porovnáváš == None, tak je vhodnější použít is None (porovnání identity objektu), protože None existuje pouze jenom jedno pro celý vesmír          
        Hra = False
        if player_2:
            print("Hráč 2 wyhrál v kole", kolo)
        else:
            print("Hráč 1 wyhrál v kole", kolo)
    player_2 = not player_2 # Lukáš - inteligentní
    kolo += 1
    if kolo > 8: # Lukáš - taky inteligentní
        Hra = False
        print("Hra skončila bez výsledku")