# Author: Elena Nelson # All of the images that were used in this project # were taken from the Touhou Wiki. # If you remix this project, then please do not # remove the lines above. # Thank you and have fun! stage.disable_all_walls() north_wall = codesters.Rectangle(0, 250, 600, 10, "white") south_wall = codesters.Rectangle(0, -250, 600, 2, "white") background = "https://en.touhouwiki.net/images/1/1d/Th06St6.jpg" stage.set_background(background) stage.set_background_scale(1.5) stage.set_background_x(-300) start_text = codesters.Text("Use the left and right arrows to move, and press z to shoot", 0, 0, "white") yukari_sprite = "http://en.touhouwiki.net/images/7/7d/Th08YukariBackSprite.png" yukari = codesters.Sprite(yukari_sprite, 0, -220) fairy = "https://en.touhouwiki.net/images/6/6e/Th12GhostFairy.png" lives = 4 lives_display = codesters.Display(lives, 200, -200) locations = {} def do_nothing(): pass def left_key(): yukari.move_left(20) stage.event_key("left", left_key) def right_key(): yukari.move_right(20) stage.event_key("right", right_key) enemies = [] def collision3(sprite, hit_sprite): global lives if hit_sprite == yukari: stage.remove_sprite(sprite) if sprite in enemies: enemies.remove(sprite) yukari.go_to(0, -220) lives -= 1 lives_display.update(lives) if lives <= 0: codesters.Text("YOU LOST", 0, 0, "red") stage.event_interval(do_nothing, 10) def spawn_enemies(rows, cols): x = -200 y = 220 for count in range(rows): x = -200 for count in range(cols): enemy = codesters.Sprite(fairy, x, y) enemy.event_collision(collision3) enemies.append(enemy) locations[enemy] = [x, y] x += 66 y -= 50 spawn_enemies(4, 7) stage.remove_sprite(start_text) def collision(sprite, hit_sprite): if hit_sprite == north_wall: stage.remove_sprite(sprite) if hit_sprite == south_wall: stage.remove_sprite(sprite) if hit_sprite in enemies: stage.remove_sprite(hit_sprite) stage.remove_sprite(sprite) if hit_sprite in enemies: enemies.remove(hit_sprite) def collision2(sprite, hit_sprite): global lives if hit_sprite == north_wall: stage.remove_sprite(sprite) if hit_sprite == south_wall: stage.remove_sprite(sprite) if hit_sprite == yukari: stage.remove_sprite(sprite) yukari.go_to(0, -220) lives -= 1 lives_display.update(lives) if lives <= 0: codesters.Text("YOU LOST", 0, 0, "red") stage.event_interval(do_nothing, 10) def shoot(shooter, speed, collision, color): x = shooter.get_x() y = shooter.get_y() sprite = codesters.Circle(x, y, 10, color) sprite.set_y_speed(speed) sprite.event_collision(collision) def interval(): if len(enemies) > 0: enemy = random.choice(enemies) #shoot(enemy, -5, collision2, "lavender") enemy.glide_to(random.randint(-200, 200), -300) enemy.go_to(0, 400) loc = locations[enemy] enemy.glide_to(loc[0], loc[1]) else: codesters.Text("YOU WON", 0, 0, "green") stage.event_interval(interval, 1) def z_key(): shoot(yukari, 10, collision, "purple") stage.event_key("z", z_key)
Support