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