大多数时间,都在使用 deepin 系统,原来的 WPF 实现似乎越来越遥远了。这几天在家学习了一下 tkinter,顺便予以重写。

内在逻辑是一样的,就不重复,但具体实现层面,如图像不能改变大小等不一而足。由于 AI 出现,再去探讨怎么落子已变得毫无意义,所以只实现了最基本的吃子,打劫,倒扑,悔棋功能。

main.py 代码如下:

import os, sys, enum 
import tkinter as tk 
import tkinter.filedialog as fdlg
import tkinter.messagebox as mbox 
from core  import Board, StepBoard, Sgf, R 

CurrDir = os.path.dirname(__file__)
sys.path.append(CurrDir)

class App(tk.Tk):
    def __init__(self):
        super().__init__()

        menu = tk.Menu(self)
        
        weiqi_menu = tk.Menu(menu, tearoff=0)
        weiqi_menu.add_command(label='开始', command=self.start)
        weiqi_menu.add_command(label='加载SGF', command=self.load)
        weiqi_menu.add_command(label='保存SGF', command=self.save)
        weiqi_menu.add_command(label='退出', command=self.destroy)
        menu.add_cascade(label='围棋', menu=weiqi_menu)

        help_menu = tk.Menu(menu, tearoff=0)
        help_menu.add_command(label='测试', command=self.test)
        help_menu.add_command(label='关于', command=self.about)
        menu.add_cascade(label="帮助", menu=help_menu)

        self.config(menu=menu)

        self.boards = [Board(self), StepBoard(self)]

        self.board = self.boards[0]
        self.board.pack()

        self.x = (self.winfo_screenwidth()-self.board.w)//2
        self.set_geometry(self.board.w,self.board.h,self.x)

        self.title('x01.weiqi')
        self.configure(background=R.BgColor)

    def set_geometry(self,w=800,h=600,x=300,y=20):
        self.geometry('{}x{}+{}+{}'.format(w,h,x,y))

    def test(self):
        self.board.test_steps()

    def about(self):
        mbox.showinfo("关于 x01.weiqi", "为跨平台而采用 python 实现的围棋程序 x01.weiqi, 版权属于x01(黄雄)所有。")

    def start(self):
        self.board.back_all()
        self.board.pack_forget()
        self.board = self.boards[0]
        self.board.pack()
        self.set_geometry(self.board.w,self.board.h,self.x)

    def load(self):
        self.board.back_all()
        self.board.pack_forget()
        self.board = self.boards[1]
        self.board.pack()
        types = (('SGF files', '*.sgf'), ('All files', '*.*'))
        filename = fdlg.askopenfilename(title='打开棋谱', filetypes=types)
        if filename: self.board.load(filename)
        self.set_geometry(self.board.w,self.board.h,self.x)

    def save(self):
        steps = self.board.wqcore.SgfSteps
        sgf = Sgf()
        types = (('SGF files', '*.sgf'), ('All files', '*.*'))
        filename = fdlg.asksaveasfilename(title='保存棋谱', filetypes=types)
        if filename:
            sgf.Save(steps, filename)
            mbox.showinfo('保存棋谱','[' + filename + '] 保存成功')


if __name__ == "__main__":
    App().mainloop()
main.py

相关文章:

  • 2021-10-11
  • 2021-07-29
  • 2022-02-04
  • 2021-10-30
  • 2021-09-29
  • 2022-02-16
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-08-31
  • 2021-10-03
  • 2021-12-13
  • 2021-09-23
  • 2022-02-04
  • 2022-02-26
  • 2021-05-19
相关资源
相似解决方案