史上最简单的推箱子(Python版)

from tkinter import *
curRow=0
curCol=0
def main():
    boxWidth = 20
    direct=[0,0]
   
    tk = Tk()
    canvas = Canvas(tk, width = 400, height = 400)
    canvas.pack()
    levelArr = [[1, 1, 1, 1, 0, 0, 0, 0],[1, 0, 0, 1, 1, 1, 1, 1],[1, 0, 2, 0, 0, 3, 0, 1],[1, 0, 3, 0, 0, 2, 4, 1],[1, 1, 1, 0, 0, 1, 1, 1],[0, 0, 1, 1, 1, 1, 0, 0]]
    for i in range(len(levelArr)):
        for j in range(len(levelArr[i])):
            if levelArr[i][j]==1:
                wallMC =canvas.create_rectangle(j*boxWidth, i*boxWidth, j*boxWidth+boxWidth, i*boxWidth+boxWidth,fill="grey")
            elif levelArr[i][j]==2:
                goalMC = canvas.create_rectangle(j*boxWidth, i*boxWidth, j*boxWidth+boxWidth, i*boxWidth+boxWidth,fill="#009900")
            elif levelArr[i][j]==3:
                boxMC = canvas.create_rectangle(j*boxWidth, i*boxWidth, j*boxWidth+boxWidth, i*boxWidth+boxWidth,fill="yellow",tags = str(i)+"_"+str(j))
                print(str(i)+"_"+str(j))
            elif levelArr[i][j]==4:
                manMC = canvas.create_oval(j*boxWidth, i*boxWidth, j*boxWidth+boxWidth, i*boxWidth+boxWidth,fill="red",tags = "manMC")
                global curRow,curCol
                curRow=i
                curCol=j
    canvas.tag_lower(goalMC)      
    def isBox(row,col):
        num=levelArr[row][col]
        if (num % 2 == 1 and num > 1):           
            return True
        else:
            return False


    def isWalkable(row,col):
        if levelArr[row][col] % 2 == 0:           
            return True
        else:
            return False

        
    def moveMan(row,col):
        global curRow,curCol
        print(curRow+row)
        levelArr[curRow+row][curCol+col]+=4
        levelArr[curRow][curCol]-= 4
        curRow+= row
        curCol+= col
        canvas.move("manMC",col*boxWidth,row*boxWidth)

        
    def moveBox(name,boxRow,boxCol,row,col):
        levelArr[boxRow + row][boxCol + col] += 3;
        levelArr[boxRow][boxCol] -= 3;        
        canvas.move(name,col*boxWidth,row*boxWidth)
        boxMC=canvas.find_withtag(name)
        tag=str(boxRow + row) + "_" + str(boxCol + col)        
        canvas.itemconfig(boxMC, tags=tag)

        if levelArr[boxRow + row][boxCol + col] == 5:
            canvas.itemconfig(boxMC, fill="#00ff00")
        else:
            canvas.itemconfig(boxMC, fill="yellow")

    def canMove(row,col):
        global curRow,curCol
        if isWalkable(curRow+row,curCol+col):
           moveMan(row,col)
        else:
            if isBox(curRow + row, curCol + col):
                if (isWalkable(curRow + 2 * row,curCol + 2 * col)):
                    boxName= str(curRow + row) + "_" + str(curCol + col);
                    moveBox(boxName,(curRow + row),(curCol + col),row,col);
                    moveMan(row, col);
                    
    
        
     
    def moverectangle(event):
        if event.keysym == "Up":
            canMove(-1,0)            
        elif event.keysym == "Down":
            canMove(1,0)
        elif event.keysym == "Left":            
            canMove(0,-1)            
        elif event.keysym == "Right":            
            canMove(0,1)


    canvas.bind_all("<KeyPress-Up>",moverectangle)
    canvas.bind_all("<KeyPress-Down>",moverectangle)
    canvas.bind_all("<KeyPress-Left>",moverectangle)
    canvas.bind_all("<KeyPress-Right>",moverectangle)

    
if __name__ == '__main__':
    main()
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西部秋虫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值