Search
Semestrální práce spočívá ve vytvoření funkčního hráče pro deskovku TRAX . Hráči pokládají na hrací desku dílky (znáte z HW08) s vyznačenými barevnými cestami tak, aby barevně navazovaly na již položené dílky. Hráči mají přiřazenu svoji barvu a pro tu se snaží vytvořit cyklus nebo spojit protilehlé strany. Naše hra pro předmět ALP se mírně liší od oficiálních pravidel TRAXu. Platná jsou pouze pravidla uvedená na této stránce.
player.py
Výchozí stav hrací desky
Hráč se rozhodne umístit dílek na pozici 'a'. Do místa na pozici 'b' tak povedou dvě cesty stejné barvy. Hráč musí umístit nějaký dílek na pozici 'b', aby tyto cesty spojil.
Po umístění dílku na pozici 'c' vznikne na pozici 'd' stejná situace - do prázného místa vedou dvě cesty svejné barvy. Jedná se opět o vynucený tah, hráč tedy musí umístit další dílek na pozici 'd'.
Konečný stav:
base.py
draw.py
[]
[ [r1,c1,tile1], … [rn,cn,tile2] ]
r_i
c_i
tile_i
self.board
self.board[row][column]
self.board[row][col]
self.playerName
self.myColor
self.tournament
if self.tournament: #slozita strategie, chci vyhravat else: #hraju proti Brutovi, neni treba vyhrat
self.tiles
self.algorithmName
move()
> cd adresar_kde_je_balicek > python3 player.py
import draw as Drawer import sys import random import copy import base as Base class Player(Base.BasePlayer): def __init__(self, board, name, color): Base.BasePlayer.__init__(self,board, name, color) #DO NOT CHANGE THIS LINE!! self.algorithmName = "My great player" def move(self): """ return list of moves: [] ... if the player cannot move [ [r1,c1,piece1], [r2,c2,piece2] ... [rn,cn,piece2] ] -place tiles to positions (r1,c1) .. (rn,cn) """ return [] if __name__ == "__main__": boardRows = 10 boardCols = boardRows board = [ [0]*boardCols for _ in range(boardRows) ] board[boardRows//2][boardCols//2] = ["lldd","dlld","ddll","lddl","dldl","ldld"][ random.randint(0,5) ] d = Drawer.Drawer() p1 = Player(board,"player1", 'l'); p2 = Player(board,"player2", 'd'); #test game. We assume that both player play correctly. In Brute/Tournament case, more things will be checked #like types of variables, validity of moves, etc... idx = 0 while True: #call player for his move rmove = p1.move() #rmove is: [ [r1,c1,tile1], ... [rn,cn,tile] ] #write to board of both players for move in rmove: row,col, tile = move p1.board[row][col] = tile p2.board[row][col] = tile #make png with resulting board d.draw(p1.board, "move-{:04d}.png".format(idx)) idx+=1 if len(rmove) == 0: print("End of game") break p1,p2 = p2,p1 #switch players