让敌人随意射击#
让敌人随机射击比定期射击敌人更容易,如所示 让敌人定期射击 。这是因为我们不需要跟踪距离上次开火有多长时间。
有关此示例的特定内容,请参阅突出显示的行。

sprite_bullets_random.py#
1"""
2Show how to have enemies shoot bullets at random intervals.
3
4If Python and Arcade are installed, this example can be run from the command line with:
5python -m arcade.examples.sprite_bullets_random
6"""
7import arcade
8import random
9
10SCREEN_WIDTH = 800
11SCREEN_HEIGHT = 600
12SCREEN_TITLE = "Sprites and Random Bullets Example"
13
14
15class MyGame(arcade.Window):
16 """ Main application class """
17
18 def __init__(self, width, height, title):
19 super().__init__(width, height, title)
20
21 self.background_color = arcade.color.BLACK
22
23 self.frame_count = 0
24 self.player_list = None
25 self.enemy_list = None
26 self.bullet_list = None
27
28 self.player = None
29
30 def setup(self):
31 """ Setup the variables for the game. """
32 self.player_list = arcade.SpriteList()
33 self.enemy_list = arcade.SpriteList()
34 self.bullet_list = arcade.SpriteList()
35
36 # Add player ship
37 self.player = arcade.Sprite(":resources:images/space_shooter/playerShip1_orange.png", scale=0.5)
38 self.player_list.append(self.player)
39
40 # Add top-left enemy ship
41 enemy = arcade.Sprite(":resources:images/space_shooter/playerShip1_green.png", scale=0.5)
42 enemy.center_x = 120
43 enemy.center_y = SCREEN_HEIGHT - enemy.height
44 enemy.angle = 180
45 self.enemy_list.append(enemy)
46
47 # Add top-right enemy ship
48 enemy = arcade.Sprite(":resources:images/space_shooter/playerShip1_green.png", scale=0.5)
49 enemy.center_x = SCREEN_WIDTH - 120
50 enemy.center_y = SCREEN_HEIGHT - enemy.height
51 enemy.angle = 180
52 self.enemy_list.append(enemy)
53
54 def on_draw(self):
55 """Render the screen. """
56
57 self.clear()
58
59 self.enemy_list.draw()
60 self.bullet_list.draw()
61 self.player_list.draw()
62
63 def on_update(self, delta_time):
64 """All the logic to move, and the game logic goes here. """
65
66 # Loop through each enemy that we have
67 for enemy in self.enemy_list:
68
69 # Have a random 1 in 200 change of shooting each 1/60th of a second
70 odds = 200
71
72 # Adjust odds based on delta-time
73 adj_odds = int(odds * (1 / 60) / delta_time)
74
75 if random.randrange(adj_odds) == 0:
76 bullet = arcade.Sprite(":resources:images/space_shooter/laserBlue01.png")
77 bullet.center_x = enemy.center_x
78 bullet.angle = 90
79 bullet.top = enemy.bottom
80 bullet.change_y = -2
81 self.bullet_list.append(bullet)
82
83 # Get rid of the bullet when it flies off-screen
84 for bullet in self.bullet_list:
85 if bullet.top < 0:
86 bullet.remove_from_sprite_lists()
87
88 self.bullet_list.update()
89
90 def on_mouse_motion(self, x, y, delta_x, delta_y):
91 """ Called whenever the mouse moves. """
92 self.player.center_x = x
93 self.player.center_y = 20
94
95
96def main():
97 """ Main function """
98 window = MyGame(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_TITLE)
99 window.setup()
100 arcade.run()
101
102
103if __name__ == "__main__":
104 main()