“ Player2”无法执行与“玩家”相同的操作

时间:2020-06-09 17:19:21

标签: python pygame game-development mu

add rsp, 8
iretq

我刚刚尝试将player2引入我在MU-editor中制作的python游戏中,我可以看到player2并将其移动,但是存在一些问题。敌人不追逐玩家2,玩家2无法取钱。我还想为玩家2添加一个score2变量,并在他与钱发生冲突时存储该分数。

1 个答案:

答案 0 :(得分:2)

要提取款项,您必须在playyer2money之间添加碰撞测试:

score2 = 0

def update():
    global score, score2

    # [...]

    if money.colliderect(player2):
        money.x = random.randint(0, WIDTH)
        money.y = random.randint(0, HEIGHT)
        score2 += 1

要追赶playerplayer2,您必须找到更接近敌人的玩家。比较Euclidean distance从敌人到玩家的平方并追逐距离更近的玩家:

def update():

    dx1, dy1 = player.x - enemy.x, player.y - enemy.y
    dx2, dy2 = player2.x - enemy.x, player2.y - enemy.y
    dist1sq = dx1*dx1 + dy1*dy1
    dist2sq = dx2*dx2 + dy2*dy2 

    player_near = player if dist1sq < dist2sq else player2

    if enemy.x < player_near.x:
        enemy.x += 1
    if enemy.x > player_near.x:
        enemy.x -= 1
    if enemy.y < player_near.y:
        enemy.y += 1
    if enemy.y > player_near.y:
        enemy.y -= 1
    if player.colliderect(enemy):
        exit()
    if player2.colliderect(enemy):
        exit()

    # [...]

功能update

def update():
    global score, score2

    if keyboard.right:
        player.x += 4
    if keyboard.left:
        player.x -= 4
    if keyboard.down:
        player.y += 4
    if keyboard.up:
        player.y -= 4

    if player.x > WIDTH:
        player.x = WIDTH
    if player.x < 0:
        player.x = 0
    if player.y < 0:
        player.y = 0
    if player.y > HEIGHT:
        player.y = HEIGHT

    if keyboard.d:
        player2.x += 4
    if keyboard.a:
        player2.x -= 4
    if keyboard.s:
        player2.y += 4
    if keyboard.w:
        player2.y -= 4

    if player2.x > WIDTH:
        player2.x = WIDTH
    if player2.x < 0:
        player2.x = 0
    if player2.y < 0:
        player2.y = 0
    if player2.y > HEIGHT:
        player2.y = HEIGHT

    dx1, dy1 = player.x - enemy.x, player.y - enemy.y
    dx2, dy2 = player2.x - enemy.x, player2.y - enemy.y
    dist1sq = dx1*dx1 + dy1*dy1
    dist2sq = dx2*dx2 + dy2*dy2 

    player_near = player if dist1sq < dist2sq else player2

    if enemy.x < player_near.x:
        enemy.x += 1
    if enemy.x > player_near.x:
        enemy.x -= 1
    if enemy.y < player_near.y:
        enemy.y += 1
    if enemy.y > player_near.y:
        enemy.y -= 1
    if player.colliderect(enemy):
        exit()
    if player2.colliderect(enemy):
        exit()

    if money.colliderect(player):
        money.x = random.randint(0, WIDTH)
        money.y = random.randint(0, HEIGHT)
        score = score + 1

    if money.colliderect(player2):
        money.x = random.randint(0, WIDTH)
        money.y = random.randint(0, HEIGHT)
        score2 += 1