項目輸出
項目先決條件
要使用python構(gòu)建井字游戲,我們需要tkinter模塊和python的基本概念
Tkinter模塊是用于渲染圖形的標準圖形用戶界面。
Tkinter.messagebox用于顯示消息框
要安裝tkinter模塊,我們在命令提示符下使用了pip install命令:
項目文件結(jié)構(gòu)
這些是使用python構(gòu)建井字游戲的步驟:
- 導(dǎo)入模塊
- 初始化窗口
- 檢查結(jié)果的功能
- 檢查獲勝者的功能
- 定義標簽和按鈕
1.導(dǎo)入模塊
from tkinter import *
import tkinter.messagebox as msg
在此步驟中,我們導(dǎo)入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()用于設(shè)置窗口的標題
3.檢查結(jié)果的功能
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))
在此功能中,將通過檢查哪個玩家連續(xù)打出三個標記(上,下,對角或?qū)蔷€)來檢查結(jié)果。
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來減少機會,則游戲結(jié)果為平局
- 如果count的值為偶數(shù),則玩家1將玩,否則玩家2將玩。
- config()用于用適當?shù)奈谋緲擞洶粹o
- messagebox小部件中的showinfo()方法用于顯示一些相關(guān)信息
- 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是我們引用的窗口的名稱
- 文本存儲我們在標簽上顯示的值
- 文字所使用的字體
- 單擊按鈕時將調(diào)用命令
- lambda()函數(shù)用于將特定數(shù)據(jù)發(fā)送到回調(diào)函數(shù)。
要運行程序時,將執(zhí)行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實現(xiàn)簡單的井字棋游戲的詳細內(nèi)容,更多關(guān)于python 井字棋游戲的資料請關(guān)注腳本之家其它相關(guān)文章!
您可能感興趣的文章:- python實現(xiàn)簡單的井字棋
- 基于python純函數(shù)實現(xiàn)井字棋游戲
- Python實現(xiàn)井字棋小游戲
- python入門之井字棋小游戲
- python實現(xiàn)簡單井字棋小游戲
- python實現(xiàn)簡單井字棋游戲
- 基于python實現(xiàn)井字棋小游戲
- Python實現(xiàn)的井字棋(Tic Tac Toe)游戲示例
- python實現(xiàn)井字棋游戲
- python實現(xiàn)帶界面的井字棋小游戲