栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python Tkinter——数字拼图游戏

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python Tkinter——数字拼图游戏

Python Tkinter 实践系列——数字拼图游戏

tkinter模块,掌握窗口创建、消息循环等tkinter的基本架构
读取并显示图片,处理键盘事件

  1. 导入random库,导入python中的tkinter库弹窗messagebox
import random 
import tkinter,tkinter.messagebox
  1. 读取图片文件生成对象的列表
def loadImages():
    global images  
    for i in range(16): 
        img=tkinter.PhotoImage(file='.\image\'+str(i+1)+'.gif')
        images.append(img)
    print(images)
  1. 打乱拼图顺序
def initPuzzle():
    global id,row,col
    id=[i for i in range(16)]
    row=3
    col=3
    for i in range(10):
        n=random.randint(1,4)
        if n==1:
            moveUp()
        elif n==2:
            moveDown()
        elif n==3:
            moveLeft()
        elif n==4:
            moveRight()
  1. 绘制图片拼图
def drawPuzzle(canvas):
    for i in range(4): 
        for j in range(4): 
            n=id[4*i+j]  
            canvas.create_image(100*j+3,100*i+3,anchor='nw',image=images[n])

5.按下光标键时对应的时间处理函数

def onMoveUp(event):
    moveUp()
    drawPuzzle(canvas)
    judge()


def onMoveDown(event):
    moveDown()
    drawPuzzle(canvas)
    judge()


def onMoveLeft(event):
    moveLeft()
    drawPuzzle(canvas)
    judge()
    
    
def onMoveRight(event):
    moveRight()
    drawPuzzle(canvas)
    judge()

  1. 黑色拼图移动
def moveUp(): 
    global id,row,col
    if row>0:  
        id[4*row+col]=id[4*(row-1)+col]  
        id[4*(row-1)+col]=15 
        row-=1 

def moveDown():
    global id,row,col
    if row<3:   
        id[4*row+col]=id[4*(row+1)+col]  
        id[4*(row+1)+col]=15 
        row+=1 

def moveLeft(): 
    global id,row,col
    if col>0: 
        id[4*row+col]=id[4*row+col-1]
        id[4*row+col-1]=15  
        col-=1

def moveRight(): 
    global id,row,col
    if col<3:  
        id[4*row+col]=id[4*row+col+1]
        id[4*row+col+1]=15  
        col+=1
  1. 判断是否完成拼图
def judge():
    global id
    for i in range(16):
        if id[i]!=i: 
            break
    else:
        tkinter.messagebox.showinfo('拼图','拼图成功!') 
        initPuzzle()
        drawPuzzle(canvas)
  1. 调用程序
id=[]                                       
images=[]                                   
row=0                                       
col=0                                      
win=tkinter.Tk()
win.wm_title("拼图")
win.resizable(False,False)
win.bind("",onMoveUp)          
win.bind("",onMoveDown)     
win.bind("", onMoveLeft)    
win.bind("",onMoveRight) 数
canvas=tkinter.Canvas(win,width=401,height=401,bg='black')
canvas.pack()
loadImages()
initPuzzle()
drawPuzzle(canvas)
win.mainloop()
完整代码
import random 
import tkinter,tkinter.messagebox

def loadImages():
    global images  
    for i in range(16): 
        img=tkinter.PhotoImage(file='.\image\'+str(i+1)+'.gif')
        images.append(img)
    print(images)

def initPuzzle():
    global id,row,col
    id=[i for i in range(16)]
    row=3
    col=3
    for i in range(10):
        n=random.randint(1,4)
        if n==1:
            moveUp()
        elif n==2:
            moveDown()
        elif n==3:
            moveLeft()
        elif n==4:
            moveRight()

def drawPuzzle(canvas):
    for i in range(4): 
        for j in range(4): 
            n=id[4*i+j]  
            canvas.create_image(100*j+3,100*i+3,anchor='nw',image=images[n])
          
def onMoveUp(event):
    moveUp()
    drawPuzzle(canvas)
    judge()


def onMoveDown(event):
    moveDown()
    drawPuzzle(canvas)
    judge()


def onMoveLeft(event):
    moveLeft()
    drawPuzzle(canvas)
    judge()
    
    
def onMoveRight(event):
    moveRight()
    drawPuzzle(canvas)
    judge()

def moveUp(): 
    global id,row,col
    if row>0:  
        id[4*row+col]=id[4*(row-1)+col]  
        id[4*(row-1)+col]=15 
        row-=1 

def moveDown():
    global id,row,col
    if row<3:   
        id[4*row+col]=id[4*(row+1)+col]  
        id[4*(row+1)+col]=15 
        row+=1 

def moveLeft(): 
    global id,row,col
    if col>0: 
        id[4*row+col]=id[4*row+col-1]
        id[4*row+col-1]=15  
        col-=1

def moveRight(): 
    global id,row,col
    if col<3:  
        id[4*row+col]=id[4*row+col+1]
        id[4*row+col+1]=15  
        col+=1

def judge():
    global id
    for i in range(16):
        if id[i]!=i: 
            break
    else:
        tkinter.messagebox.showinfo('拼图','拼图成功!') 
        initPuzzle()
        drawPuzzle(canvas)

id=[]                                       
images=[]                                   
row=0                                       
col=0                                      
win=tkinter.Tk()
win.wm_title("拼图")
win.resizable(False,False)
win.bind("",onMoveUp)          
win.bind("",onMoveDown)     
win.bind("", onMoveLeft)    
win.bind("",onMoveRight) 数
canvas=tkinter.Canvas(win,width=401,height=401,bg='black')
canvas.pack()
loadImages()
initPuzzle()
drawPuzzle(canvas)
win.mainloop()
参考运行结果

有任何问题、意见建议,欢迎留言!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/928230.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号