Seminární skupina Stančík IB111 Úvod do programování

4. domaci uloha

Jednorozmerné piškvorky

Naprogramujte hru jednorozmerné piškvorky. Hra bude pre 2 hráčov a bude mať stanovený počet polí. Hra bude prebiehať človek vs. počítať. Kto začína bude uvedené parametrom, alebo bude vygenerované náhodne. Každý hráč do prázdného políčka zadáva rovnaký znak. Ak po pridaní znaku bude, počet znakov vedľa seba rovný alebo väčší ako 3, hráč vyhráva.

Program na začiatku každého ťahu vypíše hracie pole. Pod hracím polom bude každá pozícia očíslovaná, preto každý znak poľa vypisujte min. na 3 znaky. Viz nižšie. Ak nájde minimálne 3 zhodné znaky za sebou, tak vypíše hráča (posledného), ktorý hral a vyhral. Ak nenájde 3 za sebou zhodné znaky, tak vypíše meno hráča, ktorý je na ťahu a vyžiada si od neho pozíciu, kam má hrať. V prípade, že hráč zadá pozíciu, kam hrať nemôže (mimo hracie pole, alebo obsadené), vypíše program chybovú hlášku a opakovane od hráča žiada novú pozíciu.
Ak je na ťahu počítač, mal byť jeho krok byť aspoň trochu strategický. To znamená, ak má možnosť vyhrať, tak zadá pozíciu, aby vyhral a zároveň ak vyhrať možnosť nemá to, snaží sa vybrať pozíciu tak, aby súper v nasledujúcom kole nevyhral. Možné varianty:

  1. Pozícia sa generuje náhodne, ale zároveň nie chybne => 20 bodov
  2. Pozícia sa vyberá, aby počítač ihned vyhral, alebo neprehral v ďalšom kole => 25 bodov
  3. Pozícia sa vyberá na zakláde sofistikoveného algoritmu, aby počítač vyhral => 26-28 bodov (nutnosť komentáru algoritmu)
  4. Viz 2. + hra 2 počítačov => 27 bodov

Doporučené funkcie

Je dobré čásť kódu dekom

  • tictactoe(26, who_starts='h') - funkcia na spustenie hry.
    Parameter who_starts: h-clovek, c-pocitac, 0-nahodne
  • strategy(state) - funkcia, ktorá vráti pozíciu, kde má počítač hrať.?
    Parameter state: seznam s hracím polom.
  • show_state(state) - funkcia na výpis hracieho poľa.
  • Funkcie, ktoré kontrolujú, čí niekto vyhral, pripadne čí je ťah validný.

tictactoe(26, who_starts='h')
 _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _
 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

Na tahu: hrac
Zadaj tah: 1

 X  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _
 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26


Na tahu: pocitac
Zahral poziciu: 4

 X  _  _  X  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _
 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

Na tahu: hrac
Zadaj tah: 6

 X  _  _  X  _  X  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _
 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26


Na tahu: pocitac
Zahral poziciu: 5

 X  _  _  X  X  X  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _
 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

Prehral si!

Úlohu odovzdávajte do odevzdávarne 4. úkolu do 23. 11. 23:59