Измене направљених игрица

Када смо правили игрице „Погађање речи” и „Икс-окс” рекли смо да ћемо се вратити поново да их поправимо. Позиваћемо се на последње написане програме из тих лекција и користићемо их само као примере. Охрабрујемо те да ти те измене правиш на свом програму.

Игра „Погађање речи”

Последњи код за ову игру који смо приказали је следећи

Главни проблем овог решења био је то што други играч може да види скривену реч коју је задао први играч, што чини даље погађање бесмисленим 🥲.

Тај проблем решавамо коришћењем конзоле и њеним брисањем пре сваког потеза:

from rich.console import Console

console = Console()
skrivena_rec = input("Unesite skrivenu rec:")
pokusana_slova = []
pogodjena_slova = "_ "* len(skrivena_rec)
pobeda = False
for i in range(10):
    console.clear()
    console.print(pogodjena_slova)
    console.print("Slova koja ste već probali:", pokusana_slova)
    novo_slovo = input("Unesite novo slovo:")
    pokusana_slova.append(novo_slovo)
    pogodjena_slova = ""
    broj_pogodjenih_slova = 0
    for slovo in skrivena_rec:
        if slovo in pokusana_slova:
            pogodjena_slova += slovo + " "
            broj_pogodjenih_slova += 1
        else:
            pogodjena_slova += "_ "
    if broj_pogodjenih_slova == len(skrivena_rec):
        console.print("Bravo, pogodili ste sva slova! 🥳", style = "green bold")
        pobeda = True
        break
if not pobeda:
    console.print("Niste pogodili, tačna reč bila je", skrivena_rec, style = "red bold")

Коришћењем while петље коју смо у међувремену научили добијамо следећи програм:

from rich.console import Console

console = Console()
skrivena_rec = input("Unesite skrivenu rec:")
pokusana_slova = []
pogodjena_slova = "_ "* len(skrivena_rec)
pobeda = False
for i in range(10):
    console.clear()
    console.print("Imate još", 10-i, "poteza.", style = "blue italic")
    console.print(pogodjena_slova)
    console.print("Slova koja ste već probali:", pokusana_slova)
    novo_slovo = input("Unesite novo slovo: ")
    while novo_slovo in pokusana_slova :
        console.print("Ovo slovo ste već pokušali, probajte neko drugo", style = "red italic")
        novo_slovo = input("Unesite novo slovo: ")
    pokusana_slova.append(novo_slovo)
    pogodjena_slova = ""
    broj_pogodjenih_slova = 0
    for slovo in skrivena_rec:
        if slovo in pokusana_slova:
            pogodjena_slova += slovo + " "
            broj_pogodjenih_slova += 1
        else:
            pogodjena_slova += "_ "
    if broj_pogodjenih_slova == len(skrivena_rec):
        console.print("Bravo, pogodili ste sva slova! 🥳", style = "green bold")
        pobeda = True
        break
if not pobeda:
    console.print("Niste pogodili, tačna reč bila je:", skrivena_rec, style = "red bold")

Овим завршавамо игру „Погађање речи” за овај курс, али те охрабрујемо да ти наставиш са њеним развијањем 🎉.

Игра „Икс-окс”

У претходном поглављу показали смо како можемо да напишемо функцију која исцртава таблу за игру Икс-окс:

from rich.console import Console
from rich.table import Table

def ispisi_tablu(console, matrica):
    table = Table(show_lines=True, show_header=False)
    for i in range(3):
        table.add_column(justify="center", width = 3)
    for row in matrica:
        table.add_row(*row)
    console.clear()
    console.print(table) 

console = Console()
tabla = [["X", "O", " "], ["X", "X", "O"], ["O", " ", "X"]]
ispisi_tablu(console, tabla)

Када њу искористимо са кодом који смо раније писали, добијамо следећи програм:

from rich.console import Console
from rich.table import Table

def ispisi_tablu(console, matrica):
    table = Table(show_lines=True, show_header=False)
    for i in range(3):
        table.add_column(justify="center", width = 3)
    for row in matrica:
        table.add_row(*row)
    console.clear()
    console.print(table) 

igraci = ['X', 'O']
console = Console()

def ispravan_potez(red,kolona,tabela):
    if red < 3 and kolona < 3 and tabela[red][kolona] == " " :
        return True
    else:
        return False

def kraj_igre(tabela):
    for igrac in igraci:
        if tabela[0][0] == igrac and tabela[1][1] == igrac and tabela[2][2] == igrac:
            return True
        if tabela[0][2] == igrac and tabela[1][1] == igrac and tabela[2][0] == igrac:
            return True
        for i in range(3):
            if tabela[i][0] == igrac and tabela[i][1] == igrac and tabela[i][2] == igrac:
                return True
            if tabela[0][i] == igrac and tabela[1][i] == igrac and tabela[2][i] == igrac:
                return True
    return False

tabela = [[" " for i in range(3)] for j in range(3)]
ima_pobednika = False
for i in range(9):
    igrac = igraci[i%2]
    ispisi_tablu( console,tabela)
    console.print("Na potezu je igrač", igrac)
    red = int(input("Unesite red: ")) - 1
    kolona = int(input("Unesite kolonu: ")) - 1
    if not ispravan_potez(red,kolona,tabela):
        console.print("Uneli ste neispravnu poziciju, pokušajte ponovo")
        red = int(input("Unesite red: ")) - 1
        kolona = int(input("Unesite kolonu: ")) - 1
    tabela[red][kolona] = igrac
    if kraj_igre(tabela):
        ispisi_tablu( console,tabela)
        console.print("✨ Igra je gotova! Pobedio je igrač", igrac, "✨")
        ima_pobednika = True
        break

if not ima_pobednika:
    ispisi_tablu(console,tabela)
    console.print("Igra je završena nerešeno.")

Користећи конзолу и табеле пробај да направиш игру „4 у низу”.

Табла за игру може бити представљена табелом од 6 редова и 7 колона која је попуњена црвеним и плавим жетонима, а празно поље је представљено белим кругом:

4 u nizu

Ова игра мало је тежа за имплементацију: потребно је одредити у које поље ће упасти жетон када играч изабере једну колону и како на основу стања табле одредити да ли има победника. Остало је све веома слично игри „Икс-окс”.