Pygame 做的中國象棋,一直以來喜歡下象棋,寫了 python 就拿來做一個試試,水平有限,電腦走法水平低,需要在下次版本中更新電腦走法,希望源碼能幫助大家更好的學習 python。總共分為四個文件,chinachess.py 為主文件,constants.py 數據常量,pieces.py 棋子類,走法,computer.py 電腦走法計算。
PS:另外很多人在學習Python的過程中,往往因為遇問題解決不了或者沒好的教程從而導致自己放棄,為此我整理啦從基礎的python腳本到web開發、爬蟲、django、數據挖掘等【PDF等】需要的可以進Python全棧開發交流.裙 :一久武其而而流一思(數字的諧音)轉換下可以找到了,里面有最新Python教程項目可拿,不懂的問題有老司機解決哦,一起相互監督共同進步
chinachess.py 為主文件
import pygame import time import constants import pieces import computer class MainGame(): window = None Start_X = constants.Start_X Start_Y = constants.Start_Y Line_Span = constants.Line_Span Max_X = Start_X + 8 * Line_Span Max_Y = Start_Y + 9 * Line_Span player1Color = constants.player1Color player2Color = constants.player2Color Putdownflag = player1Color piecesSelected = None button_go = None piecesList = [] def start_game(self): MainGame.window = pygame.display.set_mode([constants.SCREEN_WIDTH, constants.SCREEN_HEIGHT]) pygame.display.set_caption("天青-中國象棋") MainGame.button_go = Button(MainGame.window, "重新開始", constants.SCREEN_WIDTH - 100, 300) # 創建開始按鈕 self.piecesInit() while True: time.sleep(0.1) # 獲取事件 MainGame.window.fill(constants.BG_COLOR) self.drawChessboard() #MainGame.button_go.draw_button() self.piecesDisplay() self.VictoryOrDefeat() self.Computerplay() self.getEvent() pygame.display.update() pygame.display.flip() def drawChessboard(self): mid_end_y = MainGame.Start_Y + 4 * MainGame.Line_Span min_start_y = MainGame.Start_Y + 5 * MainGame.Line_Span for i in range(0, 9): x = MainGame.Start_X + i * MainGame.Line_Span if i==0 or i ==8: y = MainGame.Start_Y + i * MainGame.Line_Span pygame.draw.line(MainGame.window, constants.BLACK, [x, MainGame.Start_Y], [x, MainGame.Max_Y], 1) else: pygame.draw.line(MainGame.window, constants.BLACK, [x, MainGame.Start_Y], [x, mid_end_y], 1) pygame.draw.line(MainGame.window, constants.BLACK, [x, min_start_y], [x, MainGame.Max_Y], 1) for i in range(0, 10): x = MainGame.Start_X + i * MainGame.Line_Span y = MainGame.Start_Y + i * MainGame.Line_Span pygame.draw.line(MainGame.window, constants.BLACK, [MainGame.Start_X, y], [MainGame.Max_X