예제 #1
0
def green_mnm(sprite, obstacles, moveables, character):
    if sprite.state == "hit":
        if sprite.hitcount < 15:
            sprite.hitcount += 1
        else:
            sprite.hitcount = 0
            sprite.pushcount = 0
            sprite.waitcount = 0
            sprite.movecount = 0
            sprite.state = "wait2"
            for current_collisions in pygame.sprite.spritecollide(
                    sprite, moveables, 0):
                sprite.cannot_collide.add(current_collisions)
        return

    if sprite.state == "pushback":
        if sprite.pushcount < 2:
            sprite.pushcount += 1
        else:
            sprite.pushcount = 0
            sprite.movepos = [0, 0]
            sprite.state = "wait2"

    if sprite.state == "wait2":
        if sprite.waitcount < 40:
            sprite.waitcount += 1
        else:
            random.seed()
            sprite.waitcount = 0
            sprite.movepos[0] = random.randint(-1, 1) * 3
            sprite.movepos[1] = random.randint(-1, 1) * 3
            sprite.state = "move"

    if sprite.state == "move":
        if sprite.movecount < 60:
            sprite.movecount += 1
        else:
            sprite.movecount = 0
            sprite.movepos = [0, 0]
            sprite.state = "wait1"

    if sprite.state == "wait1":
        if sprite.waitcount < 40:
            sprite.waitcount += 1
        else:
            myProjectile = model.Projectile('slimeball.png', 2)
            character.currentroom.projectiles.add(myProjectile)
            myProjectile.rect.center = sprite.rect.center
            vec = utils.convert_to_unit_vector(sprite.rect.x, character.rect.x,
                                               sprite.rect.y, character.rect.y)
            myProjectile.movepos = [int(vec[0] * 12), int(vec[1] * 12)]
            sprite.state = 'wait2'
            sprite.waitcount = 0
예제 #2
0
def green_mnm(sprite, obstacles, moveables, character):
    if sprite.state == "hit":
        if sprite.hitcount < 15:
            sprite.hitcount += 1
        else:
            sprite.hitcount = 0
            sprite.pushcount = 0
            sprite.waitcount = 0
            sprite.movecount = 0
            sprite.state = "wait2"
            for current_collisions in pygame.sprite.spritecollide(sprite, moveables,0):
                sprite.cannot_collide.add(current_collisions)
        return
   
    if sprite.state == "pushback":
        if sprite.pushcount < 2:
            sprite.pushcount += 1
        else:
            sprite.pushcount = 0
            sprite.movepos = [0,0]
            sprite.state = "wait2"
            
    if sprite.state == "wait2":
        if sprite.waitcount < 40:
            sprite.waitcount += 1
        else:
            random.seed()
            sprite.waitcount = 0
            sprite.movepos[0] = random.randint(-1,1)*3
            sprite.movepos[1] = random.randint(-1,1)*3
            sprite.state = "move"
            
    if sprite.state == "move":
        if sprite.movecount < 60:
            sprite.movecount += 1
        else:
            sprite.movecount = 0
            sprite.movepos = [0,0]
            sprite.state = "wait1"
            
    if sprite.state == "wait1":
        if sprite.waitcount < 40:
            sprite.waitcount += 1
        else:
            myProjectile = model.Projectile('slimeball.png', 2)
            character.currentroom.projectiles.add(myProjectile)
            myProjectile.rect.center = sprite.rect.center
            vec = utils.convert_to_unit_vector(sprite.rect.x, character.rect.x, sprite.rect.y, character.rect.y)
            myProjectile.movepos = [int(vec[0] * 12), int(vec[1] * 12)]
            sprite.state = 'wait2'
            sprite.waitcount = 0
예제 #3
0
def compute_obstacle_dodge(myAgent):
    compute_vel = (0, 0)
    neighbors_cnt = 0

    for obs in shared.obstacle_array:
        if obs.distance_from(myAgent) < OBSTACLE_DOGDGE_RADIUS:
            temp_vel = v_sub(myAgent.pos, obs.pos)
            temp_vel = convert_to_unit_vector(temp_vel)
            compute_vel = v_add(compute_vel,
                                v_div(temp_vel, myAgent.distance_from(obs)))
            neighbors_cnt += 1

    if neighbors_cnt == 0:
        return compute_vel

    return v_div(compute_vel, neighbors_cnt)
예제 #4
0
def compute_seperation(myAgent, t):
    compute_vel = (0, 0)
    neighbors_cnt = 0

    for i in range(len(shared.agent_array)):
        agent = shared.agent_array[i]
        if agent != myAgent and myAgent.distance_from(
                agent) < SEPERATION_RADIUS and t == i % 2:
            temp_vel = v_sub(myAgent.pos, agent.pos)
            temp_vel = convert_to_unit_vector(temp_vel)
            compute_vel = v_add(compute_vel,
                                v_div(temp_vel, myAgent.distance_from(agent)))
            neighbors_cnt += 1

    if neighbors_cnt == 0:
        return compute_vel

    return v_div(compute_vel, neighbors_cnt)
예제 #5
0
def blue_mnm(sprite, obstacles, moveables, character):
    if sprite.state == "hit":
        if sprite.hitcount < 15:
            sprite.hitcount += 1
        else:
            sprite.hitcount = 0
            sprite.pushcount = 0
            sprite.waitcount = 0
            sprite.movecount = 0
            sprite.state = "wait"
            for current_collisions in pygame.sprite.spritecollide(
                    sprite, moveables, 0):
                sprite.cannot_collide.add(current_collisions)
        return

    if sprite.state != "hit" and sprite.state != "pushback" and sprite.state != "windup" and sprite.state != "jump":
        if utils.distance(sprite.rect.center, character.rect.center) <= 100:
            sprite.target = character.rect.center
            sprite.waitcount = 0
            sprite.movecount = 0
            sprite.movepos = [0, 0]
            sprite.state = "windup"

    if sprite.state == "windup":
        if sprite.waitcount < 20:
            sprite.waitcount += 1
        else:
            sprite.waitcount = 0
            vec = utils.convert_to_unit_vector(sprite.rect.x, character.rect.x,
                                               sprite.rect.y, character.rect.y)
            sprite.movepos = [vec[0] * 10, vec[1] * 10]
            sprite.state = "jump"

    if sprite.state == "jump":
        if ((sprite.movepos[0] >= 0 and sprite.movepos[1] >= 0
             and sprite.rect.x >= sprite.target[0]
             and sprite.rect.y >= sprite.target[1])
                or (sprite.movepos[0] >= 0 and sprite.movepos[1] <= 0
                    and sprite.rect.x >= sprite.target[0]
                    and sprite.rect.y <= sprite.target[1])
                or (sprite.movepos[0] <= 0 and sprite.movepos[1] <= 0
                    and sprite.rect.x <= sprite.target[0]
                    and sprite.rect.y >= sprite.target[1])
                or (sprite.movepos[0] <= 0 and sprite.movepos[1] <= 0
                    and sprite.rect.x <= sprite.target[0]
                    and sprite.rect.y <= sprite.target[1])
                or pygame.sprite.spritecollide(sprite, obstacles, 0) != []):
            sprite.movepos = [0, 0]
            sprite.state = "wait"

    if sprite.state == "pushback":
        if sprite.pushcount < 2:
            sprite.pushcount += 1
        else:
            sprite.pushcount = 0
            sprite.movepos = [0, 0]
            sprite.state = "wait"

    if sprite.state == "wait":
        if sprite.waitcount < 40:
            sprite.waitcount += 1
        else:
            random.seed()
            sprite.waitcount = 0
            sprite.movepos[0] = random.randint(-1, 1) * 3
            sprite.movepos[1] = random.randint(-1, 1) * 3
            sprite.state = "move"

    if sprite.state == "move":
        if sprite.movecount < 60:
            sprite.movecount += 1
        else:
            sprite.movecount = 0
            sprite.movepos = [0, 0]
            sprite.state = "wait"
예제 #6
0
def blue_mnm(sprite, obstacles, moveables, character):
    if sprite.state == "hit":
        if sprite.hitcount < 15:
            sprite.hitcount += 1
        else:
            sprite.hitcount = 0
            sprite.pushcount = 0
            sprite.waitcount = 0
            sprite.movecount = 0
            sprite.state = "wait"
            for current_collisions in pygame.sprite.spritecollide(sprite, moveables,0):
                sprite.cannot_collide.add(current_collisions)
        return
    
    if sprite.state != "hit" and sprite.state != "pushback" and sprite.state != "windup" and sprite.state != "jump":
        if utils.distance(sprite.rect.center, character.rect.center) <= 100:
            sprite.target = character.rect.center
            sprite.waitcount = 0
            sprite.movecount = 0
            sprite.movepos = [0,0]
            sprite.state = "windup"
    
    if sprite.state == "windup":
        if sprite.waitcount < 20:
            sprite.waitcount += 1
        else:
            sprite.waitcount = 0
            vec = utils.convert_to_unit_vector(sprite.rect.x, character.rect.x, sprite.rect.y, character.rect.y)
            sprite.movepos = [vec[0] * 10, vec[1] * 10]
            sprite.state = "jump"
    
    if sprite.state == "jump":
        if ((sprite.movepos[0] >= 0 and sprite.movepos[1] >= 0 and sprite.rect.x >= sprite.target[0] and sprite.rect.y >= sprite.target[1]) or
            (sprite.movepos[0] >= 0 and sprite.movepos[1] <= 0 and sprite.rect.x >= sprite.target[0] and sprite.rect.y <= sprite.target[1]) or
            (sprite.movepos[0] <= 0 and sprite.movepos[1] <= 0 and sprite.rect.x <= sprite.target[0] and sprite.rect.y >= sprite.target[1]) or
            (sprite.movepos[0] <= 0 and sprite.movepos[1] <= 0 and sprite.rect.x <= sprite.target[0] and sprite.rect.y <= sprite.target[1]) or
            pygame.sprite.spritecollide(sprite, obstacles, 0) != []):
            sprite.movepos = [0,0]
            sprite.state = "wait"
    
    if sprite.state == "pushback":
        if sprite.pushcount < 2:
            sprite.pushcount += 1
        else:
            sprite.pushcount = 0
            sprite.movepos = [0,0]
            sprite.state = "wait"
            
    if sprite.state == "wait":
        if sprite.waitcount < 40:
            sprite.waitcount += 1
        else:
            random.seed()
            sprite.waitcount = 0
            sprite.movepos[0] = random.randint(-1,1)*3
            sprite.movepos[1] = random.randint(-1,1)*3
            sprite.state = "move"
            
    if sprite.state == "move":
        if sprite.movecount < 60:
            sprite.movecount += 1
        else:
            sprite.movecount = 0
            sprite.movepos = [0,0]
            sprite.state = "wait"