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

史上最简单的推箱子(Python版)_第1张图片

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("",moverectangle)
    canvas.bind_all("",moverectangle)
    canvas.bind_all("",moverectangle)
    canvas.bind_all("",moverectangle)

    
if __name__ == '__main__':
    main()
 

你可能感兴趣的:(python,python,开发语言)