python实现简单的井字棋游戏(gui界面)
程序员文章站
2022-06-19 15:15:25
项目输出项目先决条件要使用python构建井字游戏,我们需要tkinter模块和python的基本概念tkinter模块是用于渲染图形的标准图形用户界面。tkinter.messagebox用于显示消...
项目输出
项目先决条件
要使用python构建井字游戏,我们需要tkinter模块和python的基本概念
tkinter模块是用于渲染图形的标准图形用户界面。
tkinter.messagebox用于显示消息框
要安装tkinter模块,我们在命令提示符下使用了pip install命令:
pip install tkinter
项目文件结构
这些是使用python构建井字游戏的步骤:
- 导入模块
- 初始化窗口
- 检查结果的功能
- 检查获胜者的功能
- 定义标签和按钮
1.导入模块
from tkinter import * import tkinter.messagebox as msg
在此步骤中,我们导入tkinter和messsagebox模块
2.初始化窗口
root= tk() root.title('tic-tac-toe---dataflair') digits = [1,2,3,4,5,6,7,8,9] mark = '' “ count = 0 panels = ["panel"]*10
- tk()用于初始化窗口
- title()用于设置窗口的标题
3.检查结果的功能
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))
在此功能中,将通过检查哪个玩家连续打出三个标记(上,下,对角或对角线)来检查结果。
4.检查获胜者的功能
def checker(digit): global count, mark, digits if digit==1 and digit in digits: digits.remove(digit) if count%2==0: mark ='x' panels[digit]=mark elif count%2!=0: mark = 'o' panels[digit]=mar 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 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>8 and win(panels,'x')==false and win(panels,'o')==false): msg.showinfo("result","match tied") root.destroy()
玩家总共有9次点击以玩游戏。玩家每次单击时,如果count的值大于8,则通过将count的值增加1来减少机会,则游戏结果为平局
- 如果count的值为偶数,则玩家1将玩,否则玩家2将玩。
- config()用于用适当的文本标记按钮
- messagebox小部件中的showinfo()方法用于显示一些相关信息
- destroy()停止mainloop退出程序
5.定义标签和按钮
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) 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) root.mainloop()
label()小部件,用于显示用户无法修改的文本。
button()小部件显示按钮
- root是我们引用的窗口的名称
- 文本存储我们在标签上显示的值
- 文字所使用的字体
- 单击按钮时将调用命令
- lambda()函数用于将特定数据发送到回调函数。
要运行程序时,将执行mainloop()方法。
完整代码
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): global count, mark, digits #check which button clicked 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() ####define buttons 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) root.mainloop()
以上就是python实现简单的井字棋游戏的详细内容,更多关于python 井字棋游戏的资料请关注其它相关文章!