python - Space shooter game have slight errors -


i've been having trouble levels game , wondering why enemies in game not falling top of screen, , trying make levels class levels not working.can please help!

my code:

import pygame import random  # define colors black = (0, 0, 0) white = (255, 255, 255) red = (255, 0, 0) blue = (0, 0, 255) lav = (209, 95, 250)   #enemy  class block(pygame.sprite.sprite):     """ class represents block. """     def __init__(self, color):         # call parent class (sprite) constructor         super().__init__()          self.image = pygame.image.load("enemy2.png")          self.rect = self.image.get_rect()     def reset_pos(self):           self.rect.y = random.randrange(-300,-20)         self.rect.x = random.randrange(0,screen_width) #player class player(pygame.sprite.sprite):     """ class represents player. """      def __init__(self):         """ set player on creation. """         # call parent class (sprite) constructor         super().__init__()         self.image = pygame.image.load("ss1.png")            self.rect = self.image.get_rect() #controls     def update(self):         """ update player's position. """         # current mouse position. returns position         # list of 2 numbers.         pos = pygame.mouse.get_pos()          # set player x position mouse x position         self.rect.x = pos[0]    class bullet(pygame.sprite.sprite):     """ class represents bullet . """     def __init__(self):         # call parent class (sprite) constructor         super().__init__()          self.image = pygame.image.load("fireball2.png")          self.rect = self.image.get_rect()      def update(self):         """ move bullet. """         self.rect.y -= 6    # --- create window  # initialize pygame pygame.init()  pygame.display.set_caption("space shooter")  # set height , width of screen screen_width = 850 screen_height = 850 screen = pygame.display.set_mode([screen_width, screen_height]) bg = pygame.image.load("bg.png") # --- sprite lists  # list of every sprite. blocks , player block well. all_sprites_list = pygame.sprite.group()  # list of each block in game block_list = pygame.sprite.group()  # list of each bullet bullet_list = pygame.sprite.group()  # --- create sprites class level():     """ generic super-class used define level.         create child class each level level-specific         info. """      def __init__(self, player):         """ constructor. pass in handle player. needed when moving             platforms collide player. """         self.platform_list = pygame.sprite.group()         self.enemy_list = pygame.sprite.group()         self.player = player          # how far world has been scrolled left/right         self.world_shift = 0      # update everythign on level     def update(self):         """ update in level."""         self.platform_list.update()         self.enemy_list.update()      def draw(self, screen):         """ draw on level. """          # draw background         screen.fill(blue)          # draw sprite lists have         self.platform_list.draw(screen)         self.enemy_list.draw(screen)      def shift_world(self, shift_x):         """ when user moves left/right , need scroll         everything: """          # keep track of shift amount         self.world_shift += shift_x          # go through sprite lists , shift         platform in self.platform_list:             platform.rect.x += shift_x          enemy in self.enemy_list:             enemy.rect.x += shift_x   # create platforms level class level_01(level):     """ definition level 1. """      def __init__(self, player):         """ create level 1. """          # call parent constructor         level.__init__(self, player)          self.level_limit = 10      in range(15):     # represents block         block = block(blue)      # set random location block         block.rect.x = random.randrange(825)         block.rect.y = random.randrange(500)      # add block list of objects         block_list.add(block)         all_sprites_list.add(block)  # create red player block class level_02(level):     """ definition level 2. """      def __init__(self, player):         """ create level 1. """          # call parent constructor         level.__init__(self, player)          self.level_limit = -3000          # array type of platform, , x, y location of platform.         in range(30):     # represents block             block = block(blue)      # set random location block¸                 block.rect.x = random.randrange(650)             block.rect.y = random.randrange(350)      # add block list of objects             block_list.add(block)             all_sprites_list.add(block)          # go through arrzay above , add platforms   player = player() all_sprites_list.add(player)  # loop until user clicks close button. done = false  # used manage how fast screen updates clock = pygame.time.clock()  font = pygame.font.font(none, 25)  frame_count = 0 frame_rate = 60 start_time = 90  score = 0 player.rect.y = 600 bg_sound = pygame.mixer.sound("countdown - timer.wav") fire_sound = pygame.mixer.sound("laser-soundbible.com-602495617.wav") bg_sound.play(-1)  # -------- main program loop ----------- while not done:     # --- event processing     event in pygame.event.get():         if event.type == pygame.quit:             done = true            elif event.type == pygame.mousebuttondown:             # fire bullet if user clicks mouse button             bullet = bullet()             # set bullet player             bullet.rect.x = player.rect.x             bullet.rect.y = player.rect.y             # add bullet lists             all_sprites_list.add(bullet)             bullet_list.add(bullet)             fire_sound.play()         # --- game logic      # call update() method on sprites     all_sprites_list.update()      # calculate mechanics each bullet     bullet in bullet_list:          # see if hit block         block_hit_list = pygame.sprite.spritecollide(bullet, block_list, true)          # each block hit, remove bullet , add score         block in block_hit_list:             bullet_list.remove(bullet)             all_sprites_list.remove(bullet)             score += 1             print(score)          # remove bullet if flies off screen         if bullet.rect.y < -50:             bullet_list.remove(bullet)             all_sprites_list.remove(bullet)        # --- draw frame     screen.blit(bg, [0, 0])      # clear screen       font = pygame.font.sysfont('calibri', 25,true, false)     text = font.render('enemies shot:'+ str(score),true, lav)     screen.blit(text,[650,500])       # draw spites     all_sprites_list.draw(screen)      total_seconds = start_time - (frame_count // frame_rate)     if total_seconds == 0:         font = pygame.font.sysfont('calibri', 25,true, false)         text = font.render('youre done',true, lav)         screen.blit(text,[650,500])       # divide 60 total minutes     minutes = total_seconds // 60      # use modulus (remainder) seconds     seconds = total_seconds % 60      # use python string formatting format in leading zeros     output_string = "time left: {0:00}:{1:02}".format(minutes, seconds)      # blit screen     text = font.render(output_string, true, lav)      screen.blit(text, [650, 525])      # code draw should go above comment     frame_count += 10      # limit frames per second     clock.tick(frame_rate)      # go ahead , update screen we've drawn.     pygame.display.flip()  pygame.quit() 

one quick thing might want take note of clearing screen after update bullets. suggest clearing screen first thing inside while loop. thing don't see anywhere trying move enemies (i wrong). function 1 inside block class might help:

def render(self):     self.rect.y +=3 

you can change how move blocks in render function, example.
after have entered in need put like:

for block in block_list:     block.render() 

this go inside while loop anywhere after you've cleared it. might need make block list work. hope helps :)


Comments

Popular posts from this blog

java - Run spring boot application error: Cannot instantiate interface org.springframework.context.ApplicationListener -

reactjs - React router and this.props.children - how to pass state to this.props.children -

Excel VBA "Microsoft Windows Common Controls 6.0 (SP6)" Location Changes -