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("
canvas.bind_all("
canvas.bind_all("
canvas.bind_all("
if __name__ == '__main__':
main()