from random import randint #kvuli nahodnym tahum pocitace import math #kvuli zaokrohlovani nahoru import sys #kvuli vypnuti skriptu v pripade, ze hraci pole ma spatne rozmery #Pouzivam globalni promenne. #Podle internetu to neni idealni. #Ale ostatnim metodam bud nerozumim, nebo mi pripadaji slozitejsi. def first_state(size): #prvni (prazdny) vypis global state global state_number global state_number_decimal state = [] state_number = [] state_number_decimal = math.ceil(size/10) #abych vedel kolik bude cisel oznacujicich destiky - treti radek vypisu cislo = 0 if size > 3 and size < 50: for i in range(size): state.append("_") #do vsech policek dle zadane velikosti dame podtrzitko if size > 10: #vygenerujeme ciselne popisky k polickum while cislo != (state_number_decimal-1): for k in range(0,10): state_number.append(k) cislo += 1 x = size-(10*(state_number_decimal-1)) for m in range(x): state_number.append(m) else: for n in range(size): state_number.append(n) print(*state) print(*state_number) else: #pokud nebude hraci pole splnovat rozmery print("Zvolte prosim velikost hraciho pole v rozmezi 3 - 50") sys.exit() def decimal_number(size): for j in range(state_number_decimal): print(" ",j," |", end="") def show_state(size): #vypise stav hry (3 radky + odsazeni) print(*state) print(*state_number) decimal_number(size) print() print() def game_round(size): #provede jedno kolo hry print("Na tahu: ", who) tah = int(input("Zadej tah: ")) if tah >= size: #pro pripad, ze hrac zada cislo mimo rozsah error = True while error == True: print("Takove policko tu neni. Smula :( ") tah = int(input("Zadej opravny tah: ")) if tah < size: state[tah] = "*" show_state(size) return False else: if state[tah] == "*": #pro pripad, ze hrac zada cislo, ktere uz je zahvezdickovane error = True while error == True: print("Toto pole uz je obsazene! Vyberte jine.") tah = int(input("Zadej opravny tah: ")) if state[tah] != "*": state[tah] = "*" show_state(size) return False else: state[tah] = "*" show_state(size) def strategy(size): #hrani pocitace. global magicnumber rnumber = randint(0, size-1) if state[rnumber] == "*": #pokud bude nahodne cislo jiz obsazene, tak musi zvolit jine error = True while error == True: rnumber = randint(0, size-1) if state[rnumber] != "*": state[rnumber] = "*" magicnumber = rnumber return False else: state[rnumber] = "*" magicnumber = rnumber #Kompjutr vubec nemysli a praska tam nahodna cisla. #Delal jsem ukol na posledni chvili a uz nebyla mentalni sila na programovani AI. def tictactoe(size, human_starts): global who first_state(size) decimal_number(size) print() print() #vypise prvotni vypis while is_won(state, size) == False: #pokud zatim nikdo nevyhral, tak se hraje if human_starts == True: #urcuje jestli hraje hrac nebo pocitac a strida je who = "Jirka" human_starts = False else: who ="Dasa" human_starts = True game_round(size) else: if who == "Jirka": print("Jirka vyhral. Urcite podvadel") else: print("Vyhrala jsi!") print("Dasenka je sikulkaaaaaa.") def is_won(state, size): #funkce zkouma, jestli uz jsou vedle sebe 3 hvezdicky a vyhlasuje viteze for u in range(size-2): #koukneme na vsechny pozice a pokud se najdou 3 hvezdicky za sebou, tak mame viteze if state[u] == "*" and state[u+1] == "*" and state[u+2] == "*": return True return False tictactoe(10, human_starts=True)