From 9c02b167207af0be48ee52912a7286394b6b243b Mon Sep 17 00:00:00 2001 From: Sean Paeglis <s.paeglis@student.unimelb.edu.au> Date: Thu, 16 May 2019 12:52:27 +1000 Subject: [PATCH] p2 --- Snek/player/Player.py | 12 +- Snek/player/__pycache__/Player.cpython-36.pyc | Bin 1242 -> 1100 bytes Snek/util/Board.py | 164 ++++++++++++------ Snek/util/__pycache__/Board.cpython-36.pyc | Bin 2064 -> 3696 bytes 4 files changed, 120 insertions(+), 56 deletions(-) diff --git a/Snek/player/Player.py b/Snek/player/Player.py index 8f7828b..422d3ca 100644 --- a/Snek/player/Player.py +++ b/Snek/player/Player.py @@ -4,7 +4,7 @@ class Player: def __init__(self, colour): self.colour = colour - self.board = Board.Board() + self.board = Board.Board(self.colour) def on_board(self, piece, move): if piece.pos[0] + move[0] < -3 or piece.pos[0] + move[0] > 3: @@ -16,12 +16,10 @@ class Player: return True def action(self): - for piece in self.board.pieces: - if piece.colour == self.colour: - print(piece.pos) - for move in self.board.moves: - if self.on_board(piece, move) and self.board.tiles[piece.pos[1]+3+move[1]][piece.pos[0]+3+move[0]] is None: - return ("MOVE",((piece.pos),(piece.pos[0]+move[0], piece.pos[1]+move[1]))) + moves = self.board.get_moves(self.colour) + moves[0] = self.board.convert_coords_ref(moves[0]) + print(moves[0]) + return(moves[0]) def update(self, colour, action): self.board.move(action) diff --git a/Snek/player/__pycache__/Player.cpython-36.pyc b/Snek/player/__pycache__/Player.cpython-36.pyc index 91ad61beb090206b21aedef69659145b8eb9a9d3..1c5f91be7a2d1e9018a546b768e4a7af0e07b61d 100644 GIT binary patch delta 268 zcmcb`d4_}2n3tC;`sAG$(}|oLMI;y)7-|@67~&a97_%5_7_u0e88@D?XJm|;%*7N` z&&0sMz|6qF;LO0lP;3TL%aFwYR>#!LSPNF4#azRf!YIkm%m|`w7)n?`G>Fg00AU3) zXfpW~F)}bPXtEZuGB7Yiai*u1#OLOhr4|>lfcQem`FUljMJ4gc`T0dD#qmX{X}4Gl ziZTWAN;H{@*g#5H!OACBGRtstFfcGMF!C{qF!D@Z!t5%<2Qrx%tPE^ik>KRt%u<XJ hlf_uvxcM0v7>WczgwW)5EaH>vSVS4wCQo5;0|5QzIhX(d delta 411 zcmX@Zaf_4Fn3tC;bmN_vM-w?W3WzW;Fw`*CFvK&IFlI3}Gi*F(&&YUdG9Ob=Ju?FX z0|x^GgEIpIL-7U%28N1NH4Iq{S&S|WvGZyfYZ$YbY8bMZvYCpwN|<XHvsjuL85t^? zz-m}s7-Gw6LGo-hj5SQnOhtNNadwcp6h=vg6ee+o8YU1+oI#QSEXoWQWtL<RXQ-EC zNMXq4DAG$|0ZD^!3bQ0g6IdF|X9V*ZLCVvZKroo0P%oUJkSm-ag&~+hlhv<?n}LC$ zhzmq8GB7aQV)6A4bJgT1Vg+&73NllZQ;UmOKpfVBqRhOKB3=dthA7tD{4)8};vxYs zrzA5cwOEt6hz(>4ABf;*U|^X1o=JwEhk=2Cfsv1qhmnhskI`ka7_+MoND`(RWO9+n l<XmPcMybgi%x>Hu6N^BBUL-nMfkk}s2WC-5j>&8+ZU7vsQNREI diff --git a/Snek/util/Board.py b/Snek/util/Board.py index 89fecd5..e73cbc9 100644 --- a/Snek/util/Board.py +++ b/Snek/util/Board.py @@ -1,52 +1,118 @@ from Snek.util import Piece class Board: - # List of move directions - moves = [(-1,0), (0,-1), (1,-1), (1,0), (0,1), (-1,1)] - - def __init__(self): - - # List of exit tiles for each colour - self.exit_tiles = {'red':[(3,-3), (3,-2), (3,-1), (3,0)], - 'green':[(-3,3),(-2,3),(-1,3),(0,3)], - 'blue':[(0,-3),(-1,-2),(-2,-1),(-3,0)]} - - self.tiles = [[None for i in range(7)] for j in range(7)] - self.tiles[0][0] = 0 - self.tiles[0][1] = 0 - self.tiles[0][2] = 0 - self.tiles[1][0] = 0 - self.tiles[1][1] = 0 - self.tiles[2][0] = 0 - self.tiles[4][6] = 0 - self.tiles[5][5] = 0 - self.tiles[5][6] = 0 - self.tiles[6][4] = 0 - self.tiles[6][5] = 0 - self.tiles[6][6] = 0 - - # List of pieces on the board - self.pieces = [] - for i in range(0,4): - self.pieces.append(Piece.Piece((-3,i),"red")) - - for i in range(0,4): - self.pieces.append(Piece.Piece((i,-3),"green")) - - j = 3 - for i in range(0,4): - self.pieces.append(Piece.Piece((i,j),"blue")) - j = j - 1 - - for piece in self.pieces: - self.tiles[piece.pos[1]+3][piece.pos[0]+3] = piece - - #print self.tiles - - - def move(self, action): - if action[0] == 'MOVE' or action == 'JUMP': - piece = self.tiles[action[1][0][1]+3][action[1][0][0]+3] - self.tiles[action[1][0][1]+3][action[1][0][0]+3] = None - self.tiles[action[1][1][1]+3][action[1][1][0]+3] = piece - self.tiles[action[1][1][1]+3][action[1][1][0]+3].pos = action[1][1] \ No newline at end of file + # List of move directions + directions = [(-1,0), (0,-1), (1,-1), (1,0), (0,1), (-1,1)] + + def __init__(self, colour): + + self.colour = colour + + # List of exit tiles for each colour + self.exit_tiles = {'red':[(6,0), (6,1), (6,2), (6,3)], 'green':[(0,6),(1,6),(2,6),(3,6)],'blue':[(3,0),(2,1),(1,2),(0,3)]} + + self.tiles = [[None for i in range(7)] for j in range(7)] + self.tiles[0][0] = 0 + self.tiles[0][1] = 0 + self.tiles[0][2] = 0 + self.tiles[1][0] = 0 + self.tiles[1][1] = 0 + self.tiles[2][0] = 0 + self.tiles[4][6] = 0 + self.tiles[5][5] = 0 + self.tiles[5][6] = 0 + self.tiles[6][4] = 0 + self.tiles[6][5] = 0 + self.tiles[6][6] = 0 + + # List of pieces on the board + self.pieces = {'red':[], 'green':[], 'blue':[]} + + for i in range(3,7): + self.pieces['red'].append(Piece.Piece((0,i),"red")) + + for i in range(3,7): + self.pieces['green'].append(Piece.Piece((i,0),"green")) + + j = 6 + for i in range(3,7): + self.pieces['blue'].append(Piece.Piece((i,j),"blue")) + j = j - 1 + + for piece in self.pieces['red']: + self.tiles[piece.pos[1]][piece.pos[0]] = piece + + for piece in self.pieces['green']: + self.tiles[piece.pos[1]][piece.pos[0]] = piece + + for piece in self.pieces['blue']: + self.tiles[piece.pos[1]][piece.pos[0]] = piece + + j = 6 + for i in range(3,7): + print(self.tiles[i][0]) + print(self.tiles[0][i]) + print(self.tiles[j][i]) + j = j - 1 + + #print self.tiles + + + def get_moves(self, colour): + valid_moves = [] + for piece in self.pieces[colour]: + + # If the piece is on an exit tile, return that piece + if piece.pos in self.exit_tiles[piece.colour]: + valid_moves.append(('EXIT', piece.pos)) + p_r = piece.pos[1] + p_q = piece.pos[0] + + # Otherwise, try all moves and return valid ones + for direction in self.directions: + if not self.on_board(piece, direction): + continue + + if self.tiles[p_r + direction[1]][p_q + direction[0]] is None: + valid_moves.append(('MOVE',((p_q, p_r),(p_q + direction[0], p_r + direction[1])))) + continue + + direction = (direction[0]*2, direction[1]*2) + if self.on_board(piece, direction): + if self.tiles[p_r + direction[1]][p_q + direction[0]] is None: + valid_moves.append(('JUMP',((p_q, p_r),(p_q + direction[0], p_r + direction[1])))) + + return valid_moves + + def on_board(self, piece, direction): + if piece.pos[0] + direction[0] < 0 or piece.pos[0] + direction[0] > 6: + return False + + elif piece.pos[1] + direction[1] < 0 or piece.pos[1] + direction[1] > 6: + return False + + return True + + def convert_coords_local(self, action): + if action[0] == 'EXIT': + return (action[0], (action[1][0], action[1][1])) + + return (action[0], ((action[1][0][0]+3, action[1][0][1]+3), (action[1][1][0]+3, action[1][1][1]+3))) + + def convert_coords_ref(self, action): + if action[0] == 'EXIT': + return (action[0], (action[1][0], action[1][1])) + + return (action[0], ((action[1][0][0]-3, action[1][0][1]-3), (action[1][1][0]-3, action[1][1][1]-3))) + + def move(self, action): + + if action[0] == 'MOVE' or action == 'JUMP': + piece = self.tiles[action[1][0][1]][action[1][0][0]] + self.tiles[action[1][0][1]][action[1][0][0]] = None + self.tiles[action[1][1][1]][action[1][1][0]] = piece + self.tiles[action[1][1][1]][action[1][1][0]].pos = action[1][1] + + elif action[0] == 'EXIT': + piece = self.tiles[action[1][0][1]][action[1][0][0]] + self.tiles[action[1][0][1]][action[1][0][0]] = None diff --git a/Snek/util/__pycache__/Board.cpython-36.pyc b/Snek/util/__pycache__/Board.cpython-36.pyc index d7b6d407082d4b6a3dd1d816ff2019a5e701dd54..803df5803e155c9ffd9182a00dfdeb7b5bf7d4e1 100644 GIT binary patch literal 3696 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 Dw2-TJ literal 2064 zcmXr!<>l&Ge<#L^je+4Y0}^0nU|?`yU|=YgV_;xNVMt-jVaR2SVq|1+XGmd6VQyha zVQyxMVoG5NX3%7P3DT&^c#Ab4Gc`Fi8N`EOc9=Oj3=9mZ3{i|J3{gxeoGIKXyeWJs z{3(LzY*EZ9%qc7_3{fm8tSM|Q3{k8p?7<A0Lbq6*@)L_vUNSN;Fcg7^WDo%|n1z9X z0c5Z<$bs7!85mLoQiM`OQbf~PQp8gvQ>0U5(pggEQWR5EQq<B}Qds9O*D%C0q_Cy1 zw=k42rf@Vfx-c{|)-c2~rLfd6WHF_%NHV0b*f1dRm{E94a2_*?N)QjBk_knQQ<5Qt z3$Bk_k|BlL24(|@hmhlvWJuwJ%Yk?Zl^`CM4MRFZ4MRM0g-!`$3QG!SGm{HLtXwT) z4MP@l7E1|h7Hf)n4PzQp3QsdrGb1Cz1ct&d;S9J{*D$7Nq%o!NLRB*sDupwoFxE0v zm>`+2hHQQfV+~UpQwkqMM-5X7vjjse(*(xCkZ^_yBak~>7-BVQnQNFq;aS6+#g+mJ z8%A*kNd_<v6vB++3^oiC7z^9N8B!R688kKhUV_ruOD0eZgCZ3i&6>=&n2S<VZn35p zrKaZHVoAy=O@&82NGU4=14A$<>OpA}6fm)3wTz%N+QLx6kirCs+=)zuptQ-1q7!5r zSf>C312{-yIY2t0Y8m}jGH5d0V$w6X#h6*d1#%RK_+_l0k)NBYU!0nlryo$1pI(%h zo12-JuJ7onUyxW-qMM{2oR^xdUs{rxqYqB9dIgogxNLGVi%XL8a|`VFKyC#&oQ<JM z7os3OJ~J<~BtBlxCMQ2RF{jv051|~1`4W`MK^dzkF)uw;lc|WCfq~%`V-~`3MZ6$q zf@}ccVyG=jgl#F}XJBA>2@3R=Y#<gWP>Vp;6>)$}<OGTR{r~^JCQ}huN)#mU4@p1_ zB=8?eK%9Yr0j3(1Q;R@aG?~B@#0-!YO{O9c1rdO10a0K9O(t*(0JFjRU;-ecionW1 znl+gaY=~(fDVWJ1HcT^EAKWnzQT8aV)QZfK_>#<=)Z!vgO1Q-eX5V5f0F__Gx7ZR3 z3R3e@ia?=xi@6}bSd--zOL1yWS`iN@Yy?4(zzSB277@2NU=a%n$zn55Va3eF$i*nc zB*Mst9Wt{q3NXqsfiMfB0HXvW9}^E_6(4F0CWD*;HjROS0TgNAqVE<1149jC3Zo=L z3R5;yu}BSL3UfA7(X|?eERZ-j%Ylj{Nrn_wa7JVV7jz)?APg3(WlCWnUcC)N4HJ@T zkPRRVHmL?;I*1Q7-3I0g7D;3~Kq^2Ohb~Emct&vXz~%=|4Yyc){li>uv3Q001{8t( z4o)7LOhpo)$dCr5I_4r7P@J$OCYNO9=M~9<BtTgg5<Q?Sa*HK5zbsWBloLS`42&X- zdSF<^1qo@8v>!NG!BQ7E*?<xgED?g(Fcn~TfCMy|AZ`MwhABjr1gQb5&}0Lpj=aR& z)cE*YT=DU_`6;D2AU02Yd|_!~4pfE}<dEVbP|;STgz68F!y)+{RE~jgF(~VDFbObm tXcU3?ewxg;I6;Mx9;h$^r(du*Bpkr{!2~!&IBXzJumd?ATypR*0RS|ahoJxf -- GitLab