School Assignment? Project Due Tomorrow? Chat LIVE With A Programming Expert!

Welcome to Dream.In.Code
Become an Expert!

Join 307,095 Programmers for FREE! Get instant access to thousands of experts, tutorials, code snippets, and more! There are 2,003 people online right now. Registration is fast and FREE... Join Now!




Pygame - 2d space shooter

 

Pygame - 2d space shooter, need help shooting bullets

Animech

13 Oct, 2009 - 05:00 PM
Post #1

New D.I.C Head
*

Joined: 16 Sep, 2008
Posts: 12

I'm making a side scroller shooting game using pygame where the player shoots bullets by pressing the space bar and enemies shoot bullets randomly, but I can seem to get it right. here's the part involving the ship, the enemy and their bullets:

CODE

import pygame, random
pygame.init()

screen = pygame.display.set_mode((640, 480))

class Ship(pygame.sprite.Sprite):
    def __init__(self, bullet):
        self.bullet = bullet
        pygame.sprite.Sprite.__init__(self)
        self.screen = screen
        self.image = pygame.image.load("ship.jpg")
        self.image = self.image.convert()
        self.rect = self.image.get_rect()
        self.rect.center = (50, 240)
        self.dx = 10
        self.dy = 10

        if not pygame.mixer:
            print "problem with sound"
        else:
            pygame.mixer.init()
            self.sndCrash = pygame.mixer.Sound("shipcrash2.ogg")
            self.sndFire = pygame.mixer.Sound("gunfire2.ogg")
            self.sndExplosion = pygame.mixer.Sound("explosion2.ogg")

    def update(self):
        self.checkKeys()
        self.checkBounds()

    def checkKeys(self):
        keys = pygame.key.get_pressed()
        if keys[pygame.K_UP]:
            self.rect.centery -= self.dy
        if keys[pygame.K_DOWN]:
            self.rect.centery += self.dy
        if keys[pygame.K_SPACE]:
            self.bullet.x = self.rect.centerx
            self.bullet.y = self.rect.centery
            self.bullet.speed = self.dx



          
      
    def checkBounds(self):
        screen = self.screen
        if self.rect.centery > 420:
            self.rect.centery = 420
        if self.rect.centery < 50:
            self.rect.centery = 50

class Bullet(pygame.sprite.Sprite):
    def __init__(self, screen):
        pygame.sprite.Sprite.__init__(self)
        self.screen = screen
      
        self.image = pygame.image.load("bullet.jpg")
        self.image = self.image.convert()
        self.rect = self.image.get_rect()
        self.rect.center = (-100, -100)
        self.speed = 0
        self.reset()

        if not pygame.mixer:
            print "problem with sound"
        else:
            pygame.mixer.init()
            self.sndImpact = pygame.mixer.Sound("impact2.ogg")


    def update(self):
        self.position()
        self.checkBounds()
        self.rect.center = (self.x, self.y)

    def position(self):
        self.x += self.speed

    def checkBounds(self):
        screen = self.screen
        if self.rect.left > screen.get_width():
            self.reset()
  

    def reset(self):
        self.x = -100
        self.y = -100
        self.speed = 0

class Ufo(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load("ufo.jpg")
        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.right <= 0:
            self.reset()
  
    def reset(self):
        self.rect.left = screen.get_width()
        self.rect.centery = random.randrange(0, screen.get_height())
        self.dy = random.randrange(-2, 2)
        self.dx = random.randrange(4, 6)

class UfoBullet(pygame.sprite.Sprite):
    def __init__(self, screen):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load("enemybullet.jpg")
        self.image = self.image.convert()
        self.rect = self.image.get_rect()
        self.reset()
        self.rect.centerx = 490
        self.dx = 10

        def update(self):
            self.rect.centerx -= self.dx
            if self.rect.right <= 0:
                self.reset()

        def reset(self):
            self.x = -50
            self.dx = 10



I know I need to add or change a few things in the bullet classes, but I just can't think of what it is. if someone could help me with this part, I should be able to get the rest of the program on my own

User is offlineProfile CardPM
+Quote Post

Fast ReplyReply to this topicStart new topic

Time is now: 11/21/09 11:41AM

Live Help!

Be Social

Dream.In.Code RSS Feed Dream.In.Code LinkedIn Group Follow Us On Twitter Fan Us On Facebook

Tutorials

Programming

Web Development

Reference Sheets

Code Snippets

DIC Chatroom

Bye Bye Ads

Monthly Drawing

Thumb Drive

Top Contributors

Top 10 Kudos This Month