温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么用Python+Tkinter实现经典井字棋小游戏

发布时间:2022-03-14 11:56:38 来源:亿速云 阅读:433 作者:iii 栏目:开发技术

这篇文章主要讲解了“怎么用Python+Tkinter实现经典井字棋小游戏”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Python+Tkinter实现经典井字棋小游戏”吧!

    演示

    怎么用Python+Tkinter实现经典井字棋小游戏

    介绍

    首先来介绍一下GUI库Tkinter

    怎么用Python+Tkinter实现经典井字棋小游戏

    主要模块:

    tkinter
    Main Tkinter module.

    tkinter.colorchooser 让用户选择颜色的对话框。

    tkinter.commondialog 本文其他模块定义的对话框的基类。

    tkinter.filedialog 允许用户指定文件的通用对话框,用于打开或保存文件。

    tkinter.font 帮助操作字体的工具。

    tkinter.messagebox 访问标准的 Tk 对话框。

    tkinter.scrolledtext 内置纵向滚动条的文本组件。

    tkinter.simpledialog 基础对话框和一些便捷功能。

    tkinter.ttk
    Themed widget set introduced in Tk 8.5, providing modern alternatives for many of the classic widgets in the main tkinter module.

    一个小demo大家熟悉一下

    from tkinter import *
    from tkinter import ttk
    root = Tk()
    frm = ttk.Frame(root, padding=10)
    frm.grid()
    ttk.Label(frm, text="Hello World!").grid(column=0, row=0)
    ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0)
    root.mainloop()

    官方文档

    我说的再好也不如去看看文档,有什么不明白的可以下方留言。嘿嘿嘿传送门

    tkinter.messagebox

    这部分其实我就是直接拿来用了没怎么了解,我把经常用的给大家说说

    怎么用Python+Tkinter实现经典井字棋小游戏

    class tkinter.messagebox.Message(master=None, **options)
    创建一个默认信息消息框。
    
    信息消息框
    
    tkinter.messagebox.showinfo(title=None, message=None, **options)
    警告消息框
    
    tkinter.messagebox.showwarning(title=None, message=None, **options)
    tkinter.messagebox.showerror(title=None, message=None, **options)
    疑问消息框
    
    tkinter.messagebox.askquestion(title=None, message=None, **options)
    tkinter.messagebox.askokcancel(title=None, message=None, **options)
    tkinter.messagebox.askretrycancel(title=None, message=None, **options)
    tkinter.messagebox.askyesno(title=None, message=None, **options)
    tkinter.messagebox.askyesnocancel(title=None, message=None, **options)

    源码

    怎么用Python+Tkinter实现经典井字棋小游戏

    from tkinter import *
    import tkinter.messagebox as msg
    
    root = Tk()
    root.title('TIC-TAC-TOE---Project Gurukul')
    # labels
    Label(root, text="player1 : X", font="times 15").grid(row=0, column=1)
    Label(root, text="player2 : O", font="times 15").grid(row=0, column=2)
    
    digits = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    # for player1 sign = X and for player2 sign= Y
    mark = ''
    
    # counting the no. of click
    count = 0
    
    panels = ["panel"] * 10
    
    
    def win(panels, sign):
        return ((panels[1] == panels[2] == panels[3] == sign)
                or (panels[1] == panels[4] == panels[7] == sign)
                or (panels[1] == panels[5] == panels[9] == sign)
                or (panels[2] == panels[5] == panels[8] == sign)
                or (panels[3] == panels[6] == panels[9] == sign)
                or (panels[3] == panels[5] == panels[7] == sign)
                or (panels[4] == panels[5] == panels[6] == sign)
                or (panels[7] == panels[8] == panels[9] == sign))
    
    
    def checker(digit):
    
        # 检查按键
    
        if digit == 1 and digit in digits:
            digits.remove(digit)
            ##player1 will play if the value of count is even and for odd player2 will play
            if count % 2 == 0:
                mark = 'X'
                panels[digit] = mark
            elif count % 2 != 0:
                mark = 'O'
                panels[digit] = mark
    
            button1.config(text=mark)
            count = count + 1
            sign = mark
    
            if (win(panels, sign) and sign == 'X'):
                msg.showinfo("Result", "Player1 wins")
                root.destroy()
            elif (win(panels, sign) and sign == 'O'):
                msg.showinfo("Result", "Player2 wins")
                root.destroy()
    
        if digit == 2 and digit in digits:
            digits.remove(digit)
    
            if count % 2 == 0:
                mark = 'X'
                panels[digit] = mark
            elif count % 2 != 0:
                mark = 'O'
                panels[digit] = mark
    
            button2.config(text=mark)
            count = count + 1
            sign = mark
    
            if (win(panels, sign) and sign == 'X'):
                msg.showinfo("Result", "Player1 wins")
                root.destroy()
            elif (win(panels, sign) and sign == 'O'):
                msg.showinfo("Result", "Player2 wins")
                root.destroy()
    
        if digit == 3 and digit in digits:
            digits.remove(digit)
    
            if count % 2 == 0:
                mark = 'X'
                panels[digit] = mark
            elif count % 2 != 0:
                mark = 'O'
                panels[digit] = mark
    
            button3.config(text=mark)
            count = count + 1
            sign = mark
    
            if (win(panels, sign) and sign == 'X'):
                msg.showinfo("Result", "Player1 wins")
                root.destroy()
            elif (win(panels, sign) and sign == 'O'):
                msg.showinfo("Result", "Player2 wins")
                root.destroy()
    
        if digit == 4 and digit in digits:
            digits.remove(digit)
    
            if count % 2 == 0:
                mark = 'X'
                panels[digit] = mark
            elif count % 2 != 0:
                mark = 'O'
                panels[digit] = mark
    
            button4.config(text=mark)
            count = count + 1
            sign = mark
    
            if (win(panels, sign) and sign == 'X'):
                msg.showinfo("Result", "Player1 wins")
                root.destroy()
            elif (win(panels, sign) and sign == 'O'):
                msg.showinfo("Result", "Player2 wins")
                root.destroy()
    
        if digit == 5 and digit in digits:
            digits.remove(digit)
    
            if count % 2 == 0:
                mark = 'X'
                panels[digit] = mark
            elif count % 2 != 0:
                mark = 'O'
                panels[digit] = mark
    
            button5.config(text=mark)
            count = count + 1
            sign = mark
    
            if (win(panels, sign) and sign == 'X'):
                msg.showinfo("Result", "Player1 wins")
                root.destroy()
            elif (win(panels, sign) and sign == 'O'):
                msg.showinfo("Result", "Player2 wins")
                root.destroy()
    
        if digit == 6 and digit in digits:
            digits.remove(digit)
    
            if count % 2 == 0:
                mark = 'X'
                panels[digit] = mark
            elif count % 2 != 0:
                mark = 'O'
                panels[digit] = mark
    
            button6.config(text=mark)
            count = count + 1
            sign = mark
    
            if (win(panels, sign) and sign == 'X'):
                msg.showinfo("Result", "Player1 wins")
                root.destroy()
            elif (win(panels, sign) and sign == 'O'):
                msg.showinfo("Result", "Player2 wins")
                root.destroy()
    
        if digit == 7 and digit in digits:
            digits.remove(digit)
    
            if count % 2 == 0:
                mark = 'X'
                panels[digit] = mark
            elif count % 2 != 0:
                mark = 'O'
                panels[digit] = mark
    
            button7.config(text=mark)
            count = count + 1
            sign = mark
    
            if (win(panels, sign) and sign == 'X'):
                msg.showinfo("Result", "Player1 wins")
                root.destroy()
            elif (win(panels, sign) and sign == 'O'):
                msg.showinfo("Result", "Player2 wins")
                root.destroy()
    
        if digit == 8 and digit in digits:
            digits.remove(digit)
    
            if count % 2 == 0:
                mark = 'X'
                panels[digit] = mark
            elif count % 2 != 0:
                mark = 'O'
                panels[digit] = mark
    
            button8.config(text=mark)
            count = count + 1
            sign = mark
    
            if (win(panels, sign) and sign == 'X'):
                msg.showinfo("Result", "Player1 wins")
                root.destroy()
            elif (win(panels, sign) and sign == 'O'):
                msg.showinfo("Result", "Player2 wins")
                root.destroy()
    
        if digit == 9 and digit in digits:
            digits.remove(digit)
    
            if count % 2 == 0:
                mark = 'X'
                panels[digit] = mark
            elif count % 2 != 0:
                mark = 'O'
                panels[digit] = mark
    
            button9.config(text=mark)
            count = count + 1
            sign = mark
    
            if (win(panels, sign) and sign == 'X'):
                msg.showinfo("Result", "Player1 wins")
                root.destroy()
            elif (win(panels, sign) and sign == 'O'):
                msg.showinfo("Result", "Player2 wins")
                root.destroy()
    
        ###if count is greater then 8 then the match has been tied
        if (count > 8 and win(panels, 'X') == False and win(panels, 'O') == False):
            msg.showinfo("Result", "Match Tied")
            root.destroy()
    
    
    ####定义每个格子
    button1 = Button(root, width=15, font=('Times 16 bold'), height=7, command=lambda: checker(1))
    button1.grid(row=1, column=1)
    button2 = Button(root, width=15, height=7, font=('Times 16 bold'), command=lambda: checker(2))
    button2.grid(row=1, column=2)
    button3 = Button(root, width=15, height=7, font=('Times 16 bold'), command=lambda: checker(3))
    button3.grid(row=1, column=3)
    button4 = Button(root, width=15, height=7, font=('Times 16 bold'), command=lambda: checker(4))
    button4.grid(row=2, column=1)
    button5 = Button(root, width=15, height=7, font=('Times 16 bold'), command=lambda: checker(5))
    button5.grid(row=2, column=2)
    button6 = Button(root, width=15, height=7, font=('Times 16 bold'), command=lambda: checker(6))
    button6.grid(row=2, column=3)
    button7 = Button(root, width=15, height=7, font=('Times 16 bold'), command=lambda: checker(7))
    button7.grid(row=3, column=1)
    button8 = Button(root, width=15, height=7, font=('Times 16 bold'), command=lambda: checker(8))
    button8.grid(row=3, column=2)
    button9 = Button(root, width=15, height=7, font=('Times 16 bold'), command=lambda: checker(9))
    button9.grid(row=3, column=3)

    感谢各位的阅读,以上就是“怎么用Python+Tkinter实现经典井字棋小游戏”的内容了,经过本文的学习后,相信大家对怎么用Python+Tkinter实现经典井字棋小游戏这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI