这边主要有两种方法
1.turtle
from tkinter.messagebox import*
from turtle import*
用的就是这两种模块
turtle负责图像,tkinter.messagebox是一个专门负责弹窗的模块
ht()
speed(0)
pensize(3)
a=Screen()
a.setup(width=0.5,height=0.5)
turtle的画笔可以设置很多东西
这边设置的东西分别是:
ht() 隐藏画笔
speed() 速度(0最快)
pensize(size) 画笔痕迹宽度(1*size像素)
a=Screen() 设置弹窗,弹窗名为a
a.setup(width=0.5,height=0.5) 窗口大小设置,0.5指的是宽的100%*0.5(50%),高也一样,超过1时每1为1格像素
def c(d,e):#判断图案
pu()
goto(b*50-d,e)
pd()
if l%2==0:
write('X',font=('黑体',40,'normal'))
else:
write('O',font=('黑体',40,'normal'))
#绘制棋盘
for i in range(2):
pu()
goto(-50,50-i*50)
pd()
fd(150)
left(90)
for g in range(2):
pu()
goto(g*50,-50)
pd()
fd(150)
#主循环
for l in range(9):
b=int(a.numinput('锐骐牌井字棋','请输入你想要的位置',default=1,maxval=9,minval=1))
#turtle的输出函数 最后的设置分别是:
#默认 最大 最小
if b<4:#此段解释看后面
c(75,50)
elif 3<b<7:
c(225,0)
else:
c(375,-50)
'''
-50 0 50
1 2 3 -50
4 5 6 0
7 8 9 50
由于棋子是下在中间的
所以x轴坐标都是5结尾
'''
判断函数设置比较麻烦
这里是我自己研究的一个方法
j=['0','0','0','0','0','0','0','0','0']#创造列表,元素=是否有棋子
def c(d,e):
pu()
goto(b*50-d,e)
pd()
if l%2==0:
write('X',font=('黑体',40,'normal'))
j[b-1]='1'
else:
write('O',font=('黑体',40,'normal'))
j[b-1]='2'
for i in range(2):
pu()
goto(-50,50-i*50)
pd()
fd(150)
left(90)
for g in range(2):
pu()
goto(g*50,-50)
pd()
fd(150)
def k(n):
#tkinter.messagebox的弹窗
showerror('苦瓜牌井字棋','“'+str(n)+'”赢了')
for l in range(9):
b=int(a.numinput('苦瓜牌井字棋','请输入你想要的位置',default=1,maxval=9,minval=1))
if b<4:
c(75,50)
elif 3<b<7:
c(225,0)
else:
c(375,-50)
if j[0]+j[4]+j[8]=='111' or j[2]+j[4]+j[6]=='111' or j[0]+j[3]+j[6]=='111' or j[1]+j[4]+j[7]=='111' or j[2]+j[5]+j[8]=='111' or j[0]+j[1]+j[2]=='111' or j[3]+j[4]+j[5]=='111' or j[6]+j[7]+j[8]=='111':#判断8路是否有x连通
k('X')
done()
elif j[0]+j[4]+j[8]=='222' or j[2]+j[4]+j[6]=='222' or j[0]+j[3]+j[6]=='222' or j[1]+j[4]+j[7]=='222' or j[2]+j[5]+j[8]=='222' or j[0]+j[1]+j[2]=='222' or j[3]+j[4]+j[5]=='222' or j[6]+j[7]+j[8]=='222':
k('O')
done()#防止有人胜利了还下
showerror('苦瓜牌井字棋','平局')
done()#防止有人平局完还下
完整代码(不含注释):
from tkinter.messagebox import*;from turtle import*
ht();speed(0);pensize(3);a=Screen();a.setup(width=0.5,height=0.5)
j=['0','0','0','0','0','0','0','0','0']
def c(d,e):
pu();goto(b*50-d,e);pd()
if l%2==0:write('X',font=('黑体',40,'normal'));j[b-1]='1'
else:write('O',font=('黑体',40,'normal'));j[b-1]='2'
for i in range(2):pu();goto(-50,50-i*50);pd();fd(150)
left(90)
for g in range(2):pu();goto(g*50,-50);pd();fd(150)
def k(n):showerror('苦瓜牌井字棋','“'+str(n)+'”赢了')
for l in range(9):
b=int(a.numinput('苦瓜牌井字棋','请输入你想要的位置',default=1,maxval=9,minval=1))
if b<4:c(75,50)
elif 3<b<7:c(225,0)
else:c(375,-50)
if j[0]+j[4]+j[8]=='111' or j[2]+j[4]+j[6]=='111' or j[0]+j[3]+j[6]=='111' or j[1]+j[4]+j[7]=='111' or j[2]+j[5]+j[8]=='111' or j[0]+j[1]+j[2]=='111' or j[3]+j[4]+j[5]=='111' or j[6]+j[7]+j[8]=='111':k('X');done()
elif j[0]+j[4]+j[8]=='222' or j[2]+j[4]+j[6]=='222' or j[0]+j[3]+j[6]=='222' or j[1]+j[4]+j[7]=='222' or j[2]+j[5]+j[8]=='222' or j[0]+j[1]+j[2]=='222' or j[3]+j[4]+j[5]=='222' or j[6]+j[7]+j[8]=='222':k('O');done()
showerror('苦瓜牌井字棋','平局');done()
2.tkinter
先导入模块
from tkinter.messagebox import*
from tkinter import*
然后要制造窗口
a=Tk();a.geometry('60x60')#设置tkinter窗口
制造按钮,我甚至只需要两行代码函数待会儿设置
def i(j,k,l):h=Button(text='',font=('normal',10),command=j);h.place(x=k,y=l,width=20,height=20)#制造制造棋子函数(函数,x轴位置,y轴位置)
i(b,0,0);i(r,20,0);i(u,40,0);i(f,0,20);i(s,20,20);i(v,40,20);i(q,0,40);i(t,20,40);i(w,40,40)
老规矩判断胜利函数
但是tkinter比较特殊,每按一次按钮等于turtle运行一次主循环,直接来比较麻烦
可以制造一个制造函数
def c(d,e,g):#制造制造函数函数(x轴位置,y轴位置,列表棋子元素位置)
global y#控制全局变量
if y%2==0:h=Button(text='×',font=('normal',10));h.place(x=d,y=e,width=20,height=20);x[g]='1'#判断棋子
elif y%2==1:h=Button(text='〇',font=('normal',10));h.place(x=d,y=e,width=20,height=20);x[g]='2'
y+=1#增加次数
if x[0]+x[4]+x[8]=='111' or x[2]+x[4]+x[6]=='111' or x[0]+x[3]+x[6]=='111' or x[1]+x[4]+x[7]=='111' or x[2]+x[5]+x[8]=='111' or x[0]+x[1]+x[2]=='111' or x[3]+x[4]+x[5]=='111' or x[6]+x[7]+x[8]=='111':showerror('锐骐の井字棋','“×”赢了')
elif x[0]+x[4]+x[8]=='222' or x[2]+x[4]+x[6]=='222' or x[0]+x[3]+x[6]=='222' or x[1]+x[4]+x[7]=='222' or x[2]+x[5]+x[8]=='222' or x[0]+x[1]+x[2]=='222' or x[3]+x[4]+x[5]=='222' or x[6]+x[7]+x[8]=='222':showerror('锐骐の井字棋','“〇”赢了')
elif '0' not in x:showerror('苦瓜牌井字棋','平局')#判断是否有空位
完整代码:
from tkinter.messagebox import*
from tkinter import*
a=Tk();a.geometry('60x60')
x,y=['0','0','0','0','0','0','0','0','0'],0
def c(d,e,g):
global y
if y%2==0:h=Button(text='×',font=('normal',10));h.place(x=d,y=e,width=20,height=20);x[g]='1'
elif y%2==1:h=Button(text='〇',font=('normal',10));h.place(x=d,y=e,width=20,height=20);x[g]='2'
y+=1
if x[0]+x[4]+x[8]=='111' or x[2]+x[4]+x[6]=='111' or x[0]+x[3]+x[6]=='111' or x[1]+x[4]+x[7]=='111' or x[2]+x[5]+x[8]=='111' or x[0]+x[1]+x[2]=='111' or x[3]+x[4]+x[5]=='111' or x[6]+x[7]+x[8]=='111':showerror('锐骐の井字棋','“×”赢了')
elif x[0]+x[4]+x[8]=='222' or x[2]+x[4]+x[6]=='222' or x[0]+x[3]+x[6]=='222' or x[1]+x[4]+x[7]=='222' or x[2]+x[5]+x[8]=='222' or x[0]+x[1]+x[2]=='222' or x[3]+x[4]+x[5]=='222' or x[6]+x[7]+x[8]=='222':showerror('锐骐の井字棋','“〇”赢了')
elif '0' not in x:showerror('苦瓜牌井字棋','平局')
def b():c(0,0,0)
def f():c(0,20,1)
def q():c(0,40,2)
def r():c(20,0,3)
def s():c(20,20,4)
def t():c(20,40,5)
def u():c(40,0,6)
def v():c(40,20,7)
def w():c(40,40,8)
def i(j,k,l):h=Button(text='',font=('normal',10),command=j);h.place(x=k,y=l,width=20,height=20)
i(b,0,0);i(r,20,0);i(u,40,0);i(f,0,20);i(s,20,20);i(v,40,20);i(q,0,40);i(t,20,40);i(w,40,40)