-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
03-add-player-movement.py
136 lines (108 loc) · 4.19 KB
/
03-add-player-movement.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
# this program adds the player, the player can be moved with keys right ,left, up and down.
# in addition to that it can be moved with the keys h for left, j for down, k for up and l for right.
from pygame.constants import K_h, K_k
import pywrap
import random
from pygame.locals import (
K_UP,
K_DOWN,
K_LEFT,
K_RIGHT,
K_ESCAPE,
K_h,
K_j,
K_k,
K_l,
)
# create an instance of the game
game = pywrap.PyGame()
# sprite that draws a cloud, all clouds move with the same speed.
class Player(pywrap.ImageSprite):
def __init__(self, width, height):
super(Player, self).__init__(
"jet.png", # the picture of the sprite
(255, 255, 255), # background color of the sprite
(width / 3, height / 2), # initial position of sprite
2,
) # drawn above the clouds and the bullets
self.screen_width = width
self.screen_height = height
def handle_key_up(self, game):
self.rect.move_ip(0, -5)
if self.rect.top <= 0:
self.rect.top = 0
def handle_key_down(self, game):
self.rect.move_ip(0, 5)
if self.rect.bottom >= self.screen_height:
self.rect.bottom = self.screen_height
def handle_key_left(self, game):
self.rect.move_ip(-5, 0)
if self.rect.left <= 0:
self.rect.left = 0
def handle_key_right(self, game):
self.rect.move_ip(5, 0)
if self.rect.right > self.screen_width:
self.rect.right = self.screen_width
player = Player(game.screen_width(), game.screen_height())
game.add_key_pressed_event(K_UP, player.handle_key_up)
game.add_key_pressed_event(K_k, player.handle_key_up)
game.add_key_pressed_event(K_DOWN, player.handle_key_down)
game.add_key_pressed_event(K_j, player.handle_key_down)
game.add_key_pressed_event(K_LEFT, player.handle_key_left)
game.add_key_pressed_event(K_h, player.handle_key_left)
game.add_key_pressed_event(K_RIGHT, player.handle_key_right)
game.add_key_pressed_event(K_l, player.handle_key_right)
game.add_sprite(player)
# sprite that dkraws a cloud, all clouds move with the same speed.
class Cloud(pywrap.ImageSprite):
def __init__(self, width, height):
super(Cloud, self).__init__(
"cloud.png", # the picture of the sprite
(0, 0, 0), # background color of the sprite
(
random.randint(width + 20, width + 100),
random.randint(0, height),
), # initial position of sprite
1,
) # layer
# Move the cloud based on a constant speed
# Remove it when it passes the left edge of the screen
def update(self):
self.rect.move_ip(-5, 0)
if self.rect.right < 0:
self.kill()
# is being called when the time event fires (see call to add_timer_event)
def addCloud(game):
# create a new cloud sprite
cloud = Cloud(game.screen_width(), game.screen_height())
# add the cloud sprite to the game.
game.add_sprite(cloud)
# add a timer to the game. once per second is is calling the addCloud function
game.add_timer_event(1000, addCloud)
# sprite that draws a missile, missiles have different velocity
class Missile(pywrap.ImageSprite):
def __init__(self, width, height):
super(Missile, self).__init__(
"missile.png", # the picture of the sprite
(255, 255, 255), # background color of the sprite
(
random.randint(width + 20, width + 100),
random.randint(0, height),
), # initial position of sprite
1,
) # drawn above the clouds
self.speed = random.randint(5, 20)
# Move the cloud based on a constant speed
# Remove it when it passes the left edge of the screen
def update(self):
self.rect.move_ip(-self.speed, 0)
if self.rect.right < 0:
self.kill()
# is being called when the time event fires (see call to add_timer_event)
def add_missile(game):
missile = Missile(game.screen_width(), game.screen_height())
game.add_sprite(missile)
# add timer, once every 250 millisecond the add_missile function will be called.
game.add_timer_event(250, add_missile)
# run the game loop
game.run()