Tématem semestrální práce je vytvoření hráče pro hru HIVE . Hive se hraje na hexagonálním gridu, kde hráči postupně pokládají (nebo posouvají) hrací kameny představující 5 různých druhů zvířat: včela, brouk, pavouk, kobylka, mravenec. Úkolem je obklopit protihráčovu včelu ze všech stran. Složitost HIVE spočívá v pravidlech pro pohyb jednotlivých figurek (každý druh má svoje vlastní pravidla). Naše pravidla se mírně liší od oficiálních pravidel HIVE, pro semestrální práci jsou závazná pravidla uvedena na této stránce.
Odevzdané programy budou hrát nejprve proti Brutovi a následně budou automaticky převedeny do turnaje, kde budou hrát všichni proti všem. Cílem hry proti Brutovi je hrát podle pravidel (není třeba vyhrát), avšak v turnaji bude důležitá i strategie hry.
self.algorithmName
pro rozlišení jména vašeho algoritmu, použijte self.tournament
pro zapnutí strategie (viz dále).
self.board
(co je na hrací desce)
self.myMove
(číslo tahu)
self.myPieces
(kolik figurek a kterého typu mám ještě nepoložené)
self.rivalPieces
(kolik figurek a kterého typu má ještě soupeř nevyložené)
self.board
:
self.board[p][q] = “”
(prázdná buňka)
self.board[p][q] = “a”
(na pozici (p,q) je umístěn mravenec)
self.board[p][q] = “aBb”
(na pozici (p,q) je umístěn mravenec, na něm brouk a na něm ještě jeden brouk. Barva této pozice je dána posledním broukem (tj. b)
self.board
je pouze pro čtení, hráč by neměl do této proměnné zapisovat
self.myMove
je integer udávající číslo tahu (začíná se od nuly)
self.myPieces
self.myPieces[“a”] = 3
- hráč má k dispozici 3 mravence, kteří ještě nejsou na hrací desce (hráč hrající s malými písmeny)
self.myPieces[“Q”] = 0
- hráč má k dispozici 0 včel (tj. již včelu položil) (pro hráče hrající s velými písmeny)
self.rivalPieces
:
self.myPieces
, ale pro protihráče
self.myPieces
, ale velká písmena v self.rivalPieces
, a naopak
self.myColorIsUpper
je True, pokud hráč hraje s figurkami začínajícími velkými písmeny
self.algorithmName
- řetězec, kterým hráč indikuje jméno svého programu (pro turnaj)
self.playerName
- řetězec se jménem studenta (vyplňuje Brute)
self.tournament
- je True, pokud je hráč spuštěn v turnajovém módu
self.move()
[fig, oldP, oldQ, newP, newQ]
fig
je jméno figurky (jedno písmeno, buď velké nebo malé podle typu hráče), tj. string
oldP
, oldQ
je souřadnice buňky, ze které se má přesunout figurka fig
newP
, newQ
je souřadnice buňky na kterou se má přesun provést
return [“B”, 2, 1, 2, 2]
[fig, None, None, newP, newQ]
, kde newP a newQ jsou souřadnice buňky, na kterou se má umístit figurka
return [“q”, None, None, 3, 6]
return []
self.move()
self.inBoard(p,q)
seld.isEmpty(p,q)
self.saveImage(filename)
self.move()
může trvat max. 1s
self.board
, self.myPieces
, self.rivalPieces
, self.myMove
a self.playerName
player1.move()
self.board
, self.myPieces
, self.rivalPieces
obou hráčů
player2.move()
self.board
, self.myPieces
, self.rivalPieces
obou hráčů
self.myMove
(u ubou hráčů) o jedna, a hra pokračuje
python3 player.py
self.move()
tak, aby v každém tahu umístila jednu z volných figurek na libovolnou volnou pozici na desce
True
, pokud je možné přesunou figurku z jedné pozice do druhé
self.board
, self.myPieces
, self.rivalPieces
a self.myMove
budou nastaveny správně
def move(self): if self.tournament: #program se strategii pro turnaj else: #jednodussi program pro hru na Brutovi