In the following code i was attempting to have the plane move as well as rotate accordingly to the
arrow keys. For the cloud sprites i wanted them to follow the user/plane sprite until collision. plz help
arrow keys. For the cloud sprites i wanted them to follow the user/plane sprite until collision. plz help
Code:
import pygame, random
pygame.mixer.init()
pygame.init()
screen = pygame.display.set_mode((640, 480))
class Squeaker(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load("balloon.gif")
self.image.convert()
self.rect = self.image.get_rect()
self.rect.centerx = random.randint(0, screen.get_width())
self.rect.centery = 0
self.dx = 0
self.dy = random.randint(1, 10)
def reset(self):
self.rect.centery=0
self.rect.centerx=random.randint(0, 640)
self.dx = 0
self.dy = random.randint(1, 10)
def update(self):
self.rect.centery += self.dy
self.rect.centerx += self.dx
if self.rect.top > screen.get_height():
self.reset()
class Plane(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load("plane2pi.gif")
self.image = self.image.convert()
self.rect = self.image.get_rect()
self.rect.centerx = 100
self.rect.centery = 240
self.dx=0
self.dy=0
self.dying=False
if not pygame.mixer:
print "problem with sound"
else:
pygame.mixer.init()
self.pop = pygame.mixer.Sound("Pop.ogg")
self.crash = pygame.mixer.Sound("engineOff.ogg")
self.Engine = pygame.mixer.Sound("engine.ogg")
self.Engine.play(-1)
def update(self):
if not self.dying:
self.rect.centerx+=self.dx
self.rect.centery+=self.dy
def changeUp(self,halt):
if not self.dying:
if halt:
self.dy=0
else:
self.dy=-3
def changeDown(self,halt):
if not self.dying:
if halt:
self.dy=0
else:
self.dy=3
def changeRight(self,halt):
if not self.dying:
if halt:
self.dx=0
else:
self.dx=3
def changeLeft(self,halt):
if not self.dying:
if halt:
self.dx=0
else:
self.dx=-3
#if score==500:
#Cloud().append (clou
class Cloud(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load("puff.gif")
self.image = self.image.convert()
self.rect = self.image.get_rect()
self.reset()
def update(self):
self.rect.centerx += self.dx
self.rect.centery += self.dy
if self.rect.top > screen.get_height():
self.reset()
def reset(self):
self.rect.bottom = 0
self.rect.centerx = random.randrange(0, screen.get_width())
self.dy = random.randrange(5, 10)
self.dx = random.randrange(-2, 2)
class Sky(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load("sky4.jpg")
self.rect = self.image.get_rect()
self.dy = 5
self.reset()
def update(self):
self.rect.bottom += self.dy
if self.rect.bottom >= 1440:
self.reset()
def reset(self):
self.rect.top = -960
class Scoreboard(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.lives = 5
self.score = 0
self.font = pygame.font.SysFont("None", 50)
def update(self):
self.text = "planes: %d, score: %d" % (self.lives, self.score)
self.image = self.font.render(self.text, 1, (255, 0, 0))
self.rect = self.image.get_rect()
def game():
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Project 7")
background = pygame.Surface(screen.get_size())
background.fill((0, 0, 0))
screen.blit(background, (0, 0))
plane = Plane()
cloud1 = Cloud()
cloud2 = Cloud()
cloud3 = Cloud()
cloud4 = Cloud()
squeaker = Squeaker()
squeaker1 = Squeaker()
squeaker2 = Squeaker()
squeaker3 = Squeaker()
squeaker4 = Squeaker()
squeaker5 = Squeaker()
sky = Sky()
scoreboard = Scoreboard()
friendSprites = pygame.sprite.Group(sky, plane)
squeakerSprites = pygame.sprite.Group(squeaker, squeaker1, squeaker2, squeaker3, squeaker4, squeaker5)
cloudSprites = pygame.sprite.Group(cloud1, cloud2, cloud3, cloud4)
scoreSprite = pygame.sprite.Group(scoreboard)
clock = pygame.time.Clock()
keepGoing = True
while keepGoing:
clock.tick(30)
pygame.mouse.set_visible(False)
for event in pygame.event.get():
if event.type == pygame.QUIT:
keepGoing = False
elif event.type == pygame.KEYDOWN:
if event.key==pygame.K_UP:
plane.changeUp(False)
elif event.key==pygame.K_DOWN:
plane.changeDown(False)
elif event.key==pygame.K_LEFT:
plane.changeLeft(False)
elif event.key==pygame.K_RIGHT:
plane.changeRight(False)
elif event.type==pygame.KEYUP:
if event.key==pygame.K_UP:
plane.changeUp(True)
elif event.key==pygame.K_DOWN:
plane.changeDown(True)
elif event.key==pygame.K_LEFT:
plane.changeLeft(True)
elif event.key==pygame.K_RIGHT:
plane.changeRight(True)
pointGain=pygame.sprite.spritecollide(plane, squeakerSprites, False)
for squeaker in pointGain:
plane.pop.play()
squeaker.reset()
scoreboard.score += 100
hitClouds = pygame.sprite.spritecollide(plane, cloudSprites, False)
if hitClouds:
plane.crash.play()
scoreboard.lives -= 1
if scoreboard.lives <= 0:
keepGoing = False
for theCloud in hitClouds:
theCloud.reset()
friendSprites.update()
squeakerSprites.update()
cloudSprites.update()
scoreSprite.update()
friendSprites.draw(screen)
squeakerSprites.draw(screen)
cloudSprites.draw(screen)
scoreSprite.draw(screen)
pygame.display.flip()
plane.Engine.stop()
#return mouse cursor
pygame.mouse.set_visible(True)
return scoreboard.score
def instructions(score):
pygame.display.set_caption("Bermuda Triangle")
plane = Plane()
sky = Sky()
allSprites = pygame.sprite.Group(sky, plane)
insFont = pygame.font.SysFont(None, 40)
insLabels = []
instructions = (
"Bermuda Triangle. Last score: %d" % score ,
"Instructions: You are a pilot,",
"flying through the bermuda triangle.",
"",
"Fly through the balloons to gain points,",
"but be careful not to fly too close",
"to the clouds. Your plane will fall ",
"many times. Steer with the mouse.",
"",
"good luck!",
"",
)
for line in instructions:
tempLabel = insFont.render(line, 1, (255, 255, 0))
insLabels.append(tempLabel)
keepGoing = True
clock = pygame.time.Clock()
pygame.mouse.set_visible(False)
while keepGoing:
clock.tick(30)
for event in pygame.event.get():
if event.type == pygame.QUIT:
keepGoing = False
donePlaying = True
if event.type == pygame.MOUSEBUTTONDOWN:
keepGoing = False
donePlaying = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
keepGoing = False
donePlaying = True
for i in range(len(insLabels)):
screen.blit(insLabels[i], (50, 30*i))
pygame.display.flip()
plane.Engine.stop()
pygame.mouse.set_visible(True)
return donePlaying
def main():
donePlaying = False
score = 0
while not donePlaying:
donePlaying = instructions(score)
if not donePlaying:
score = game()
if __name__ == "__main__":
main()