From b237cffa606603d57214b7225e68caa0b7ba0254 Mon Sep 17 00:00:00 2001
From: huangjielun <2872405629@qq.com>
Date: Sat, 8 Oct 2022 17:12:02 +0800
Subject: [PATCH] =?UTF-8?q?AI=E5=AF=B9=E6=88=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
doc/网络版.md | 18 ++
src/.idea/.gitignore | 3 +
src/.idea/.name | 1 +
.../inspectionProfiles/profiles_settings.xml | 6 +
src/.idea/misc.xml | 4 +
src/.idea/modules.xml | 8 +
src/.idea/src.iml | 8 +
src/.idea/vcs.xml | 6 +
src/DLS.py | 251 ++++++++++++++++++
.../Client_connection.cpython-39.pyc | Bin 0 -> 4027 bytes
src/__pycache__/init.cpython-39.pyc | Bin 0 -> 6142 bytes
src/__pycache__/main.cpython-39.pyc | Bin 0 -> 56456 bytes
src/__pycache__/move.cpython-39.pyc | Bin 0 -> 502 bytes
src/__pycache__/socket_client.cpython-39.pyc | Bin 0 -> 1578 bytes
src/__pycache__/start_game.cpython-39.pyc | Bin 0 -> 3677 bytes
src/main.py | 230 +++++++++++++++-
src/path/__pycache__/path.cpython-39.pyc | Bin 0 -> 976 bytes
src/socket_client.py | 2 +
18 files changed, 527 insertions(+), 10 deletions(-)
create mode 100644 doc/网络版.md
create mode 100644 src/.idea/.gitignore
create mode 100644 src/.idea/.name
create mode 100644 src/.idea/inspectionProfiles/profiles_settings.xml
create mode 100644 src/.idea/misc.xml
create mode 100644 src/.idea/modules.xml
create mode 100644 src/.idea/src.iml
create mode 100644 src/.idea/vcs.xml
create mode 100644 src/DLS.py
create mode 100644 src/__pycache__/Client_connection.cpython-39.pyc
create mode 100644 src/__pycache__/init.cpython-39.pyc
create mode 100644 src/__pycache__/main.cpython-39.pyc
create mode 100644 src/__pycache__/move.cpython-39.pyc
create mode 100644 src/__pycache__/socket_client.cpython-39.pyc
create mode 100644 src/__pycache__/start_game.cpython-39.pyc
create mode 100644 src/path/__pycache__/path.cpython-39.pyc
diff --git a/doc/网络版.md b/doc/网络版.md
new file mode 100644
index 0000000..589af7c
--- /dev/null
+++ b/doc/网络版.md
@@ -0,0 +1,18 @@
+使用demo来标识是否为网络版(通过开始函数返回)
+
+增加Player类,成员有status_2,game_id, side,MAP(记录各个棋子的坐标-以id为索引,要保持双方的坐标一致),counterpart_name,think_time,total_time,用以记录双方的信息
+
+定义了一个函数server_thread用来监听服务器发送的数据
+
+在移动的时候,使用side与turn区分是哪一方移动(用demo区分单机与网络,单机版只以turn为条件(demo = 0),而网络版比较side与turn是否相同(demo = 1))
+
+question:如何知道客户端接受到了一个报文(maybe:不断比较Player类中的坐标与本地MAP中坐标是否相同,不同则修改对面的棋子,并翻转turn 或 在Player中加入一个变量去记录,在客户端发送了报文(己方已经下好棋)后置0,然后不断询问是否为1,为1后停止,并修改对方的棋子坐标)
+
+该移动规则还需要修改path函数,以致可以得到正确的路径显示
+
+
+
+
+
+
+
diff --git a/src/.idea/.gitignore b/src/.idea/.gitignore
new file mode 100644
index 0000000..26d3352
--- /dev/null
+++ b/src/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/src/.idea/.name b/src/.idea/.name
new file mode 100644
index 0000000..11a5d8e
--- /dev/null
+++ b/src/.idea/.name
@@ -0,0 +1 @@
+main.py
\ No newline at end of file
diff --git a/src/.idea/inspectionProfiles/profiles_settings.xml b/src/.idea/inspectionProfiles/profiles_settings.xml
new file mode 100644
index 0000000..105ce2d
--- /dev/null
+++ b/src/.idea/inspectionProfiles/profiles_settings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/.idea/misc.xml b/src/.idea/misc.xml
new file mode 100644
index 0000000..d56657a
--- /dev/null
+++ b/src/.idea/misc.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/.idea/modules.xml b/src/.idea/modules.xml
new file mode 100644
index 0000000..f669a0e
--- /dev/null
+++ b/src/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/.idea/src.iml b/src/.idea/src.iml
new file mode 100644
index 0000000..d0876a7
--- /dev/null
+++ b/src/.idea/src.iml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/.idea/vcs.xml b/src/.idea/vcs.xml
new file mode 100644
index 0000000..6c0b863
--- /dev/null
+++ b/src/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/DLS.py b/src/DLS.py
new file mode 100644
index 0000000..e2ad0df
--- /dev/null
+++ b/src/DLS.py
@@ -0,0 +1,251 @@
+import copy
+from typing import List, Tuple
+import pygame
+import heapq
+import socket_client as s
+from main import right_move, left_move
+import init
+
+inf = 99999999
+MAP1 = init.clac_MAP1()
+
+def getMAP(Animals):
+ copyMAP = [[0 for i in range(7)] for j in range(9)]
+ for animalId in range(1, len(Animals)):
+ x, y = Animals[animalId]['old_x'], Animals[animalId]['old_y']
+ copyMAP[x][y] = animalId
+ return copyMAP
+
+
+class PriorityQueue:
+
+ def __init__(self):
+ self.heap = []
+ self.count = 0
+
+ def push(self, item, priority):
+ entry = (priority, self.count, item)
+ heapq.heappush(self.heap, entry)
+ self.count += 1
+
+ def pop(self):
+ (_, _, item) = heapq.heappop(self.heap)
+ return item
+
+ def isEmpty(self):
+ return len(self.heap) == 0
+
+ def update(self, item, priority):
+
+ for index, (p, c, i) in enumerate(self.heap):
+ if i == item:
+ if p <= priority:
+ break
+ del self.heap[index]
+ self.heap.append((priority, c, item))
+ heapq.heapify(self.heap)
+ break
+ else:
+ self.push(item, priority)
+
+
+def getMovement(Id, Animals):
+ MAP = getMAP(Animals)
+ Movements = []
+ o_x, o_y = Animals[Id]['old_x'], Animals[Id]['old_y']
+ for x in range(len(MAP)):
+ for y in range(len(MAP[0])):
+ if 1 <= Id <= 7:
+ if right_move(o_x, o_y, x, y, Id, MAP, MAP1):
+ move = (Id, x - o_x, y - o_y)
+ Movements.append(move)
+ else:
+ if left_move(o_x, o_y, x, y, Id, MAP, MAP1):
+ move = (Id, x - o_x, y - o_y)
+ Movements.append(move)
+ return Movements
+
+
+def getSuccessors(Animals, turn: int):
+ Successors = []
+ Actions = []
+ if turn == 0:
+ # 1 ~ 7
+ for Id in range(1, 8):
+ Move = getMovement(Id, Animals)
+ for oneStep in Move:
+ Actions.append(oneStep)
+
+ else:
+ # 8 ~ 14
+ for Id in range(8, 15):
+ Move = getMovement(Id, Animals)
+ for oneStep in Move:
+ Actions.append(oneStep)
+
+ # update the map
+ for action in Actions:
+ Id, dx, dy = action[0], action[1], action[2]
+ t_Animals = copy.deepcopy(Animals)
+ x = Animals[Id]['old_x'] + dx
+ y = Animals[Id]['old_y'] + dy
+ t_Animals[Id]['x'] = x
+ t_Animals[Id]['y'] = y
+ target = (Id, x, y)
+ #print(t_Animals)
+ Successors.append((t_Animals, target))
+ # updateMAP()
+ return Successors
+
+
+class Information:
+ def __init__(self):
+ self.piece_score = {1: 100, 8: 100,
+ 2: 70, 9: 70,
+ 3: 60, 10: 60,
+ 4: 80, 11: 80,
+ 5: 90, 12: 90,
+ 6: 120, 13: 120,
+ 7: 120, 14: 120
+ }
+ self.mouse_score = [[11, 25, 50, 100000, 50, 25, 13],
+ [11, 20, 25, 50, 25, 20, 13],
+ [10, 15, 20, 20, 20, 15, 13],
+ [8, 9, 9, 11, 12, 13, 13],
+ [8, 8, 8, 9, 11, 12, 12],
+ [8, 8, 8, 9, 11, 12, 11],
+ [8, 8, 8, 9, 10, 10, 10],
+ [8, 8, 8, 9, 9, 9, 9],
+ [8, 8, 8, 0, 8, 8, 8]]
+
+ self.eagle_score = [[11, 15, 50, 100000, 50, 15, 11],
+ [12, 12, 20, 50, 20, 15, 12],
+ [14, 15, 20, 20, 20, 14, 14],
+ [13, 0, 0, 13, 0, 0, 13],
+ [12, 0, 0, 12, 0, 0, 12],
+ [11, 0, 0, 11, 0, 0, 11],
+ [10, 10, 10, 10, 10, 10, 10],
+ [8, 8, 8, 8, 8, 8, 8],
+ [8, 8, 8, 0, 8, 8, 8]]
+
+ self.fox_score = [[11, 15, 50, 100000, 50, 15, 11],
+ [12, 12, 20, 50, 20, 15, 12],
+ [14, 15, 20, 20, 20, 14, 14],
+ [13, 0, 0, 13, 0, 0, 13],
+ [12, 0, 0, 12, 0, 0, 12],
+ [11, 0, 0, 11, 0, 0, 11],
+ [10, 10, 10, 11, 10, 10, 10],
+ [8, 8, 9, 10, 9, 8, 8],
+ [8, 8, 10, 0, 10, 8, 8]]
+
+ self.wolf_score = [[11, 15, 50, 100000, 50, 15, 11],
+ [12, 12, 20, 50, 20, 15, 12],
+ [14, 15, 20, 20, 20, 14, 14],
+ [13, 0, 0, 13, 0, 0, 13],
+ [12, 0, 0, 12, 0, 0, 12],
+ [11, 0, 0, 11, 0, 0, 11],
+ [10, 10, 10, 11, 10, 10, 10],
+ [8, 8, 9, 10, 9, 8, 8],
+ [8, 8, 10, 0, 10, 8, 8]]
+
+ self.leopard_score = [[11, 15, 50, 100000, 50, 15, 11],
+ [12, 12, 20, 50, 20, 15, 12],
+ [14, 15, 20, 20, 20, 14, 14],
+ [13, 0, 0, 13, 0, 0, 13],
+ [12, 0, 0, 12, 0, 0, 12],
+ [11, 0, 0, 11, 0, 0, 11],
+ [10, 10, 10, 11, 10, 10, 10],
+ [8, 8, 9, 10, 9, 8, 8],
+ [8, 8, 10, 0, 10, 8, 8]]
+
+ self.lion_score = [[20, 40, 50, 100000, 50, 40, 20],
+ [20, 25, 40, 50, 40, 25, 20],
+ [18, 30, 30, 20, 30, 30, 18],
+ [15, 0, 0, 15, 0, 0, 15],
+ [12, 0, 0, 15, 0, 0, 12],
+ [11, 0, 0, 15, 0, 0, 11],
+ [14, 16, 16, 9, 16, 16, 14],
+ [12, 12, 12, 12, 12, 12, 12],
+ [5, 12, 12, 0, 12, 12, 5]]
+
+ self.elephant_score = [[20, 40, 50, 100000, 50, 40, 20],
+ [20, 25, 40, 50, 40, 25, 20],
+ [18, 30, 30, 20, 30, 30, 18],
+ [15, 0, 0, 15, 0, 0, 15],
+ [12, 0, 0, 15, 0, 0, 12],
+ [11, 0, 0, 15, 0, 0, 11],
+ [14, 16, 16, 9, 16, 16, 14],
+ [12, 12, 12, 12, 12, 12, 12],
+ [5, 12, 12, 0, 12, 12, 5]]
+
+ self.position_score = {1: self.mouse_score,
+ 8: self.mouse_score[::-1],
+ 2: self.eagle_score,
+ 9: self.eagle_score[::-1],
+ 3: self.fox_score,
+ 10: self.fox_score[::-1],
+ 4: self.wolf_score,
+ 11: self.wolf_score[::-1],
+ 5: self.leopard_score,
+ 12: self.leopard_score[::-1],
+ 6: self.lion_score,
+ 13: self.lion_score[::-1],
+ 7: self.elephant_score,
+ 14: self.elephant_score[::-1]
+ }
+
+
+def Heuristic(Animals, pTurn):
+ score = 0
+ information = Information()
+ piece_score = information.piece_score
+ for animalId in range(1, len(Animals)):
+ x,y = Animals[animalId]['x'], Animals[animalId]['y']
+
+ if 1 <= animalId <= 14:
+ animalIdValue = information.position_score[animalId][x][y]
+ if pTurn == 0:
+ if 1 <= animalId <= 7:
+ score += (animalIdValue + piece_score[animalId])
+ else:
+ score -= (animalIdValue + piece_score[animalId])
+ else:
+ if 1 <= animalId <= 7:
+ score -= (animalIdValue + piece_score[animalId])
+ else:
+ score += (animalIdValue + piece_score[animalId])
+ return score
+
+
+def depthLimitedSearch2(curAnimals, turn): # depth = 2
+ Successors = getSuccessors(curAnimals, turn)
+ tempNextMove = [(Successor, inf) for Successor in Successors]
+ nextMove = []
+ if turn:
+ turn2 = 0
+ else:
+ turn2 = 1
+ for Move in tempNextMove:
+ Successors2 = getSuccessors(Move[0][0], turn2)
+ nextMove2 = [(Successor2, Heuristic(Successor2[0], turn2)) for Successor2 in Successors2]
+ max2 = -inf
+ for action2 in nextMove2:
+ if action2[1] > max2:
+ max2 = action2[1]
+ nextMove.append((Move, max2))
+ min1 = inf
+ index = 0
+ for i in range(len(nextMove)):
+ if nextMove[i][1] < min1:
+ min1 = nextMove[i][1]
+ index = i
+ return nextMove[index][0][0][1]
+def main():
+ axis = [(0, 0), (2, 6), (1, 1), (1, 5), (2, 2), (2, 4), (2, 3), (2, 0), (6, 0), (7, 5), (7, 1), (6, 4), (6, 2),
+ (6, 3), (6, 6)]
+ Axis = s.Chessmen_axis(axis)
+ Animals = Axis.axis
+ print(depthLimitedSearch2(Animals, 0))
+
+if __name__ == '__main__':
+ main()
diff --git a/src/__pycache__/Client_connection.cpython-39.pyc b/src/__pycache__/Client_connection.cpython-39.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..82bbde35c9b6bfcbc800cdb8f4670fd1220415f5
GIT binary patch
literal 4027
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
literal 0
HcmV?d00001
diff --git a/src/__pycache__/main.cpython-39.pyc b/src/__pycache__/main.cpython-39.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..bcca857a2d3a61cc36c4e5d48f8c5d34bb41598e
GIT binary patch
literal 56456
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
O*!9tDLp`yj_5T79ZaaJc
literal 0
HcmV?d00001
diff --git a/src/__pycache__/move.cpython-39.pyc b/src/__pycache__/move.cpython-39.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..63f06da1aca1e8858532ba062d06986863dea32f
GIT binary patch
literal 502
zcmYjNO-sW-5S`g|O9SgkZyx*$_NJG5
z_fY&Ddlj+0c=PUTn?h!p_h#PC%zn7_`Z|#P-qgHL1o+ZP)fgow(BO0GfR<-!D$OF+6VJ%AAwdogaBoU3@Q$UaWD<7h42pLp
zN<*`rB|)-MZc14eMZK=mv7mOU}ZboZPkA+l20~HU0EN@uK?1!Q|
zT2i5Kq_9vd5Q-;me)|Tg{;IzNg7c%!&+F6o$MbA5olVBG_bH{Fi$UBA{S{@Y*NOT=
ze?KXd6=XWpUy*GS09t6{7V@gIbdz=(YsyNBo*Vg!2XT-q+jB#&8@Y)xE>Evi%?n+x
iOVOd?8W&BAn^jWe|>H}xwso4}?+_4)_d7Ita?
literal 0
HcmV?d00001
diff --git a/src/__pycache__/socket_client.cpython-39.pyc b/src/__pycache__/socket_client.cpython-39.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..22784d44477eb29865a984961d19cf9290ad7615
GIT binary patch
literal 1578
zcmZ{k&u`pB6vt=$YrUJ@?GM^Q5UN5egv=pAJt4G;Qnd(#&yU0Bs%B+yF8GJF(%UVH%{J
zBe~(G5~I2{_`ZnuGd(`J39FMI96(Y+70HmC7s}`r_fX9Ppmu7ZMD2pI_CTlhLAMS-
zukL_;9fCnE!A{);!@37{>m{&P_raxl0QOUX?Z|O7uwEH&XSOo|Ri0YUD^lI@_IPrm~&9d=?k9{w{l5sUP#w
zb|2)EtyUaPpJlq4QE|Cwh-I_lv8E4oKy-+Z=n}j-y+rg0I!9k3E)!RXtH3WpUqkcH
z7r<9vZvOT2i$8yRdHnj#@#~+Ce|-aW^V?ZDDY8Xlbh2rt$tc|g6>kv_LSP5rn7=_U#Z<$
zT(mu!Vbq-F9Io>poocZIE_Y`I!6Mr=%yZ8FZB@wfgRl2%8c30
zN)_+rCgIRU;jX#;CJGA(X){H|RFL<@b4Hqk<}o$yi$~uaI*2}JS!_Co?xDwMebVTu
zKN5`ExfVb>>+4+T3rAx2W)q*?al(Tx3O7cdK14OV_=%{+qwrAX;+3p3NfUK+iS?&Ns`lDu
z-^x8J_pz+6<8qQ&kFJb-{T?m7yHGT5Laz`X6I{MUbE~{=8k^=3kk{l;_EGsA+<5!`
z5@yPxP^NR5n;Jpjd+|inav66v_jao}b8okr3k~nc+|nE2;p6i*KDX0bm`&dXBB?)N
z6Ew$a^Kpfp&4EtM{&O@u7|1X9V~-v%Olt9tlPwI#@Z9^H_yb~@XwuMDL2d0?iA0s(>&|u_>`MRe}PZCGd$-OdETAn
zh1;e(=gwoch5k7)C+4@!0dvozeWAYy`CR{Vd}hE#J*NBos=tx_EhH7g-ydtSidMWoq0m|_j{P7rJ<({$8OMG{lg^QN72N4kP;HRo#}7q@+Hc|w??XgJpY<4LJ#%374A1P15(RZz*PVfZdV-rh
z=Uqcqdk!}*pp0y8Euv>nm*>eQ86%SE$X1uyHU(SE@1?kbV|S`s
zD$@`_B&6Wp!O(bs2d(^_IBOIaDdn
z^8-KfJeoT!LKv)IPO&Moz!uDemPh&cbgmrRHYh)iAF9(St>6vGIekhv8N?eA-m?KV
zlL6d_9jlfdW!+q>D*H~;k0d4G>8{F5K1T}LQY=cSsU-KqPP2YkMkAzX8|)}I@@Ul6
z&}!FhMG&+CHzv%Hjj#<&5xOt&1w}ngVPLfu%4$fp4V#gZj6Z5{R!>GBZddq@aOu}mRlXXJFkMWdx9A6AJsu0YbQl6}S`UMg%&K9DD|n+~TR9I`~G=BTvdGRo|w`&r$?`cr64_j3bdz~o1Io&5MZLGjtOG2i&8zi3}*)QK;8
z)P#RMYkbrLCNFD`Y21m&dfaE;1$I#A&kT%f#`jD2?4G?>gl2Z%#2R;^On;7c8qNQR
zJz#gy#%>o7-)V5!Lquq7C$Rs3=V}zMv)U(=&}aRZ5BYS>xcgA2dA|C{JpF(i&4*@kQI-ZEa;w%py>z4JrB@x>n3;I?Tl;GFHj!^d7@2qVp`)=2dRHk+qMxsT&sjMC+
zMHmVW=E~3lUgSqjp|V6t-W~nfQd1k_t*pS=->KmZS|2I;B
zglUc4+z7k&zr$|N{tp=bjmGO|#4s{H^=zm84
zvvD}X0#45vV}U0VEP(ci1@d5l#}h1IN}Cs+VF6PvY8E)Ve^b81XP)7P$2<>ic&xdh
zSe0Kvdb##nBIw3UAiqiqXR{9EN&0@tuahEiLv-3Ql2^3(+kl$?S0LX_*Sa#kDajYf
z7&=1|6AUe?y#!HC$nR49Dv2c$%Mfk>7pr*Wr-5zy1Z*w1xQl_|7Q`8-9fNHQZZXit
zWehq1@?XG?;0NecFmL&id0YI&OBIMlxY(|Dn~_I%LpM#*t8*@u{W@J1o#pkV
zl{Zy-o$i3k>+e)l=A`!
zqf)8LZ)qp=RLK?Tx59RS>FKJu=?D8NdrgQ=ZU1n&*%dLL(icCb(o_h4aeWY)id8z2
z^&s4C%a(G&Mjhnm=sy9!B(_-67Nopea)
WfXG@IkeK}`zZBxT$O_M=Uil|DUQ2TT
literal 0
HcmV?d00001
diff --git a/src/main.py b/src/main.py
index fd4cc8c..27a090c 100644
--- a/src/main.py
+++ b/src/main.py
@@ -11,7 +11,7 @@ import uuid
import time
from threading import Thread, Lock
import socket_client as s
-import pygame_menu
+import DLS
if(sys.version[:1] == "3"):
import queue as Queue
@@ -1721,31 +1721,31 @@ def main():
font = pygame.font.SysFont('kaiti',40)
status = id = old_x = old_y = x = y = 0
turn = 1
- if demo == 1:
+ if (demo == 1 or demo == 2):
name = input("Please tell us your name:")
player.name = name
Left_win = player.Left_win
Right_win = player.Right_win
Address = (Config.SOCKET_HOST, Config.SOCKET_PORT)
- if demo == 1:
+ if (demo == 1 or demo == 2):
C.load_config()
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((Config.SOCKET_HOST, Config.SOCKET_PORT))
C.conn_to_server(client, name)
while run:
clock.tick(FPS)
- if demo == 1 and exit == 1:
+ if (demo == 1 or demo == 2) and exit == 1:
request = "quit"
C.exit_game(client,request,player.game_id,1 - player.side)
if player.side == 0:
player.Right_win = Right_win = 1
elif player.side == 1:
player.Left_win = Left_win = 1
- if left_win(x, y, MAP, MAP1) or (demo == 1 and Left_win == 1):
+ if left_win(x, y, MAP, MAP1) or ((demo == 1 or demo == 2) and Left_win == 1):
run = False
- if right_win(x, y, MAP, MAP1) or (demo == 1 and Right_win == 1):
+ if right_win(x, y, MAP, MAP1) or ((demo == 1 or demo == 2) and Right_win == 1):
run = False
- if demo == 1:
+ if demo == 1 or demo == 2:
C.start_new_thread(server_thread, (client,Address))
Right_win = player.Right_win
Left_win = player.Left_win
@@ -2003,7 +2003,7 @@ def main():
turn = 0
else :
status = 0
- elif demo == 1 and player.id and turn != player.side and player.invalid == 1 and player.status_2 == -1:
+ elif (demo == 1 or demo == 2) and player.id and turn != player.side and player.invalid == 1 and player.status_2 == -1:
counterpart_id = player.id
counterpart_old_x , counterpart_old_y = Axis.axis[counterpart_id]['old_x'],Axis.axis[counterpart_id]['old_y']
counterpart_x ,counterpart_y = Axis.axis[counterpart_id]['x'],Axis.axis[counterpart_id]['y']
@@ -2011,6 +2011,7 @@ def main():
if MAP[counterpart_x][counterpart_y] != counterpart_id:
if 1 <= MAP[counterpart_x][counterpart_y] <= 14:
ID[MAP[counterpart_x][counterpart_y]] = 0
+ r_animals -= 1
MAP[counterpart_old_x][counterpart_old_y] = MAP1[counterpart_old_x][counterpart_old_y]
MAP[counterpart_x][counterpart_y] = counterpart_id
l_mouse.x , l_mouse.y = init.tran(counterpart_x,counterpart_y)
@@ -2020,6 +2021,7 @@ def main():
if MAP[counterpart_x][counterpart_y] != counterpart_id:
if 1 <= MAP[counterpart_x][counterpart_y] <= 14:
ID[MAP[counterpart_x][counterpart_y]] = 0
+ r_animals -= 1
MAP[counterpart_old_x][counterpart_old_y] = MAP1[counterpart_old_x][counterpart_old_y]
MAP[counterpart_x][counterpart_y] = counterpart_id
l_eagle.x , l_eagle.y = init.tran(counterpart_x,counterpart_y)
@@ -2028,6 +2030,7 @@ def main():
elif counterpart_id == 3 and turn == 0:
if MAP[counterpart_x][counterpart_y] != counterpart_id:
if 1 <= MAP[counterpart_x][counterpart_y] <= 14:
+ r_animals -= 1
ID[MAP[counterpart_x][counterpart_y]] = 0
MAP[counterpart_old_x][counterpart_old_y] = MAP1[counterpart_old_x][counterpart_old_y]
MAP[counterpart_x][counterpart_y] = counterpart_id
@@ -2038,6 +2041,7 @@ def main():
if MAP[counterpart_x][counterpart_y] != counterpart_id:
if 1 <= MAP[counterpart_x][counterpart_y] <= 14:
ID[MAP[counterpart_x][counterpart_y]] = 0
+ r_animals -= 1
MAP[counterpart_old_x][counterpart_old_y] = MAP1[counterpart_old_x][counterpart_old_y]
MAP[counterpart_x][counterpart_y] = counterpart_id
l_wolf.x , l_wolf.y = init.tran(counterpart_x,counterpart_y)
@@ -2047,6 +2051,7 @@ def main():
if MAP[counterpart_x][counterpart_y] != counterpart_id:
if 1 <= MAP[counterpart_x][counterpart_y] <= 14:
ID[MAP[counterpart_x][counterpart_y]] = 0
+ r_animals -= 1
MAP[counterpart_old_x][counterpart_old_y] = MAP1[counterpart_old_x][counterpart_old_y]
MAP[counterpart_x][counterpart_y] = counterpart_id
l_leopard.x , l_leopard.y = init.tran(counterpart_x,counterpart_y)
@@ -2056,6 +2061,7 @@ def main():
if MAP[counterpart_x][counterpart_y] != counterpart_id:
if 1 <= MAP[counterpart_x][counterpart_y] <= 14:
ID[MAP[counterpart_x][counterpart_y]] = 0
+ r_animals -= 1
MAP[counterpart_old_x][counterpart_old_y] = MAP1[counterpart_old_x][counterpart_old_y]
MAP[counterpart_x][counterpart_y] = counterpart_id
l_lion.x , l_lion.y = init.tran(counterpart_x,counterpart_y)
@@ -2065,6 +2071,7 @@ def main():
if MAP[counterpart_x][counterpart_y] != counterpart_id:
if 1 <= MAP[counterpart_x][counterpart_y] <= 14:
ID[MAP[counterpart_x][counterpart_y]] = 0
+ r_animals -= 1
MAP[counterpart_old_x][counterpart_old_y] = MAP1[counterpart_old_x][counterpart_old_y]
MAP[counterpart_x][counterpart_y] = counterpart_id
l_elephant.x , l_elephant.y = init.tran(counterpart_x,counterpart_y)
@@ -2074,6 +2081,7 @@ def main():
if MAP[counterpart_x][counterpart_y] != counterpart_id:
if 1 <= MAP[counterpart_x][counterpart_y] <= 14:
ID[MAP[counterpart_x][counterpart_y]] = 0
+ l_animals -= 1
MAP[counterpart_old_x][counterpart_old_y] = MAP1[counterpart_old_x][counterpart_old_y]
MAP[counterpart_x][counterpart_y] = counterpart_id
r_mouse.x , r_mouse.y = init.tran(counterpart_x,counterpart_y)
@@ -2083,6 +2091,7 @@ def main():
if MAP[counterpart_x][counterpart_y] != counterpart_id:
if 1 <= MAP[counterpart_x][counterpart_y] <= 14:
ID[MAP[counterpart_x][counterpart_y]] = 0
+ l_animals -= 1
MAP[counterpart_old_x][counterpart_old_y] = MAP1[counterpart_old_x][counterpart_old_y]
MAP[counterpart_x][counterpart_y] = counterpart_id
r_eagle.x , r_eagle.y = init.tran(counterpart_x,counterpart_y)
@@ -2092,6 +2101,7 @@ def main():
if MAP[counterpart_x][counterpart_y] != counterpart_id:
if 1 <= MAP[counterpart_x][counterpart_y] <= 14:
ID[MAP[counterpart_x][counterpart_y]] = 0
+ l_animals -= 1
MAP[counterpart_old_x][counterpart_old_y] = MAP1[counterpart_old_x][counterpart_old_y]
MAP[counterpart_x][counterpart_y] = counterpart_id
r_fox.x , r_fox.y = init.tran(counterpart_x,counterpart_y)
@@ -2101,6 +2111,7 @@ def main():
if MAP[counterpart_x][counterpart_y] != counterpart_id:
if 1 <= MAP[counterpart_x][counterpart_y] <= 14:
ID[MAP[counterpart_x][counterpart_y]] = 0
+ l_animals -= 1
MAP[counterpart_old_x][counterpart_old_y] = MAP1[counterpart_old_x][counterpart_old_y]
MAP[counterpart_x][counterpart_y] = counterpart_id
r_wolf.x , r_wolf.y = init.tran(counterpart_x,counterpart_y)
@@ -2110,6 +2121,7 @@ def main():
if MAP[counterpart_x][counterpart_y] != counterpart_id:
if 1 <= MAP[counterpart_x][counterpart_y] <= 14:
ID[MAP[counterpart_x][counterpart_y]] = 0
+ l_animals -= 1
MAP[counterpart_old_x][counterpart_old_y] = MAP1[counterpart_old_x][counterpart_old_y]
MAP[counterpart_x][counterpart_y] = counterpart_id
r_leopard.x , r_leopard.y = init.tran(counterpart_x,counterpart_y)
@@ -2119,6 +2131,7 @@ def main():
if MAP[counterpart_x][counterpart_y] != counterpart_id:
if 1 <= MAP[counterpart_x][counterpart_y] <= 14:
ID[MAP[counterpart_x][counterpart_y]] = 0
+ l_animals -= 1
MAP[counterpart_old_x][counterpart_old_y] = MAP1[counterpart_old_x][counterpart_old_y]
MAP[counterpart_x][counterpart_y] = counterpart_id
r_lion.x , r_lion.y = init.tran(counterpart_x,counterpart_y)
@@ -2128,13 +2141,210 @@ def main():
if MAP[counterpart_x][counterpart_y] != counterpart_id:
if 1 <= MAP[counterpart_x][counterpart_y] <= 14:
ID[MAP[counterpart_x][counterpart_y]] = 0
+ l_animals -= 1
MAP[counterpart_old_x][counterpart_old_y] = MAP1[counterpart_old_x][counterpart_old_y]
MAP[counterpart_x][counterpart_y] = counterpart_id
r_elephant.x , r_elephant.y = init.tran(counterpart_x,counterpart_y)
turn = (1-turn)
player.invalid = 0
- elif demo == 2:
- pass
+ elif demo == 2 and player.id and turn == player.id:
+ id,x,y = DLS.depthLimitedSearch2(Axis.axis,player.id)#TODO:AI algorithm
+ if id == 1:
+ if 8 <= MAP[x][y] <= 14:
+ ID[MAP[x][y]] = 0
+ r_animals -= 1
+ MAP[x][y] = id
+ old_x = Axis.axis[id]["x"]
+ old_y = Axis.axis[id]["y"]
+ MAP[old_x][old_y] = MAP1[old_x][old_y]
+ Axis.axis[id]["old_x"] = old_x
+ Axis.axis[id]["old_y"] = old_y
+ Axis.axis[id]["x"] = x
+ Axis.axis[id]["y"] = y
+ l_mouse.x, l_mouse.y = init.tran(x, y)
+ turn = (1 - turn)
+ elif id ==2:
+ if 8 <= MAP[x][y] <= 14:
+ ID[MAP[x][y]] = 0
+ r_animals -= 1
+ MAP[x][y] = id
+ old_x = Axis.axis[id]["x"]
+ old_y = Axis.axis[id]["y"]
+ MAP[old_x][old_y] = MAP1[old_x][old_y]
+ Axis.axis[id]["old_x"] = old_x
+ Axis.axis[id]["old_y"] = old_y
+ Axis.axis[id]["x"] = x
+ Axis.axis[id]["y"] = y
+ l_eagle.x, l_eagle.y = init.tran(x, y)
+ turn = (1 - turn)
+ elif id ==3:
+ if 8 <= MAP[x][y] <= 14:
+ ID[MAP[x][y]] = 0
+ r_animals -= 1
+ MAP[x][y] = id
+ old_x = Axis.axis[id]["x"]
+ old_y = Axis.axis[id]["y"]
+ MAP[old_x][old_y] = MAP1[old_x][old_y]
+ Axis.axis[id]["old_x"] = old_x
+ Axis.axis[id]["old_y"] = old_y
+ Axis.axis[id]["x"] = x
+ Axis.axis[id]["y"] = y
+ l_fox.x, l_fox.y = init.tran(x, y)
+ turn = (1 - turn)
+ elif id ==4:
+ if 8 <= MAP[x][y] <= 14:
+ ID[MAP[x][y]] = 0
+ r_animals -= 1
+ MAP[x][y] = id
+ old_x = Axis.axis[id]["x"]
+ old_y = Axis.axis[id]["y"]
+ MAP[old_x][old_y] = MAP1[old_x][old_y]
+ Axis.axis[id]["old_x"] = old_x
+ Axis.axis[id]["old_y"] = old_y
+ Axis.axis[id]["x"] = x
+ Axis.axis[id]["y"] = y
+ l_wolf.x, l_wolf.y = init.tran(x, y)
+ turn = (1 - turn)
+ elif id ==5:
+ if 8 <= MAP[x][y] <= 14:
+ ID[MAP[x][y]] = 0
+ r_animals -= 1
+ MAP[x][y] = id
+ old_x = Axis.axis[id]["x"]
+ old_y = Axis.axis[id]["y"]
+ MAP[old_x][old_y] = MAP1[old_x][old_y]
+ Axis.axis[id]["old_x"] = old_x
+ Axis.axis[id]["old_y"] = old_y
+ Axis.axis[id]["x"] = x
+ Axis.axis[id]["y"] = y
+ l_leopard.x, l_leopard.y = init.tran(x, y)
+ turn = (1 - turn)
+ elif id ==6:
+ if 8 <= MAP[x][y] <= 14:
+ ID[MAP[x][y]] = 0
+ r_animals -= 1
+ MAP[x][y] = id
+ old_x = Axis.axis[id]["x"]
+ old_y = Axis.axis[id]["y"]
+ MAP[old_x][old_y] = MAP1[old_x][old_y]
+ Axis.axis[id]["old_x"] = old_x
+ Axis.axis[id]["old_y"] = old_y
+ Axis.axis[id]["x"] = x
+ Axis.axis[id]["y"] = y
+ l_lion.x, l_lion.y = init.tran(x, y)
+ turn = (1 - turn)
+ elif id ==7:
+ if 8 <= MAP[x][y] <= 14:
+ ID[MAP[x][y]] = 0
+ r_animals -= 1
+ MAP[x][y] = id
+ old_x = Axis.axis[id]["x"]
+ old_y = Axis.axis[id]["y"]
+ MAP[old_x][old_y] = MAP1[old_x][old_y]
+ Axis.axis[id]["old_x"] = old_x
+ Axis.axis[id]["old_y"] = old_y
+ Axis.axis[id]["x"] = x
+ Axis.axis[id]["y"] = y
+ l_elephant.x, l_elephant.y = init.tran(x, y)
+ turn = (1 - turn)
+ elif id == 8:
+ if 1 <= MAP[x][y] <= 7:
+ ID[MAP[x][y]] = 0
+ l_animals -= 1
+ MAP[x][y] = id
+ old_x = Axis.axis[id]["x"]
+ old_y = Axis.axis[id]["y"]
+ MAP[old_x][old_y] = MAP1[old_x][old_y]
+ Axis.axis[id]["old_x"] = old_x
+ Axis.axis[id]["old_y"] = old_y
+ Axis.axis[id]["x"] = x
+ Axis.axis[id]["y"] = y
+ r_mouse.x, r_mouse.y = init.tran(x, y)
+ turn = (1 - turn)
+ elif id == 9:
+ if 1 <= MAP[x][y] <= 7:
+ ID[MAP[x][y]] = 0
+ l_animals -= 1
+ MAP[x][y] = id
+ old_x = Axis.axis[id]["x"]
+ old_y = Axis.axis[id]["y"]
+ MAP[old_x][old_y] = MAP1[old_x][old_y]
+ Axis.axis[id]["old_x"] = old_x
+ Axis.axis[id]["old_y"] = old_y
+ Axis.axis[id]["x"] = x
+ Axis.axis[id]["y"] = y
+ r_eagle.x, r_eagle.y = init.tran(x, y)
+ turn = (1 - turn)
+ elif id == 10:
+ if 1 <= MAP[x][y] <= 7:
+ ID[MAP[x][y]] = 0
+ l_animals -= 1
+ MAP[x][y] = id
+ old_x = Axis.axis[id]["x"]
+ old_y = Axis.axis[id]["y"]
+ MAP[old_x][old_y] = MAP1[old_x][old_y]
+ Axis.axis[id]["old_x"] = old_x
+ Axis.axis[id]["old_y"] = old_y
+ Axis.axis[id]["x"] = x
+ Axis.axis[id]["y"] = y
+ r_fox.x, r_fox.y = init.tran(x, y)
+ turn = (1 - turn)
+ elif id == 11:
+ if 1 <= MAP[x][y] <= 7:
+ ID[MAP[x][y]] = 0
+ l_animals -= 1
+ MAP[x][y] = id
+ old_x = Axis.axis[id]["x"]
+ old_y = Axis.axis[id]["y"]
+ MAP[old_x][old_y] = MAP1[old_x][old_y]
+ Axis.axis[id]["old_x"] = old_x
+ Axis.axis[id]["old_y"] = old_y
+ Axis.axis[id]["x"] = x
+ Axis.axis[id]["y"] = y
+ r_wolf.x, r_wolf.y = init.tran(x, y)
+ turn = (1 - turn)
+ elif id == 12:
+ if 1 <= MAP[x][y] <= 7:
+ ID[MAP[x][y]] = 0
+ l_animals -= 1
+ MAP[x][y] = id
+ old_x = Axis.axis[id]["x"]
+ old_y = Axis.axis[id]["y"]
+ MAP[old_x][old_y] = MAP1[old_x][old_y]
+ Axis.axis[id]["old_x"] = old_x
+ Axis.axis[id]["old_y"] = old_y
+ Axis.axis[id]["x"] = x
+ Axis.axis[id]["y"] = y
+ r_leopard.x, r_leopard.y = init.tran(x, y)
+ turn = (1 - turn)
+ elif id == 13:
+ if 1 <= MAP[x][y] <= 7:
+ ID[MAP[x][y]] = 0
+ l_animals -= 1
+ MAP[x][y] = id
+ old_x = Axis.axis[id]["x"]
+ old_y = Axis.axis[id]["y"]
+ MAP[old_x][old_y] = MAP1[old_x][old_y]
+ Axis.axis[id]["old_x"] = old_x
+ Axis.axis[id]["old_y"] = old_y
+ Axis.axis[id]["x"] = x
+ Axis.axis[id]["y"] = y
+ r_lion.x, r_lion.y = init.tran(x, y)
+ turn = (1 - turn)
+ elif id == 14:
+ if 1 <= MAP[x][y] <= 7:
+ ID[MAP[x][y]] = 0
+ l_animals -= 1
+ MAP[x][y] = id
+ old_x = Axis.axis[id]["x"]
+ old_y = Axis.axis[id]["y"]
+ MAP[old_x][old_y] = MAP1[old_x][old_y]
+ Axis.axis[id]["old_x"] = old_x
+ Axis.axis[id]["old_y"] = old_y
+ Axis.axis[id]["x"] = x
+ Axis.axis[id]["y"] = y
+ r_elephant.x, r_elephant.y = init.tran(x, y)
+ turn = (1 - turn)
draw_window(l_elephant, l_eagle, l_wolf, l_lion, l_leopard, l_mouse, l_fox, r_elephant, r_eagle, r_wolf, r_lion,
diff --git a/src/path/__pycache__/path.cpython-39.pyc b/src/path/__pycache__/path.cpython-39.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..257dd19a485ca4ab2a3e3f644ad7a043138aac42
GIT binary patch
literal 976
zcmZWoPjAyO6t^8aO}n-$(?D#RIB|)Db{L${gg}4F=-szkWEmmfadVjjZ0^IC
ze*}<3(k=-WoCY)@0aK1-(wVSFwlB}X?D
zlWc=bE0W`hB8T3zD#eTjwLdag1S_&4z4s)j%c`saZ^#u{2i}x)kNAx_sC~=h+~QyK2dD9d)wM9F(w~jVw1hOj{VDj7>H6J3_}x
zLixWuG&a5r?Yma=yK;ZHU?Yu1YAn~XL|W(hgBKTh>MH8pB=7a#s5Ow6QCC5Zu*fB$
z7rb0nUw}|JdKi;2H!$Q0g>mkT1<0(FZ;o9<3tF&36mCHbo49(b;8O?pF)N3=b<`?2
z*ll*$SipTg6~;9cyfI-j2IGHH>O9bar-d#pyY4&fIVPhqL%(VT^ek2ylh#cD>xNmT
zQmFRj)3)WWyNR(Jhgx>i)-TW5ujmHaU9`!~O=t#r;9*mGDm9iSmLC4wHI8$;3a0rw
z0HGXK9o8DGI$fvhOmBkTU$t&Fio>1?ytheudnf9rfzX4l%JmgE*Vh5y9|(;~^#&?%
z4pt<+Fjkg#`=QhrMPEa}*RZG)eP2qce0t?Hz1?14g8O^;NOHX9QIB!jq%M4QTBA*l
Jd3wxqego89&ustz
literal 0
HcmV?d00001
diff --git a/src/socket_client.py b/src/socket_client.py
index 3610aad..2304b70 100644
--- a/src/socket_client.py
+++ b/src/socket_client.py
@@ -22,6 +22,8 @@ class Chessmen_axis:
old_x, old_y = Axis[i]
self.axis[i]["old_x"] = old_x
self.axis[i]["old_y"] = old_y
+ self.axis[i]["x"] = old_x
+ self.axis[i]["y"] = old_y
def set_axix(self, id, old_x, old_y, x, y):
self.axis[id]["old_x"] = old_x