0

在我的程序中,用户可以使用箭头或 WASD 键移动图像。画布上有细长的矩形表示墙壁。用户不应该能够通过这些墙壁移动图像。我编写了代码来帮助防止这种情况发生,但是当我运行它时,玩家根本无法移动图像(没有错误,玩家只是无法再移动图像)。下面是其中一堵墙的示例代码。

#function to prevent level1_Player from passing through the level 1 walls
def level1_WallBoundaries():
    global abilityToMove
    abilityToMove = False
    level1_Player_B = level1_canvas.bbox(level1_Player)
    level1_wall1_B = level1_canvas.bbox(level1_wall1)
    if level1_wall1_B[1] < level1_Player_B[2] < level1_wall1_B[2] and level1_wall1_B[1] < level1_Player_B[1] < level1_wall1_B[3]:
        abilityToMove = True

#functions to move the player image on the level 1 canvas
def left_level1(event):
    level1_WallBoundaries()
    global level1_Player_x
    if level1_Player_x >= 75 and abilityToMove == True:
        level1_canvas.move(level1_Player, -10, 0)
        level1_Player_x = level1_Player_x -10
    
def right_level1(event):
    level1_WallBoundaries()
    global level1_Player_x
    if level1_Player_x <= 1925 and abilityToMove == True:
        level1_canvas.move(level1_Player, 10, 0)
        level1_Player_x = level1_Player_x +10
    
def up_level1(event):
    level1_WallBoundaries()
    global level1_Player_y
    if level1_Player_y >= 125 and abilityToMove == True:
        level1_canvas.move(level1_Player, 0, -10)
        level1_Player_y = level1_Player_y -10

def down_level1(event):
    level1_WallBoundaries()
    global level1_Player_y
    if level1_Player_y <= 1375 and abilityToMove == True:
        level1_canvas.move(level1_Player, 0, 10)
        level1_Player_y = level1_Player_y +10

    
#function to open the level 1 page
def level1():
    global level1_canvas, level1_Player, level1_Player_x, level1_Player_y, level1_Guard1, root4, level1_wall1

    
    #defining the x and y coordinates of the playerImage
    level1_Player_x = 1875
    level1_Player_y = 1375
    
    #close levelSelection page and open level1 page
    root3.destroy()
    root4 = Tk()
    
    #bring images onto canvas
    player = PhotoImage(file = 'Player.png')
    exitSign = PhotoImage(file = 'exitSign.png')
    guard = PhotoImage(file = 'Guard.png')
    
    #binding KeyPress events to the pop up box
    root4.bind("<a>", left_level1)
    root4.bind("<d>", right_level1)
    root4.bind("<w>", up_level1)
    root4.bind("<s>", down_level1)
    root4.bind('<Left>', left_level1)
    root4.bind('<Right>', right_level1)
    root4.bind('<Up>', up_level1)
    root4.bind('<Down>', down_level1)
    
    #create a canvas for the level1 and put it into the root
    level1_canvas = Canvas(root4, height = 1500, width = 2000, bg = 'LightBlue3')
    level1_canvas.pack()
    
    #bring player image onto canvas
    level1_ExitSign = level1_canvas.create_image(1875, 100, image = exitSign)
    level1_Player= level1_canvas.create_image(level1_Player_x, level1_Player_y, image = player)
    level1_Guard1 = level1_canvas.create_image(1400, 975, image = guard)
    
    
    #create the walls for the level
    level1_wall1 = level1_canvas.create_rectangle(1350, 975, 1375, 1500, fill = 'gray28')
    level1_wall2 = level1_canvas.create_rectangle(1350, 300, 2000, 325, fill = 'gray28')
    level1_wall3 = level1_canvas.create_rectangle(975, 0, 1000, 500, fill = 'gray28')
    level1_wall4 = level1_canvas.create_rectangle(0, 500, 450, 525, fill = 'gray28')
    level1_wall5 = level1_canvas.create_rectangle(425, 500, 450, 725, fill = 'gray28')
    level1_wall6 = level1_canvas.create_rectangle(0, 1200, 450, 1225, fill = 'gray28')
    level1_wall7 = level1_canvas.create_rectangle(425, 1200, 450, 1025, fill = 'gray28')
    
    mainloop()#end level1 page
4

0 回答 0