From 4d0029a2adcf147a8913931144f0d2a276fcba23 Mon Sep 17 00:00:00 2001 From: tzzzzzzzx <414850847@qq.com> Date: Sat, 3 Sep 2022 08:20:04 +0800 Subject: [PATCH] basic functions updt1 --- .vscode/launch.json | 17 ++++++++++++ Image/pieces/pieces_rb/{b1_Mse.png => b1.png} | Bin Image/pieces/pieces_rb/{b2_Eag.png => b2.png} | Bin Image/pieces/pieces_rb/{b3_Fox.png => b3.png} | Bin .../pieces/pieces_rb/{b4_Wolf.png => b4.png} | Bin Image/pieces/pieces_rb/{b5_Leo.png => b5.png} | Bin .../pieces/pieces_rb/{b6_Lion.png => b6.png} | Bin .../pieces/pieces_rb/{b7_Eleph.png => b7.png} | Bin Image/pieces/pieces_rb/{r1_Mse.png => r1.png} | Bin Image/pieces/pieces_rb/{r2_Eag.png => r2.png} | Bin Image/pieces/pieces_rb/{r3_Fox.png => r3.png} | Bin .../pieces/pieces_rb/{r4_Wolf.png => r4.png} | Bin Image/pieces/pieces_rb/{r5_Leo.png => r5.png} | Bin .../pieces/pieces_rb/{r6_Lion.png => r6.png} | Bin .../pieces/pieces_rb/{r7_Eleph.png => r7.png} | Bin ...ess_Gamev1.0.py => SafariChess_Gamev1.0.py | 18 ++++++++---- SafariChess_backend.py | 26 +++++++++++------- .../SafariChess_Classes.cpython-39.pyc | Bin 0 -> 779 bytes .../SafariChess_backend.cpython-39.pyc | Bin 0 -> 6978 bytes 19 files changed, 45 insertions(+), 16 deletions(-) create mode 100644 .vscode/launch.json rename Image/pieces/pieces_rb/{b1_Mse.png => b1.png} (100%) rename Image/pieces/pieces_rb/{b2_Eag.png => b2.png} (100%) rename Image/pieces/pieces_rb/{b3_Fox.png => b3.png} (100%) rename Image/pieces/pieces_rb/{b4_Wolf.png => b4.png} (100%) rename Image/pieces/pieces_rb/{b5_Leo.png => b5.png} (100%) rename Image/pieces/pieces_rb/{b6_Lion.png => b6.png} (100%) rename Image/pieces/pieces_rb/{b7_Eleph.png => b7.png} (100%) rename Image/pieces/pieces_rb/{r1_Mse.png => r1.png} (100%) rename Image/pieces/pieces_rb/{r2_Eag.png => r2.png} (100%) rename Image/pieces/pieces_rb/{r3_Fox.png => r3.png} (100%) rename Image/pieces/pieces_rb/{r4_Wolf.png => r4.png} (100%) rename Image/pieces/pieces_rb/{r5_Leo.png => r5.png} (100%) rename Image/pieces/pieces_rb/{r6_Lion.png => r6.png} (100%) rename Image/pieces/pieces_rb/{r7_Eleph.png => r7.png} (100%) rename SarafiChess_Gamev1.0.py => SafariChess_Gamev1.0.py (95%) create mode 100644 __pycache__/SafariChess_Classes.cpython-39.pyc create mode 100644 __pycache__/SafariChess_backend.cpython-39.pyc diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..e8b9b31 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,17 @@ +{ + // 使用 IntelliSense 了解相关属性。 + // 悬停以查看现有属性的描述。 + // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Launch the fxxking game", + "type": "python", + "request": "launch", + "program": "${workspaceFolder}/SafariChess_Gamev1.0.py", + "cwd": "${workspaceFolder}", + "console": "integratedTerminal", + "justMyCode": true + } + ] +} \ No newline at end of file diff --git a/Image/pieces/pieces_rb/b1_Mse.png b/Image/pieces/pieces_rb/b1.png similarity index 100% rename from Image/pieces/pieces_rb/b1_Mse.png rename to Image/pieces/pieces_rb/b1.png diff --git a/Image/pieces/pieces_rb/b2_Eag.png b/Image/pieces/pieces_rb/b2.png similarity index 100% rename from Image/pieces/pieces_rb/b2_Eag.png rename to Image/pieces/pieces_rb/b2.png diff --git a/Image/pieces/pieces_rb/b3_Fox.png b/Image/pieces/pieces_rb/b3.png similarity index 100% rename from Image/pieces/pieces_rb/b3_Fox.png rename to Image/pieces/pieces_rb/b3.png diff --git a/Image/pieces/pieces_rb/b4_Wolf.png b/Image/pieces/pieces_rb/b4.png similarity index 100% rename from Image/pieces/pieces_rb/b4_Wolf.png rename to Image/pieces/pieces_rb/b4.png diff --git a/Image/pieces/pieces_rb/b5_Leo.png b/Image/pieces/pieces_rb/b5.png similarity index 100% rename from Image/pieces/pieces_rb/b5_Leo.png rename to Image/pieces/pieces_rb/b5.png diff --git a/Image/pieces/pieces_rb/b6_Lion.png b/Image/pieces/pieces_rb/b6.png similarity index 100% rename from Image/pieces/pieces_rb/b6_Lion.png rename to Image/pieces/pieces_rb/b6.png diff --git a/Image/pieces/pieces_rb/b7_Eleph.png b/Image/pieces/pieces_rb/b7.png similarity index 100% rename from Image/pieces/pieces_rb/b7_Eleph.png rename to Image/pieces/pieces_rb/b7.png diff --git a/Image/pieces/pieces_rb/r1_Mse.png b/Image/pieces/pieces_rb/r1.png similarity index 100% rename from Image/pieces/pieces_rb/r1_Mse.png rename to Image/pieces/pieces_rb/r1.png diff --git a/Image/pieces/pieces_rb/r2_Eag.png b/Image/pieces/pieces_rb/r2.png similarity index 100% rename from Image/pieces/pieces_rb/r2_Eag.png rename to Image/pieces/pieces_rb/r2.png diff --git a/Image/pieces/pieces_rb/r3_Fox.png b/Image/pieces/pieces_rb/r3.png similarity index 100% rename from Image/pieces/pieces_rb/r3_Fox.png rename to Image/pieces/pieces_rb/r3.png diff --git a/Image/pieces/pieces_rb/r4_Wolf.png b/Image/pieces/pieces_rb/r4.png similarity index 100% rename from Image/pieces/pieces_rb/r4_Wolf.png rename to Image/pieces/pieces_rb/r4.png diff --git a/Image/pieces/pieces_rb/r5_Leo.png b/Image/pieces/pieces_rb/r5.png similarity index 100% rename from Image/pieces/pieces_rb/r5_Leo.png rename to Image/pieces/pieces_rb/r5.png diff --git a/Image/pieces/pieces_rb/r6_Lion.png b/Image/pieces/pieces_rb/r6.png similarity index 100% rename from Image/pieces/pieces_rb/r6_Lion.png rename to Image/pieces/pieces_rb/r6.png diff --git a/Image/pieces/pieces_rb/r7_Eleph.png b/Image/pieces/pieces_rb/r7.png similarity index 100% rename from Image/pieces/pieces_rb/r7_Eleph.png rename to Image/pieces/pieces_rb/r7.png diff --git a/SarafiChess_Gamev1.0.py b/SafariChess_Gamev1.0.py similarity index 95% rename from SarafiChess_Gamev1.0.py rename to SafariChess_Gamev1.0.py index 60bcd95..c86901c 100644 --- a/SarafiChess_Gamev1.0.py +++ b/SafariChess_Gamev1.0.py @@ -36,8 +36,8 @@ bias_top = 200 #棋盘的上边距 bias_left = 10 #棋盘的左边距 def loadImages():#加载图片,a,b双方分别有象狮豹狼狐鹰鼠七个角色 - pieces = ["r7_Eleph", "r6_Lion", "r5_Leo", "r4_Wolf", "r3_Fox", "r2_Eag", "r1_Mse", - "b7_Eleph", "b6_Lion", "b5_Leo", "b4_Wolf", "b3_Fox", "b2_Eag", "b1_Mse", + pieces = ["r7", "r6", "r5", "r4", "r3", "r2", "r1", + "b7", "b6", "b5", "b4", "b3", "b2", "b1", ] for piece in pieces:#字典的形式存储图片 IMAGES[piece] = pg.transform.scale(pg.image.load("./Image/pieces/pieces_rb/" + piece + ".png"), (SIZE, SIZE)) @@ -77,7 +77,7 @@ def drawPieces(screen,board): for row in range(DIMENSION_ROWS): for column in range(DIMENSION_COLUMNS): piece = board[row][column] - if piece != "--": + if piece != "00": screen.blit(IMAGES[piece], pg.Rect((column * SIZE) + 10, (row * SIZE) + 200, SIZE, SIZE)) # square_selected 是当前选中的可以移动的棋子的位置 @@ -141,7 +141,8 @@ Please type one of the numbers below to choose a playing mode: p1 , p2 = 0, 0 while not_selected: try: - mode = int(input()) + #mode = int(input()) + mode = 1 if mode in [1,2,3,4]: if mode == 1: p1 = 1 @@ -194,6 +195,7 @@ def main(): game_state=backend.GameState() valid_moves=game_state.getAllMoves() running = True + mademove = False game_over = False square_selected = ()#刚开始没有选择任何一个棋子 click_queue = []#点击队列,记录第一次点击和第二次点击位置,方便移动棋子 @@ -211,7 +213,7 @@ def main(): if not game_over: mouse_loc = pg.mouse.get_pos() row = int((mouse_loc[1] - bias_top) / SIZE) - col = int((mouse_loc[0] - bias_left) / SIZE) + col = int((mouse_loc[0] - bias_left) / SIZE) #* get position of mouse click if square_selected == (row,col) or col >=DIMENSION_COLUMNS or row >= DIMENSION_ROWS: square_selected = () click_queue = [] @@ -224,6 +226,7 @@ def main(): move = backend.Move(cur_piece_loc,nxt_piece_loc,game_state.board) if move in valid_moves: game_state.makeMove(move) + mademove = True square_selected = () click_queue = [] else: @@ -232,7 +235,10 @@ def main(): elif e.type == pg.KEYDOWN: #设置某些按键用于悔棋,重新开始游戏,机器提示,退出游戏等功能 pass - + + if mademove: + valid_moves = game_state.getAllMoves() + ShowGameState(screen,game_state,valid_moves,square_selected) clock.tick(60) pg.display.flip() diff --git a/SafariChess_backend.py b/SafariChess_backend.py index 8a819b0..257ad5d 100644 --- a/SafariChess_backend.py +++ b/SafariChess_backend.py @@ -68,7 +68,7 @@ class GameState: return False def Eliminate(self,row,col,nxt_row,nxt_col):#下一步可吃对手的棋 - return self.board[nxt_row][nxt_col] == '00' or self.board[nxt_row][nxt_col][0] != self.board[row][col][0] and (eval(self.board[row][col][1]) >= eval(self.board[nxt_row][nxt_col][1]) or self[row][col][1]==1 and self.board[row][col][1]==7) + return self.board[nxt_row][nxt_col] == '00' or self.board[nxt_row][nxt_col][0] != self.board[row][col][0] and (eval(self.board[row][col][1]) >= eval(self.board[nxt_row][nxt_col][1]) and not (eval(self.board[row][col][1]) == 7 and eval(self.board[nxt_row][nxt_col][1]) == 1 ) or eval(self.board[row][col][1])==1 and eval(self.board[nxt_row][nxt_col][1])==7) # 定义移动方式 #---------------------------------- @@ -76,7 +76,7 @@ class GameState: # 1.下一步的可行位置以二维数组的格式进行记录。 # 2.getValidMoves返回值为下一步可行位置构成的集合。 #---------------------------------- - def getAllMoves(self): + def getAllMoves(self): #全部合法移动的集合 moves=[] for row in range(len(self.board)): for col in range(len(self.board[row])): @@ -92,7 +92,7 @@ class GameState: for direction in directions: new_row = row + direction[0]*1 new_col = col + direction[1]*1 - if 0<=new_row<=8 and 0<=new_col<=6 : + if 0<=new_row<=6 and 0<=new_col<=8 : nxt_piece = self.board[new_row][new_col] if nxt_piece == '00' and not self.inWater(new_row,new_col) and not self.inHome(new_row,new_col,self.color):#如果下一个位置是空的,则可以移动 moves.append(Move((row,col),(new_row,new_col),self.board)) @@ -105,12 +105,12 @@ class GameState: enemy_color = 'b' if self.red_to_move else 'r' for direction in directions: new_row = row + direction[0]*1 - new_col = col + direction[0]*1 - if 0<=new_row<=8 and 0<=new_col<=6 : + new_col = col + direction[1]*1 + if 0<=new_row<=6 and 0<=new_col<=8 : nxt_piece = self.board[new_row][new_col] - if nxt_piece == '00' and not self.inHome(new_row,new_col,self.color): + if nxt_piece == '00': moves.append(Move((row,col),(new_row,new_col),self.board)) - elif nxt_piece[0]==enemy_color and self.Eliminate(row,col,new_row,new_col): + elif nxt_piece[0]==enemy_color and self.Eliminate(row,col,new_row,new_col) and not self.inWater(row,col): moves.append(Move((row,col),(new_row,new_col),self.board)) return moves @@ -155,7 +155,7 @@ class GameState: for direction in directions: new_row = row + direction[0]*1 new_col = col + direction[1]*1 - if 0<=new_row<=8 and 0<=new_col<=6 : + if 0<=new_row<=6 and 0<=new_col<=8 : nxt_piece = self.board[new_row][new_col] if nxt_piece == '00' and not self.inWater(new_row,new_col) and not self.inHome(new_row,new_col,self.color):#如果下一个位置是空的,则可以移动 moves.append(Move((row,col),(new_row,new_col),self.board)) @@ -170,7 +170,7 @@ class GameState: for i in range(1, 2): end_row = row + direction[0] * 1 end_col = col + direction[1] * 1 - if 0 <= end_row <= 8 and 0 <= end_col <= 6: # check for possible moves only in boundaries of the board + if 0 <= end_row <= 6 and 0 <= end_col <= 8: # check for possible moves only in boundaries of the board end_piece = self.board[end_row][end_col] if end_piece == "--" and not self.inWater(end_row,end_col) and self.moveNotOwnDen(end_row,end_col,enemy_color): # empty space is valid and Not in Water @@ -203,6 +203,7 @@ class GameState: def makeMove(self,move):#cur是当前位置,nxt是下一个位置,参数传入为元组 self.board[move.end_row][move.end_col] = self.board[move.start_row][move.start_col] self.board[move.start_row][move.start_col] = '00' + self.red_to_move = not self.red_to_move class Move: def __init__(self,start_loc,end_loc,board): @@ -212,4 +213,9 @@ class Move: self.end_col = end_loc[1] self.nxt_piece = board[self.end_row][self.end_col] self.cur_piece = board[self.start_row][self.start_col] - self.attack = self.nxt_piece != '00' \ No newline at end of file + self.attack = self.nxt_piece != '00' + self.moveID = self.start_row + self.start_col*10 + self.end_row *100 +self.end_col * 1000 #Hash + def __eq__(self, __o: object) -> bool: + if isinstance(__o, Move): + return self.moveID == __o.moveID + return False \ No newline at end of file diff --git a/__pycache__/SafariChess_Classes.cpython-39.pyc b/__pycache__/SafariChess_Classes.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3a53c35c9ee47c5dece24509bb8d778e75e34ea5 GIT binary patch literal 779 zcmY*XJ&)5c7`B~{=0bajg@NG|v1Pg879@nwK_zaBkjj9fN|tN8N7^(lwu5w4HoEd3 z?neHSS7!bI6R(q_3a{iR?_)d9`(-wpr3mc$_cMM@5c=iG*a9Heu*`D+fl73P1Qz6o z1o=)%EP@5f!^2IQfi2jY>1zH(8bjwbGe(-r{at_bNVB!l*{ZcxH5qF}wv~4)#k9!e zH`!Q|atQLDox)$hwnPvRl|;mXh~S9JK!hSXqB0a1(wMmTeJ@?`a3tb=FEfW_yiA8X zL;*LrBLe^MjC28DAP~rqBFAoG)xMT%n};r{cI;NV=qI42XC8bLN8lr94B%U0{D2djM*U8a d6E~q$C{Ag=G5W1n84`Xogna8ojBi;O{RP(Ju%`e3 literal 0 HcmV?d00001 diff --git a/__pycache__/SafariChess_backend.cpython-39.pyc b/__pycache__/SafariChess_backend.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2aa1243e7f0d36b5e1a4efa2a0fea19764d37602 GIT binary patch literal 6978 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 literal 0 HcmV?d00001