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
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
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)
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)
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"
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"