Python Forum
Thread Rating:
  • 1 Vote(s) - 4 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[PyGame] Common Tasks
#20
Space Invaders (player and player's shots)

import pygame as pg
   
pg.init()
  
class Laser:
    def __init__(self, loc):
        self.image = pg.Surface((5,40)).convert()
        self.image.fill((255,255,0))
        self.rect = self.image.get_rect(center=loc)
        self.speed = 5
          
    def update(self):
        self.rect.y -= self.speed
      
    def render(self, surf):
        surf.blit(self.image, self.rect)
   
class Player:
    def __init__(self, screen_rect):
        self.screen_rect = screen_rect
        #self.image = pg.image.load('spaceship.png').convert()
        self.image = pg.Surface([50,50]) #to avoid loading an image
        self.image.fill((0,0,255)) #to avoid loading an image
        #self.image.set_colorkey((255,0,255)) #if loading an image, settings colorkey for it
        self.transformed_image = pg.transform.rotate(self.image, 180) #if image, rotate it
        start_buffer = 300
        self.rect = self.image.get_rect(
            center=(screen_rect.centerx, screen_rect.centery + start_buffer)
        )
        self.dx = 300
        self.lasers = []
          
    def get_event(self, event):
        if event.type == pg.KEYDOWN:
            if event.key == pg.K_SPACE:
                self.lasers.append(Laser(self.rect.center))
          
    def update(self, keys, dt):
        self.rect.clamp_ip(self.screen_rect)
        if keys[pg.K_LEFT]:
            self.rect.x -= self.dx * dt
        elif keys[pg.K_RIGHT]:
            self.rect.x += self.dx * dt
        for laser in self.lasers:
            laser.update()
           
    def draw(self, surf):
        for laser in self.lasers:
            laser.render(surf)
        surf.blit(self.transformed_image, self.rect)
   
screen = pg.display.set_mode((800,600))
screen_rect = screen.get_rect()
player = Player(screen_rect)
clock = pg.time.Clock()
done = False
while not done:
    keys = pg.key.get_pressed()
    for event in pg.event.get(): 
        if event.type == pg.QUIT:
            done = True
        player.get_event(event)
    screen.fill((0,0,0))
    delta_time = clock.tick(60)/1000.0
    player.update(keys, delta_time)
    player.draw(screen)
    pg.display.update()
Recommended Tutorials:
Reply


Messages In This Thread
Common Tasks - by metulburr - Nov-05-2017, 11:55 PM
RE: Common Tasks - by metulburr - Feb-01-2020, 07:22 PM
RE: Common Tasks - by metulburr - Feb-01-2020, 07:23 PM
RE: Common Tasks - by metulburr - Feb-01-2020, 07:23 PM
RE: Common Tasks - by metulburr - Feb-01-2020, 07:24 PM
RE: Common Tasks - by metulburr - Feb-01-2020, 07:26 PM
RE: Common Tasks - by metulburr - Feb-01-2020, 07:26 PM
RE: Common Tasks - by metulburr - Feb-01-2020, 07:26 PM
RE: Common Tasks - by metulburr - Feb-01-2020, 07:27 PM
RE: Common Tasks - by metulburr - Feb-01-2020, 07:27 PM
RE: Common Tasks - by metulburr - Feb-01-2020, 07:27 PM
RE: Common Tasks - by metulburr - Feb-01-2020, 07:28 PM
RE: Common Tasks - by metulburr - Feb-01-2020, 07:28 PM
RE: Common Tasks - by metulburr - Feb-01-2020, 07:28 PM
RE: Common Tasks - by metulburr - Feb-01-2020, 07:28 PM
RE: Common Tasks - by metulburr - Feb-01-2020, 07:28 PM
RE: Common Tasks - by metulburr - Feb-01-2020, 07:40 PM
RE: Common Tasks - by metulburr - Feb-02-2020, 06:20 PM
RE: Common Tasks - by metulburr - Feb-06-2020, 11:57 AM
RE: Common Tasks - by metulburr - Jul-06-2020, 10:46 AM

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020