Измене направљених игрица¶
Када смо правили игрице „Погађање речи” и „Икс-окс” рекли смо да ћемо се вратити поново да их поправимо. Позиваћемо се на последње написане програме из тих лекција и користићемо их само као примере. Охрабрујемо те да ти те измене правиш на свом програму.
Игра „Погађање речи”¶
Последњи код за ову игру који смо приказали је следећи
Главни проблем овог решења био је то што други играч може да види скривену реч коју је задао први играч, што чини даље погађање бесмисленим 🥲.
Тај проблем решавамо коришћењем конзоле и њеним брисањем пре сваког потеза:
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 колона која је попуњена црвеним и плавим жетонима, а празно поље је представљено белим кругом:
Ова игра мало је тежа за имплементацију: потребно је одредити у које поље ће упасти жетон када играч изабере једну колону и како на основу стања табле одредити да ли има победника. Остало је све веома слично игри „Икс-окс”.