用python写井字棋脚本

这边主要有两种方法

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)

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值