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