From 6fc704b601c055af8dd4ab91525ef082308a0627 Mon Sep 17 00:00:00 2001
From: Xuan Trinh <xuan.trinh@student.unimelb.edu.au>
Date: Sun, 28 Mar 2021 14:33:14 +1100
Subject: [PATCH] I did not decide when to terminate if there are no possible
 path to the target{since the piece dont know if it can get to its target or
 not, it just move}

---
 .../__pycache__/movement_logic.cpython-38.pyc | Bin 5134 -> 5602 bytes
 .../search_algorithm.cpython-38.pyc           | Bin 8704 -> 8935 bytes
 search/movement_logic.py                      |  48 +++++++++---------
 search/search_algorithm.py                    |  24 +++++----
 4 files changed, 37 insertions(+), 35 deletions(-)

diff --git a/search/__pycache__/movement_logic.cpython-38.pyc b/search/__pycache__/movement_logic.cpython-38.pyc
index a3ebab1dd81cbec0f07ea7082efc74db478d0ed9..9f65da9ba42fb18bf302ce704b42b221a4821d45 100644
GIT binary patch
literal 5602
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

literal 5134
zcmWIL<>g{vU|?9-5TC%N%E0g##6iYP3=9ko3=9m#Qy3T+QW&BbQW&EcQ<$QdQkYX%
zS{S03Q&>~jS{R~OQrJ^CS{R~OQ#ez&S{S0(Qn*uiS{S0(Q+QMOS{R}@QkbGRQ~0B}
zQUs#7Qv{=UQiP&-Q-q`VQW&H7Q$$ikTNt7QQp8fkTNt7QQzTL(TNt8*QlwI(TNt8*
zQ)E(PTNt85Qsh$PTNt85QxsAZTNt9mQj~%jG?f#Rm>3witP+dTOLJ56N)(dw^NUh4
z^Abx^6?7F66-r7Aa#9tN^Ycm)GxHRT6!J=QlTwQmG>UW-3N^W`ic(8Ti}H{)<)<l>
zWTYyT<Y%YmDI}(qq!xksiOD6I`FRSN#R|#!xdl0?C8=BrP>>1Hk(XMoP>^4o2~(F}
zTA~0oEGa*+D8&k{0i+LVG2AM36xm`Vlk$p7QWI13xQg=26>JrXxRUd8N^|oRY!wQ*
zxPo&sQ&JV6Zp+C}&rC+x0`Wn9UQVS#Vp0ysM+(JY<t6!GAC+W+1Tzv#6cUS4q2ZF6
zqEKz9plhdKR?7u<kTS@<2&|{8uB#UhCUGdKQBW{eP^eK*Fi}vb!KwzV8)628#HOl7
zLBUW#p$6=a8U+O-9EQPN12G9iVlzzv>>^VzX@<in1qB5Z(-7uxy#!^8my8Sy49Oq@
z!~<ba24QAkU~mRy5+eo%h8l(<wHk&J21$k*h7v|eh7?8#hBT&H#uBC)#%9K1y&8sK
zhCGfE<`kx8Mn;Aj#$bk(%zi~6V}1#^<`$GxBBjNZEVr18^2=|rL8APYP;y3Ua&~-q
zW=Te7UOYHa-C`{$%FHWS$rQzfNcd6gd8y^`1^LA*8H%_W7#Mz8J6pws7N-^!$GBxy
zr6$LKlCZIXfsu)BK~a8IYI2FLVN7vqVo`ENOm2QzDkvYtgHw}ULFFwjaH@&VNlhz}
z2KkZ)<Znh6MiC|sMm8o6#v)!a0!5rapcH`uwTP90fuRUgLV>*jAwbsO;)b}XC^J2y
zL><FX%p8nGe0UvY1uD)MYZ+@8iu53{mBJ(ri!mmY7&C*%7&9!!G+F#0ZUIGG5evwX
zI9<vMacOA*H~>vRZUs4wfsuugg;4?&gdo@Q<8>`+x=LY$xfFl8A`papaEF0I(Fx=-
zP}qW8298>gy97vbmjpBfDRLJ-#9b-*<$2&B^T+BiLA(w#gJeW4Xw)*o90m$HB*z)S
zqZXbS2?Uw|lH<U^7K7|McytOeFfhCXC61S%Wc(78LSBMW$V)bmvq2J|JOsiZDUcd)
z`7woofuV$<hM|VBnW>hkhN*-xo2f{ygsFtNhM}3UnX#6+hN*-lo2kgCgtdeXNsK+4
zsmQH_ql6Vnj5C|5D5`|Hgab*8E1Rh(uY|jV2}z76o2jU&gsp@dCRV~*!whmk(F9QN
z)G!A#tYq}l<hv!Bo>~%Ll$w)Rl3A7tDqX-e-7OX$SGSNNP<((3f?KRXp6(tYMWB=e
z&V;u(LIdI<VxUxhi#;?T9;D?Kr;C5MADCGL3a?vSU_MyoEgnz_l~|M-52~bAvfN??
zR|2;fD{gVXs@N!QXdwrxZz0(cRMr)N((o<*;_}SA^!So|umSOg(?HRr019wME+!5}
z9&DI}i;;z?NR_-8LJm=8a161Ou)spJhN*-V97Ajvu@+Urff7TYSj#KnD&a!X%MFep
zo)R9I7-kF=NiZ-lXz~?Fg32N(5CJNbi$LWyI1-9vKw{uHkp;0pF;OH3Vu2%09>fAg
zLJ=s8iWEUyaA1N7Y$0m2ndlHzBQHdWOY>|Pp$7_4<k*0ud1gfVu3;*Hq<L;cejz4A
z!C{67R&a2EigNU@MGID9L)7>J(IE<|@sg2C5fB?*iWGoLkrGBwY60hCp%SKGh7txy
zDFPNzDPaMNfXfT8h*=36ScDy}%cFz?EW!yFi7Md&i-1cCu&$gEo?wO)#$X0bro>1_
z1_p3@3DFb>XIceaaBH(TH77N>BsE1LJux>`AwLP!>QE>FwLUY86$*+{i&OJJvPqQ+
znI%ZA-~2oUa63n#T0x^Izg$NF(iGCH1zUw^lvaS55UUbXvJ#U)T>&Jkz{+8*eFd<K
zU<C=NkzSzyE7%l3tz%HzAFKmxDxA=@Qz$LY%u5Gr2iF7&DVas7ke)$eF<2OGYD#Ka
zW*)eR)Wc$wf`US-Ub+IPQKbW}NOTmSO$0ClBBZC6T9ORb?5D{K$(rEw2hQN&qzBI6
z;Diaz*5C{d&g$T74Ni&RbPCGgnoLDXpp2~yBET6NOn`DXxZHRPN`Ihogn^Tfk%bu(
zgH_>9cc6q0sc>r;LG9mcrhK^?a2vRW5!4dSW(sD|WUN{T_7GAc$;?SLRL})?tMZFe
zL9u}n(_rQBC{O@Z2u6gI!y>w*s5Dg}Gfg2Wza#@>FsQc$>P98zr9cxBxbKsjSdyHP
zTC9+iT2h{x3hE_-Y$*oYyppL1RB0Eng9=!tC{~b+A%rqQt98IJ#K*|MPz=(+z$U=R
z_a7{V(qjPi9zeA|xW;b*H&j5OmBN_KP%HrnzZ9lymLi!H=3r=h3M^*=2}`h?1(F;~
zHd|2)R39TmjRZqBLs1Np8rE#Kq6VlMCb$}wq6Uzf6t-XnP4=pVVDF~p6_*yJLNX>O
zv_Rekb$U}PGK)(TAUzLoItS-UuokO=#G=GpaKu<4bzWfM4Ke|u4$|edQh>z@+<feY
z>nNn=6sIbrCFT@E`r0r5{Qv*INR)wr!A+B;NE6h?`uqR?|Cj$j#Q*>Q|7)^<Ws5{W
zDO?ytfC|QtA`MX7G2UVUIR!n=I2afhBtUTn$|nqL5};N&BMXxP1Tz+a<WbT*s2vBw
z;P?Zznn5kL6h=vg8b%N)!O+ZD%LEo<0*f(8GJwTEZ8ydgrW)oNCJBZVW@(0ICUJ&Z
zmKv5|22GYk9n8`*w4flhC>~aZf*M3Pvj-wK`Q(=qtqBqz;MjzYisYv$6qlqHD5MqT
z=PHzf>{l;_j)autE98L8h6zB12SO4-qa<ME86_nJ#a8<I<>lpiMX4!CIr&MT^0!zo
zIX_oFy(lxKSU)4RA~8KbuUH?P9!m34Qi~LdA;qVaLP~xqXp{oci!D}2%P)comuIGw
zWPo+)+JPx>kGTkxmx@3Ut;uwYIWejD7ISW5g(hnhH&WO|aU+FE6jMq?6jMs&Ew-Z6
z;?kTFwA64*ASJW7Brz{JH6B_PXoHdlC=D=hi!h2XiZK=$GB7asX^P)skB?8uPmYgA
z6c6C`FQmBzE|S5eF}NTGrL7`xsSPf$!DThLm<E^7pu#zd$3HYA-rp_W$=@-^1>6cP
z0yUh9Ky^L1;02c?;N%E)0+P$&#rQ1_o80`A(wtN~P{0)HFfcH%h_W!UuyF8j@N)2R
V@PZ(y-wDU+9I{}j$ic-S3;_J6V<`Xt

diff --git a/search/__pycache__/search_algorithm.cpython-38.pyc b/search/__pycache__/search_algorithm.cpython-38.pyc
index 8b71a1b293e250952f20fa14b089c534806b984d..1b11c6f9f79a7d13a4f32d0ff668958ccc674c1b 100644
GIT binary patch
delta 2716
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

delta 2457
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

diff --git a/search/movement_logic.py b/search/movement_logic.py
index 4f3dd18..164ada9 100644
--- a/search/movement_logic.py
+++ b/search/movement_logic.py
@@ -1,6 +1,6 @@
 """
-:argument coordinate - a tuple contain 2 number (r, q)
-:return coordinate of the token after the action is complete
+:pram coordinate a tuple contain 2 number (r, q)
+:return  coordinate of the token after the action is complete
         if the new position is out of the board:
             return the token'
             s position instead.
@@ -19,12 +19,14 @@ Slide action logic:
         #             '-._.-'-._.-'
         #
 """
+from typing import Tuple
+
 ROW = 0
 COLUMN = 1
 
 
 # 1
-def slide_left(coordinate: tuple[int, int]) -> tuple[int, int]:
+def slide_left(coordinate: Tuple[int, int]) -> Tuple[int, int]:
     if coordinate:
         new_pos = (coordinate[ROW], coordinate[COLUMN] - 1)
 
@@ -32,13 +34,13 @@ def slide_left(coordinate: tuple[int, int]) -> tuple[int, int]:
             return coordinate
     else:
         print("Empty coordinate")
-        return
+        return -10, -10
 
     return new_pos
 
 
 # 2
-def slide_right(coordinate: tuple[int, int]) -> tuple[int, int]:
+def slide_right(coordinate: Tuple[int, int]) -> Tuple[int, int]:
     if coordinate:
         new_pos = (coordinate[ROW], coordinate[COLUMN] + 1)
 
@@ -47,14 +49,13 @@ def slide_right(coordinate: tuple[int, int]) -> tuple[int, int]:
 
     else:
         print("Empty coordinate")
-        return
+        return -10, -10
 
     return new_pos
 
 
 # 3
-def slide_up_left(coordinate: tuple[int, int]) -> tuple[int, int]:
-    new_pos = ()
+def slide_up_left(coordinate: Tuple[int, int]) -> Tuple[int, int]:
     if coordinate:
         new_pos = (coordinate[ROW] + 1, coordinate[COLUMN] - 1)
 
@@ -63,13 +64,13 @@ def slide_up_left(coordinate: tuple[int, int]) -> tuple[int, int]:
 
     else:
         print("Empty coordinate")
-        return
+        return -10, -10
 
     return new_pos
 
 
 # 4
-def slide_up_right(coordinate: tuple[int, int]) -> tuple[int, int]:
+def slide_up_right(coordinate: Tuple[int, int]) -> Tuple[int, int]:
     if coordinate:
         new_pos = (coordinate[ROW] + 1, coordinate[COLUMN])
 
@@ -78,13 +79,13 @@ def slide_up_right(coordinate: tuple[int, int]) -> tuple[int, int]:
 
     else:
         print("Empty coordinate")
-        return
+        return -10, -10
 
     return new_pos
 
 
 # 5
-def slide_down_left(coordinate: tuple[int, int]) -> tuple[int, int]:
+def slide_down_left(coordinate: Tuple[int, int]) -> Tuple[int, int]:
     if coordinate:
         new_pos = (coordinate[ROW] - 1, coordinate[COLUMN])
 
@@ -93,13 +94,13 @@ def slide_down_left(coordinate: tuple[int, int]) -> tuple[int, int]:
 
     else:
         print("Empty coordinate")
-        return
+        return -10, -10
 
     return new_pos
 
 
 # 6
-def slide_down_right(coordinate: tuple[int, int]) -> tuple[int, int]:
+def slide_down_right(coordinate: Tuple[int, int]) -> Tuple[int, int]:
     if coordinate:
         new_pos = (coordinate[ROW] - 1, coordinate[COLUMN] + 1)
 
@@ -108,7 +109,7 @@ def slide_down_right(coordinate: tuple[int, int]) -> tuple[int, int]:
 
     else:
         print("Empty coordinate")
-        return
+        return -10, -10
 
     return new_pos
 
@@ -159,7 +160,7 @@ Swing action logic:
 """
 
 
-def swing_to_tile_1(piece: tuple[int, int], x: tuple[int, int]) -> tuple[int, int]:
+def swing_to_tile_1(piece: Tuple[int, int], x: Tuple[int, int]) -> Tuple[int, int]:
     position = get_relative_position(piece, x)
     new_position = ()
     if position == LEFT:
@@ -188,7 +189,7 @@ def swing_to_tile_1(piece: tuple[int, int], x: tuple[int, int]) -> tuple[int, in
     return new_position
 
 
-def swing_to_tile_2(piece: tuple[int, int], x: tuple[int, int]) -> tuple[int, int]:
+def swing_to_tile_2(piece: Tuple[int, int], x: Tuple[int, int]) -> Tuple[int, int]:
     position = get_relative_position(piece, x)
 
     new_position = ()
@@ -218,7 +219,7 @@ def swing_to_tile_2(piece: tuple[int, int], x: tuple[int, int]) -> tuple[int, in
     return new_position
 
 
-def swing_to_tile_3(piece: tuple[int, int], x: tuple[int, int]) -> tuple[int, int]:
+def swing_to_tile_3(piece: Tuple[int, int], x: Tuple[int, int]) -> Tuple[int, int]:
     position = get_relative_position(piece, x)
 
     new_position = ()
@@ -248,7 +249,7 @@ def swing_to_tile_3(piece: tuple[int, int], x: tuple[int, int]) -> tuple[int, in
     return new_position
 
 
-def get_relative_position(piece: tuple[int, int], x: tuple[int, int]) -> tuple[int, int]:
+def get_relative_position(piece: Tuple[int, int], x: Tuple[int, int]) -> int:
     """
     :param x: the adjacent game object
     :argument piece: the selected game object that is presented by its position on board { (row, column)}
@@ -281,17 +282,16 @@ def get_relative_position(piece: tuple[int, int], x: tuple[int, int]) -> tuple[i
         return DOWN_RIGHT
 
 
-def compare_tile(tile1: tuple[int, int], tile2: tuple[int, int]) -> bool:
+def compare_tile(tile1: Tuple[int, int], tile2: Tuple[int, int]) -> bool:
     """
     :param tile2: compose of (row, column)
     :param tile1: compose of (row, column)
     :return true if both of the row and column are matches between 2 tiles
     """
-    return tile1[ROW] == tile2[ROW] \
-           and tile1[COLUMN] == tile2[COLUMN]
+    return tile1[ROW] == tile2[ROW] and tile1[COLUMN] == tile2[COLUMN]
 
 
-def check_within_board(tile: tuple[int, int]) -> bool:
+def check_within_board(tile: Tuple[int, int]) -> bool:
     """
     ensure that the tile is exist within the board
     :param tile: coordinate of the tile
@@ -310,7 +310,7 @@ def check_within_board(tile: tuple[int, int]) -> bool:
     return True
 
 
-def distance_between(piece: tuple[int, int], target: tuple[int, int]) -> bool:
+def distance_between(piece: Tuple[int, int], target: Tuple[int, int]) -> bool:
     """
     :argument piece - compose of (row, column)
     :argument target - compose of (row, column)
diff --git a/search/search_algorithm.py b/search/search_algorithm.py
index 9bfa2de..f970d67 100644
--- a/search/search_algorithm.py
+++ b/search/search_algorithm.py
@@ -1,6 +1,8 @@
 """
 This module is hold all method relate to Search algorithm
 """
+from typing import Dict, Set, List
+
 from search.movement_logic import *
 from search.search_algo import piece_collision
 
@@ -21,7 +23,7 @@ ROW = 0
 COLUMN = 1
 A_WIN = 1
 B_WIN = 2
-DRAW = 1
+DRAW = 0
 MAX_DISTANCE = 10
 FIRST_ENTRY = 1
 RE_ENTRY = 1
@@ -29,9 +31,9 @@ HIGHEST_RANK = 0
 
 # Global variable:
 # All the dictionary is made into global variable since all method is interact with them
-upperPiecesDict: dict[str, tuple] = {}
-lowerPiecesDict: dict[str, tuple] = {}
-setBlocks: set[tuple, ...] = set()
+upperPiecesDict: Dict[str, tuple] = {}
+lowerPiecesDict: Dict[str, tuple] = {}
+setBlocks = set()
 
 targetsDict = {}
 # keep track all the lower player's piece  <- to ensure no two Upper piece can target only one distinguish lower piece
@@ -41,7 +43,7 @@ targetedPiece = set()
 # this help rank the action.
 positionHistory = {}
 
-board: dict[tuple:str] = {}
+board: Dict[Tuple[int, int], str] = {}
 '''
 METHOD
 '''
@@ -89,7 +91,7 @@ def make_board():
         board[block] = BLOCK
 
 
-def check_valid_action(piece: str, new_position: tuple) -> bool:
+def check_valid_action(piece: str, new_position: Tuple[int, int]) -> bool:
     """
     check if the action is resolved successfully.
     -> no piece should defeat any other piece unless the one whom it defeated is its Target.
@@ -116,7 +118,7 @@ def check_valid_action(piece: str, new_position: tuple) -> bool:
     return True
 
 
-def check_in(position: tuple, piece: str):
+def check_in(position: Tuple[int, int], piece: str):
     """
     log each time piece visit a tile.
     -> if the piece comeplete its journey {arrived at its Target's location}
@@ -131,7 +133,7 @@ def check_in(position: tuple, piece: str):
         positionHistory[piece][position] += RE_ENTRY
 
 
-def rank(position: tuple, piece: str) -> int:
+def rank(position: Tuple[int, int], piece: str) -> int:
     """
     rank is base on how far of interested position to piece's target position
     -> how ever position is will be rank lower if it is visit before
@@ -161,7 +163,7 @@ def result_of_collision(pieceA: str, pieceB: str) -> int:
     """
     pieceA = pieceA[TYPE].lower()
     pieceB = pieceB[TYPE].lower()
-    if pieceA is LOWER_ROCK:
+    if pieceA == LOWER_ROCK:
         if pieceB == LOWER_SCISSOR:
             return A_WIN
         elif pieceB == LOWER_PAPER:
@@ -199,7 +201,7 @@ def slide_action(piece: str) -> list:
     return action_list
 
 
-def swing_action(piece: str) -> list:
+def swing_action(piece: str) -> List[Tuple[int, int]]:
     """
     for each adjacent piece there will be at most 3 swing move.
     -> check those move to ensure they are valid
@@ -257,7 +259,7 @@ def find_target(piece: str):
         targetedPiece.add(target)
 
 
-def make_ranked_move_list(piece: str) -> list:
+def make_ranked_move_list(piece: str) -> List[Tuple[int, int]]:
     """
     add all the possible position after perform an action.
     sort them according to their rank{low to high}
-- 
GitLab