-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdanmadoka.py
212 lines (187 loc) · 6.41 KB
/
danmadoka.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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
import pygame, sys
from pygame.locals import *
class player(pygame.sprite.Sprite):
def __init__(self, pos):
pygame.sprite.Sprite.__init__(self, self.groups)
self.image = pygame.image.load('./homura.png')
self.image = self.image.convert()
self.image = scaleImage(self.image)
self.rect = self.image.get_rect()
self.rect.center = pos
def update(self):
if keys[keyUp]:
self.rect.top -= playerYspeed[keys[keyFocus]]
if self.rect.top < marginleft:
self.rect.top = marginleft
if keys[keyDown]:
self.rect.bottom += playerYspeed[keys[keyFocus]]
if self.rect.bottom > resY-marginleft:
self.rect.bottom = resY-marginleft
if keys[keyLeft]:
self.rect.left -= playerXspeed[keys[keyFocus]]
if self.rect.left < margintop:
self.rect.left = margintop
if keys[keyRight]:
self.rect.right += playerXspeed[keys[keyFocus]]
if self.rect.right > margintop+fieldwidth:
self.rect.right = margintop+fieldwidth
if keys[keyShoot]:
currentTime = pygame.time.get_ticks()
if currentTime > lastBullet+msBetweenShots:
playerBullet(self.rect.center, bulletDamage[keys[keyFocus]])
class playerBullet(pygame.sprite.Sprite):
def __init__(self, pos, damage):
pygame.sprite.Sprite.__init__(self, self.groups)
self.image = pygame.image.load('./hom-bulleta.png')
self.image = scaleImage(self.image)
self.image = self.image.convert()
self.rect = self.image.get_rect()
self.rect.center = pos
self.damage = damage
global lastBullet
lastBullet = pygame.time.get_ticks()
def update(self):
self.rect.top -= playerBulletSpeed
if self.rect.bottom < marginleft:
self.kill()
def hit(self):
self.kill()
return (self.damage)
class Enemy(pygame.sprite.Sprite):
def __init__(self, X_coords, Y_coords, speed, health, sprite, msUntilSpawn, LevelStart):
pygame.sprite.Sprite.__init__(self, self.groups)
if len(X_coords) != len(Y_coords):
print ("Enemy was given a different amount of X and Y co-ordinates")
self.kill()
elif len(X_coords) <= 1:
print ("Enemy must be given at least two pairs of co-ordinates.")
self.kill()
else:
for (i, X) in enumerate(X_coords):
X = resX/640*X
X_coords[i] = X
for (i, Y) in enumerate(Y_coords):
Y = resY/480*Y
Y_coords[i] = Y
self.X_coords = X_coords
self.Y_coords = Y_coords
self.speed = speed/60
self.health = health
self.sprite = sprite
self.msUntilSpawn = msUntilSpawn
self.LevelStart = LevelStart
def update(self):
currentTime = pygame.time.get_ticks()
if currentTime >= self.LevelStart+self.msUntilSpawn:
activeEnemies(self.X_coords, self.Y_coords, self.speed, self.health, self.sprite)
self.kill()
class activeEnemies(pygame.sprite.Sprite):
def __init__(self, X_coords, Y_coords, speed, health, sprite):
pygame.sprite.Sprite.__init__(self, self.groups)
self.image = pygame.image.load(sprite)
self.image = self.image.convert()
self.image = scaleImage(self.image)
self.rect = self.image.get_rect()
# improve this! ###########
self.PointA_x = X_coords[0]
self.PointA_y = Y_coords[0]
self.PointB_x = X_coords[1]
self.PointB_y = Y_coords[1]
###########################
self.speed = speed
self.health = health
self.t = 0
def update(self):
if pygame.sprite.spritecollideany(self, playerbullets):
damage = playerBullet.hit(pygame.sprite.spritecollideany(self, playerbullets))
self.health -= damage
if self.health <= 0:
self.kill()
self.rect.right = self.PointA_x+self.t*(self.PointB_x-self.PointA_x)
self.rect.bottom = self.PointA_y+self.t*(self.PointB_y-self.PointA_y)
self.t += self.speed
if self.t >= 1:
self.kill()
def scaleImage(image):
width = image.get_width()
height = image.get_height()
scaledimage = pygame.transform.scale(image, (resX/640*width, resY/480*height))
return scaledimage
def level1():
levelstart = pygame.time.get_ticks()
# ([PointA_x, PointB_x, etc.], [PointA_y, PointB_y, etc.] speed, health, sprite, msUntilSpawn, LevelStart)
Enemy([0, 300], [300, 0], 0.4, 30, "./enemy1.png", 3000, levelstart)
Enemy([0, 500], [200, 200], 0.1, 40, "./enemy1.png", 500, levelstart)
Enemy([500, 0], [300, 300], 0.1, 40, "./enemy1.png", 500, levelstart)
pygame.init()
# Player config. #
resX = 640
resY = 480
keyUp = K_UP
keyDown = K_DOWN
keyLeft = K_LEFT
keyRight = K_RIGHT
keyShoot = K_z
keyBomb = K_x # this will do something one day I promise
keyFocus = K_LSHIFT
# Size #
margintop = resX/20
marginleft = resY/30
fieldwidth = 3*resX/5 # 384 @ 640
fieldheight = resY-2*marginleft # 448 @ 480
# Speed #
regXspeed = resX/160 # 4 @ 640
regYspeed = resY/120 # 4 @ 480
focusXspeed = resX/320 # 2 @ 640
focusYspeed = resY/240 # 2 @ 480
playerBulletSpeed = resY/60 # 8 @ 480
# Misc. #
msBetweenShots = 150
playerPosition = (fieldwidth/2+margintop, 9*fieldheight/10+marginleft) # where player starts
bulletDamage = [10, 20] # [unfocused damage, focused damage]
playerXspeed = [regXspeed, focusXspeed]
playerYspeed = [regYspeed, focusYspeed]
# Stuff #
clock = pygame.time.Clock()
pygame.display.set_caption('danmadoka')
window = pygame.display.set_mode((resX, resY), 0, 32)
keys = pygame.key.get_pressed()
lastBullet = 0
# Groups #
playergroup = pygame.sprite.Group()
player.groups = playergroup
playerbullets = pygame.sprite.Group()
playerBullet.groups = playerbullets
inactiveEnemies = pygame.sprite.Group()
Enemy.groups = inactiveEnemies
enemies = pygame.sprite.Group()
activeEnemies.groups = enemies
field = pygame.Rect(margintop, marginleft, fieldwidth, fieldheight)
marginleftRect = pygame.Rect(0, 0, margintop, resY)
marginrightRect = pygame.Rect(fieldwidth+margintop, 0, resX-(fieldwidth+margintop), resY)
margintopRect = pygame.Rect(margintop, 0, fieldwidth, marginleft)
marginbottomRect = pygame.Rect(margintop, marginleft+fieldheight, fieldwidth, marginleft)
player1 = player(playerPosition)
level1()
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
if event.type == KEYDOWN or event.type == KEYUP:
keys = pygame.key.get_pressed()
pygame.draw.rect(window, (255, 255, 255), field)
playergroup.update()
playerbullets.update()
inactiveEnemies.update()
enemies.update()
playerbullets.draw(window)
enemies.draw(window)
playergroup.draw(window)
# try to optimize. pygame.transform.chop? #
pygame.draw.rect(window, (0, 0, 0), marginleftRect)
pygame.draw.rect(window, (0, 0, 0), marginrightRect)
pygame.draw.rect(window, (0, 0, 0), margintopRect)
pygame.draw.rect(window, (0, 0, 0), marginbottomRect)
pygame.display.update()
clock.tick(60)