def prep_lives(self): self.lives = Group() for i in range(self.stats.ships_left): live = Lives(self.screen) live.rect.x = 10 + i * live.rect.width live.rect.top = 10 self.lives.add(live) live = Lives(self.screen) self.width = live.rect.width * self.stats.ships_left
def __init__(self, i_fenetre): ''' Définition des variables du constructeur. ''' self.fenetre = i_fenetre # Stocke les paramètres de la fenêtre. self.canevas = tk.Canvas( self.fenetre, width=self.largeur_fenetre(), height=self.hauteur_fenetre( )) # Crée un canvas ( Support de tout les éléments d'affichage. ) self.canevas.place(x=0, y=0) # Place le Canvas self.raquette = Raquette(self) # Crée une instance de Raquette. self.balle = Balle(self) # Crée une instance de Balle. self.level_id = -1 # Numéro du niveau à charger. self.niveau = Level(self, self.level_id) # Crée une instance du Niveau . self.lives = Lives(self, 3, self.largeur_fenetre() / 16, (self.hauteur_fenetre() * 15) / 16) # Crée une instance des Vies. self.touche_possible = [ "q", "d", "Q", "D" ] # Liste des touches qui seront utilisées pour jouer. self.touche_options = [ 'plus', 'minus', 'slash' ] # Liste des touches qui seront utilisées pour les options du jeu (Augmenter le taux de rafraîchissement : +, le Diminuer : -, Mettre en place un sol : / ). # Capture les événements de la souris. self.canevas.bind( "<Motion>", self.moved) # Coordonnées du curseur de la souris en abscisse. self.canevas.bind("<Button-3>", self.rightClick) # Si le click droit a été activé. self.canevas.bind( "<Leave>", self.leave) # Si la souris a quitté le périmètre de la fenêtre. self.canevas.bind( "<Enter>", self.enter) # Si la souris est entrée le périmètre de la fenêtre. # Capture les événements du clavier. self.fenetre.bind( "<KeyPress>", self.checkKeyPressed ) # Active la capture des touches du clavier dans la fenêtre. self.resetGame( ) # Initialise tout les objets avec leurs paramètres par défaut.
def perp_ship(self): self.ships = Group() for ship_number in range(self.stats.ships_left): ship = Lives(self.ai_setings, self.screen) ship.rect.x = 10 + ship_number * ship.rect.width ship.rect.y = 10 self.ships.add(ship)
def prep_lives(self): self.lives = Group() for life_number in range(self.stats.ships_left): life = Lives() life.rect.x = 10 + life_number * life.rect.width + life_number * 10 life.rect.y = 10 self.lives.add(life)
def prep_lives(self): """Show how many lives are left""" self.lives = Group() for lives_number in range(self.stats.ships_left): life = Lives(self.ai_settings, self.screen) life.rect.x = 10 + lives_number * life.rect.width life.rect.y = 10 self.lives.add(life)
class Jeu: ''' Classe pour gérer l'ensemble des intéractions avec le jeu. ''' def __init__(self, i_fenetre): ''' Définition des variables du constructeur. ''' self.fenetre = i_fenetre # Stocke les paramètres de la fenêtre. self.canevas = tk.Canvas( self.fenetre, width=self.largeur_fenetre(), height=self.hauteur_fenetre( )) # Crée un canvas ( Support de tout les éléments d'affichage. ) self.canevas.place(x=0, y=0) # Place le Canvas self.raquette = Raquette(self) # Crée une instance de Raquette. self.balle = Balle(self) # Crée une instance de Balle. self.level_id = -1 # Numéro du niveau à charger. self.niveau = Level(self, self.level_id) # Crée une instance du Niveau . self.lives = Lives(self, 3, self.largeur_fenetre() / 16, (self.hauteur_fenetre() * 15) / 16) # Crée une instance des Vies. self.touche_possible = [ "q", "d", "Q", "D" ] # Liste des touches qui seront utilisées pour jouer. self.touche_options = [ 'plus', 'minus', 'slash' ] # Liste des touches qui seront utilisées pour les options du jeu (Augmenter le taux de rafraîchissement : +, le Diminuer : -, Mettre en place un sol : / ). # Capture les événements de la souris. self.canevas.bind( "<Motion>", self.moved) # Coordonnées du curseur de la souris en abscisse. self.canevas.bind("<Button-3>", self.rightClick) # Si le click droit a été activé. self.canevas.bind( "<Leave>", self.leave) # Si la souris a quitté le périmètre de la fenêtre. self.canevas.bind( "<Enter>", self.enter) # Si la souris est entrée le périmètre de la fenêtre. # Capture les événements du clavier. self.fenetre.bind( "<KeyPress>", self.checkKeyPressed ) # Active la capture des touches du clavier dans la fenêtre. self.resetGame( ) # Initialise tout les objets avec leurs paramètres par défaut. def largeur_fenetre(self) -> int: ''' Fonction qui retourne la valeur de la largeur de la fenêtre. ''' return self.fenetre.winfo_width( ) # Retourne la largeur définie dans main.py def hauteur_fenetre(self) -> int: ''' Fonction qui retourne la valeur de la hauteur de la fenêtre. ''' return self.fenetre.winfo_height( ) # Retourne la heuteur définie dans main.py def checkKeyPressed(self, event): ''' Fonction qui vérifie si une touche à été préssée, et si elle est prise en compte par le programme. ''' # print(f"Touche : {event.keysym}") #Affiche toutes les touches préssés. if event.keysym == "Escape": # Si la touche préssée est 'Echap' alors , self.stopGame( ) #Le jeu s'arrête (Sortie de la boucle while -> infini) if event.keysym in self.touche_possible: # Si la touche préssée est dans la liste de celles possibles pour le jeu. if event.keysym == "q" or event.keysym == "Q": # Si la touche préssée est la touche 'q' ou 'Q' (dans le cas d'un clavier en mode MAJS ) self.raquette.goLeft( ) # Apelle la fonction qui permet de déplacer la Raquette vers la Gauche. elif event.keysym == "d" or event.keysym == "D": # Si la touche préssée est la touche 'd' ou 'D' (dans le cas d'un clavier en mode MAJS ) self.raquette.goRight( ) # Apelle la fonction qui permet de déplacer la Raquette vers la Droite. if event.keysym in self.touche_options: # Si la touche préssée est dans la liste de celles possibles pour les options. if event.keysym == "plus": # Si la touche préssée est la touche '+' self.time_sleep /= 2 # Le taux de rafraîchissement de la fenêtre est augmenté (temps de pause diminué). print("Taux de Rafraîchissement : Augmenté" ) # Message qui s'affiche au passage dans la condition. elif event.keysym == "minus": # Si la touche préssée est la touche '-' self.time_sleep *= 2 # Le taux de rafraîchissement de la fenêtre est diminué (temps de pause augmenté). print("Taux de Rafraîchissement : Diminué" ) # Message qui s'affiche au passage dans la condition. elif event.keysym == 'slash': # Si la touche préssée est la touche '/' self.niveau.ground = not self.niveau.ground # Toggle (= Basculer) le sol à True / False. if self.niveau.ground == True: # Si le sol est à l'état True. print( "Sol Activé" ) # Message qui s'affiche au passage dans la condition. else: # Sinon print( "Sol Désactivé" ) # Message qui s'affiche si le sol est désactivé après passage dans la boucle. def moved(self, event): ''' Fonction récupérant les coordonnées en abscisse de la souris et les attribuants à la raquette. ''' x = event.x # Capte les coordonées de la souris en abscisse. self.raquette.setPosition( x ) # Attributs les coordonnées en abscisse de la souris captés précédement et les attributs à la Raquette. def enter(self, event): ''' Fonction qui gère l'entrée de la souris dans la zone du canvas. ''' x, y = event.x, event.y # Capture les coordonnées en abscisse, en ordonné et les stockent. if y > 0 and y < self.hauteur_fenetre( ): # Si la souris est dans la fenêtre en hauteur alors , self.raquette.setPositionEnter( x ) # On demande à placer la souris au maximum de la zone du canvas en largeur. def leave(self, event): ''' Fonction qui gère la sortie de la souris de la zone du canvas. ''' x, y = event.x, event.y # Capture les coordonnées en abscisse, en ordonné et les stockent. if y > 0 and y < self.hauteur_fenetre( ): # Si la souris est dans la fenêtre en hauteur alors , self.raquette.setPositionLeave( x ) # On demande à placer la souris au maximum de la zone du canvas en largeur. def miseAJour(self): ''' Fonction mettant à jour tout les éléments susceptibles de varier // Sauf les briques (Auto gérées) ''' self.balle.deplacer() # Provoque le déplacement de la Balle. self.balle.paint() # Actualise l'affichage de la Balle. self.raquette.paint() # Actualise l'affichage de la Raquette. self.lives.paint() # Actualise l'affichage de la Vie. def stopGame(self): ''' Fonction permettant d'arrêter le jeu. ''' self.running = False # Sortie de la bouble infini While. print("Game Stopped" ) # Message qui s'affiche lors de l'appel de cette fonction. def getStateGame(self): ''' Fonction permettant d'obtenir l'état du jeu (Pause/Running). ''' return self.running # Retourne True si le jeu est en marche, sinon, s'il est arrêté, retourne False. def resetGame(self): ''' Réinitialise tout les paramètres par défaut de tout les objets. ''' self.raquette.reset() # Réinitialise les paramètres de la Raquette. self.balle.reset() # Réinitialise les paramètres de la Balle. self.lives.reset() # Réinitialise les paramètres de la Vie. self.niveau.reset() # Réinitialise les paramètres du Niveau. self.time_sleep = 0.01 # Réinitialise les paramètres de temps de pause du jeu. def rightClick(self, event): ''' Fonction permettant de rédémarrer le Jeu avec un clic droit si le Jeu est en pause. ''' if self.getStateGame() == False: # Si le Jeu est en pause alors , self.resetGame( ) # L'on réinitialise tout les paramètres par défaut. self.startGame() # L'on rentre dans la boucle infini While. def startGame(self): ''' Fonction permattant de démarrer le Jeu. ''' self.running = True # Passe la condition de la boucle infini While à l'état : True (l'on rentre dans la boucle). while self.getStateGame(): # Tant que le Jeu est à l'état True : self.miseAJour() # Mise à jour du jeu. self.fenetre.update() # Mise à jour par l'os de l'affichage. sleep( self.time_sleep ) # Temps d'arrêt entre chaque rafraîchissement de l'écran qui est défini par : self.time_sleep .
def __init__(self,gamestate,score,ammo): # Konfuguracja random.seed() #inicjalizaja pygame.init() self.SCREEN_SIZE = (1280, 720) # grafiki dopasowane do tego self.screen = pygame.display.set_mode(self.SCREEN_SIZE) self.tps_clock = pygame.time.Clock() self.tps_delta = 0.0 self.shot = 0.0 self.supertime = -2 self.player = Player(self) self.aliens = [] self.opp = 10 self.bullets = [] self.alienbulets = [] self.lives = Lives(self) self.lives_number = 3 self.score = Score(self) self.score_number = 0 + score self.ammo = Ammo(self) self.walls = [] self.gameover = GameOver(self) self.gamestate = gamestate self.ammo_number = ammo + 5 self.nextlevel = NextLevel(self) self.tps_max = 300.0 self.superalien = [] self.tooClose = False self.pauseSign = Pause(self) self.pause = 1 for i in range(0,self.opp): self.aliens.append(Alien(self, i * 100 + 100, 100,self.gamestate-1)) self.aliens.append(Alien(self, i * 100 + 100, 150,self.gamestate-1)) self.aliens.append(Alien(self, i * 100 + 100, 200,self.gamestate-1)) self.aliens.append(Alien(self, i * 100 + 100, 250,self.gamestate-1)) self.aliens.append(Alien(self, i * 100 + 100, 300,self.gamestate-1)) self.aliens.append(Alien(self, i * 100 + 100, 350,self.gamestate-1)) self.rand_opp = 6*self.opp for i in range(0,5): self.walls.append(Wall(self,80+i*340)) channel_game = pygame.mixer.Channel(1) channel_game2 = pygame.mixer.Channel(2) channel_game3 = pygame.mixer.Channel(3) self.background = pygame.image.load("tlo3.jpg") self.text = open("score").readline() while self.gamestate !=0: if self.rand_opp != 0: los = random.randrange(self.rand_opp) else: los = 0 # obsługa zdarzen for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() elif event.type == pygame.KEYDOWN and event.key == pygame.K_p: self.pause *= -1 elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE and self.ammo_number != 0: self.bullets.append(Bullet(self,self.player.pos[0]+23,self.player.pos[1])) channel_game3.play(pygame.mixer.Sound("mygun.wav")) channel_game3.set_volume(0.5) elif (self.lives_number == 0 or self.ammo_number <= 0 or self.tooClose == True) and event.type == pygame.KEYDOWN and event.key == pygame.K_RETURN: self.gamestate = 0 elif len(self.aliens) == 0 and event.type == pygame.KEYDOWN and event.key == pygame.K_RETURN: self.gamestate += 1 Game(self.gamestate,self.score_number,self.ammo_number) self.text = open("score").readline() self.gamestate = 0 elif event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE and self.pause == -1: self.gamestate = 0 elif event.type == pygame.KEYDOWN and event.key == pygame.K_p and self.pause == -1: self.pause *= -1 #ticking self.tps_delta += self.tps_clock.tick() / 1000.0 self.shot += self.tps_clock.tick()+0.000000003*(self.gamestate-1) / 1.0 self.supertime += self.tps_clock.tick() / 1.0 while self.tps_delta > 1 / self.tps_max: self.tick() self.tps_delta -= 1 / self.tps_max while(self.shot >= 0.001 / self.tps_max and len(self.aliens)!=0 and (self.lives_number != 0 and self.ammo_number > 0) and self.tooClose == False and self.pause == 1): self.shot = 0 channel_game.play(pygame.mixer.Sound("shot.wav")) channel_game.set_volume(0.5) self.alienbulets.append(AlienBullet(self,self.aliens[los].x,self.aliens[los].y)) while self.supertime >= 0.001 / self.tps_max: self.supertime = -2 if(len(self.superalien)==0 and self.tooClose == False and self.lives_number !=0 and self.ammo_number > 0 and self.pause == 1): self.superalien.append(SuperAlien(self)) channel_game2.play(pygame.mixer.Sound("supersound.wav")) channel_game2.set_volume(0.3) #rendering self.screen.fill((0, 0, 0)) self.screen.blit(self.background, (0, 0)) self.draw() pygame.display.flip()
class Game(object): def __init__(self,gamestate,score,ammo): # Konfuguracja random.seed() #inicjalizaja pygame.init() self.SCREEN_SIZE = (1280, 720) # grafiki dopasowane do tego self.screen = pygame.display.set_mode(self.SCREEN_SIZE) self.tps_clock = pygame.time.Clock() self.tps_delta = 0.0 self.shot = 0.0 self.supertime = -2 self.player = Player(self) self.aliens = [] self.opp = 10 self.bullets = [] self.alienbulets = [] self.lives = Lives(self) self.lives_number = 3 self.score = Score(self) self.score_number = 0 + score self.ammo = Ammo(self) self.walls = [] self.gameover = GameOver(self) self.gamestate = gamestate self.ammo_number = ammo + 5 self.nextlevel = NextLevel(self) self.tps_max = 300.0 self.superalien = [] self.tooClose = False self.pauseSign = Pause(self) self.pause = 1 for i in range(0,self.opp): self.aliens.append(Alien(self, i * 100 + 100, 100,self.gamestate-1)) self.aliens.append(Alien(self, i * 100 + 100, 150,self.gamestate-1)) self.aliens.append(Alien(self, i * 100 + 100, 200,self.gamestate-1)) self.aliens.append(Alien(self, i * 100 + 100, 250,self.gamestate-1)) self.aliens.append(Alien(self, i * 100 + 100, 300,self.gamestate-1)) self.aliens.append(Alien(self, i * 100 + 100, 350,self.gamestate-1)) self.rand_opp = 6*self.opp for i in range(0,5): self.walls.append(Wall(self,80+i*340)) channel_game = pygame.mixer.Channel(1) channel_game2 = pygame.mixer.Channel(2) channel_game3 = pygame.mixer.Channel(3) self.background = pygame.image.load("tlo3.jpg") self.text = open("score").readline() while self.gamestate !=0: if self.rand_opp != 0: los = random.randrange(self.rand_opp) else: los = 0 # obsługa zdarzen for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() elif event.type == pygame.KEYDOWN and event.key == pygame.K_p: self.pause *= -1 elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE and self.ammo_number != 0: self.bullets.append(Bullet(self,self.player.pos[0]+23,self.player.pos[1])) channel_game3.play(pygame.mixer.Sound("mygun.wav")) channel_game3.set_volume(0.5) elif (self.lives_number == 0 or self.ammo_number <= 0 or self.tooClose == True) and event.type == pygame.KEYDOWN and event.key == pygame.K_RETURN: self.gamestate = 0 elif len(self.aliens) == 0 and event.type == pygame.KEYDOWN and event.key == pygame.K_RETURN: self.gamestate += 1 Game(self.gamestate,self.score_number,self.ammo_number) self.text = open("score").readline() self.gamestate = 0 elif event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE and self.pause == -1: self.gamestate = 0 elif event.type == pygame.KEYDOWN and event.key == pygame.K_p and self.pause == -1: self.pause *= -1 #ticking self.tps_delta += self.tps_clock.tick() / 1000.0 self.shot += self.tps_clock.tick()+0.000000003*(self.gamestate-1) / 1.0 self.supertime += self.tps_clock.tick() / 1.0 while self.tps_delta > 1 / self.tps_max: self.tick() self.tps_delta -= 1 / self.tps_max while(self.shot >= 0.001 / self.tps_max and len(self.aliens)!=0 and (self.lives_number != 0 and self.ammo_number > 0) and self.tooClose == False and self.pause == 1): self.shot = 0 channel_game.play(pygame.mixer.Sound("shot.wav")) channel_game.set_volume(0.5) self.alienbulets.append(AlienBullet(self,self.aliens[los].x,self.aliens[los].y)) while self.supertime >= 0.001 / self.tps_max: self.supertime = -2 if(len(self.superalien)==0 and self.tooClose == False and self.lives_number !=0 and self.ammo_number > 0 and self.pause == 1): self.superalien.append(SuperAlien(self)) channel_game2.play(pygame.mixer.Sound("supersound.wav")) channel_game2.set_volume(0.3) #rendering self.screen.fill((0, 0, 0)) self.screen.blit(self.background, (0, 0)) self.draw() pygame.display.flip() def tick(self): if (self.lives_number != 0 and self.ammo_number > 0 and len(self.aliens) !=0 and self.tooClose == False and self.pause == 1): self.edge = False self.player.tick() for i in range(0,len(self.aliens)): self.aliens[i].move() if (self.aliens[i].x >= self.SCREEN_SIZE[0]-50) or (self.aliens[i].x <= 0): self.edge = True if self.edge: for i in range(0, len(self.aliens)): if self.aliens[i].x >= self.SCREEN_SIZE[0]-100: for j in range(0, len(self.aliens)): self.aliens[j].x -= 3 elif self.aliens[i].x < 50: for j in range(0, len(self.aliens)): self.aliens[j].x += 3 self.aliens[i].shiftDown() self.edge = False if (self.aliens[i].y > 600 ): self.tooClose = True for i in range(0,len(self.bullets)): self.bullets[i].tick() for i in range(0,len(self.alienbulets)): self.alienbulets[i].tick() for i in range(0,len(self.superalien)): self.superalien[i].move() def draw(self): self.player.draw() self.lives.draw(self.lives_number) self.score.draw(self.score_number) self.ammo.draw(self.ammo_number) for i in range(0,len(self.walls)-1): self.walls[i].draw() for i in range(0,len(self.bullets)): self.bullets[i].draw() for j in range(0, len(self.aliens)): if(self.bullets[i].hits(self.aliens[j])): self.aliens[j].destroy() self.bullets[i].destroy() self.score_number +=10 #self.ammo_number += 1 for j in range(0, len(self.walls)): if (self.bullets[i].hits_wall(self.walls[j])): self.bullets[i].destroy() self.ammo_number -=1 if (self.walls[j].state > 0): self.walls[j].state -= 1 else: self.walls[j].destroy() for j in range(0,len(self.superalien)): if(self.bullets[i].hits_super(self.superalien[j])): self.superalien[j].destroy() self.bullets[i].destroy() self.score_number +=100 self.ammo_number += 5 if(self.bullets[i].y <= 0): self.bullets[i].destroy() self.ammo_number -= 1 for i in range(0,len(self.aliens)): self.aliens[i].draw() for i in range(len(self.bullets)-1,-1,-1): if(self.bullets[i].toDestroy): self.bullets.pop(i) for i in range(len(self.aliens)-1,-1,-1): if(self.aliens[i].toDestroy): self.aliens.pop(i) self.rand_opp -= 1 for i in range(len(self.walls)-1,-1,-1): if(self.walls[i].toDestroy): self.walls.pop(i) for i in range(len(self.alienbulets)-1,-1,-1): if(self.alienbulets[i].toDestroy): self.alienbulets.pop(i) for i in range(len(self.superalien)-1,-1,-1): if(self.superalien[i].toDestroy): self.superalien.pop(i) for i in range(0,len(self.superalien)): self.superalien[i].draw() if self.superalien[i].x < -65: self.superalien[i].destroy() for i in range(0,len(self.alienbulets)): self.alienbulets[i].draw() if(self.alienbulets[i].hits(self.player) and len(self.aliens) != 0): self.alienbulets[i].destroy() self.lives_number -= 1 self.ammo_number -= 4*(self.gamestate) self.score_number -= 100 for j in range(0,len(self.walls)): if(self.alienbulets[i].hits_wall(self.walls[j])): self.alienbulets[i].destroy() if(self.walls[j].state>0): self.walls[j].state -=1 else: self.walls[j].destroy() if (self.alienbulets[i].y >= 720): self.alienbulets[i].destroy() if self.lives_number == 0 or self.ammo_number <= 0 or self.tooClose: self.gameover.draw() if len(self.aliens) == 0: self.nextlevel.draw() if self.pause == -1: self.pauseSign.draw() if(self.score_number > int(self.text)): self.cel = open("score", "w") self.cel.write(self.text.replace(self.text,str(self.score_number))) self.cel.close()
def __init__(self): pygame.init() pygame.mixer.init() pygame.font.init() self.clock = pygame.time.Clock() self.screen = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption(TITLE) self.running = True self.background = pygame.image.load( "img/spaceInvadersBG.jpg").convert() self.all_sprites = pygame.sprite.Group() self.enemies = pygame.sprite.Group() self.player = Player() self.all_sprites.add(self.player) self.player_bullets = pygame.sprite.Group() self.enemy_bullets = pygame.sprite.Group() self.obstacles = pygame.sprite.Group() self.lives = Lives(3) """ Making the rows of enemies """ for b in range(5): # 5 vertical rows of enemies self.xPos = 100 # Original starting x position for i in range(11): # 11 horizontal rows of enemies self.e = Enemy(self.xPos, 40 + (30 * b)) # Spawning an enemy self.all_sprites.add( self.e) # Adding it to the all_sprites group self.enemies.add(self.e) # Adding it to the enemies group self.xPos += 50 # Change x position every time with the same value when a new enemy has been made """ drawing the obstacles """ # TODO: make the code shorter for b in range(5): self.xPos = (WIDTH * (1 / 3)) - 70 for i in range(7): # self.obstacle = Obstacle(self.xPos, HEIGHT - 140 + (10 * b)) # self.all_sprites.add( self.obstacle) # Adding it to the all_sprites group self.obstacles.add(self.obstacle) self.xPos += 10 for b in range(5): self.xPos = (WIDTH / 2) - 35 for i in range(7): # self.obstacle = Obstacle(self.xPos, HEIGHT - 140 + (10 * b)) # self.all_sprites.add( self.obstacle) # Adding it to the all_sprites group self.obstacles.add(self.obstacle) self.xPos += 10 for b in range(5): self.xPos = WIDTH * (2 / 3) for i in range(7): # self.obstacle = Obstacle(self.xPos, HEIGHT - 140 + (10 * b)) # self.all_sprites.add( self.obstacle) # Adding it to the all_sprites group self.obstacles.add(self.obstacle) self.xPos += 10 # Game Loop while self.running: self.clock.tick(FPS) self.events() self.update() self.enemy_shoot() self.draw() quit() pygame.quit() sys.exit()
class Game(object): """ Game class - game logic """ def __init__(self): pygame.init() pygame.mixer.init() pygame.font.init() self.clock = pygame.time.Clock() self.screen = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption(TITLE) self.running = True self.background = pygame.image.load( "img/spaceInvadersBG.jpg").convert() self.all_sprites = pygame.sprite.Group() self.enemies = pygame.sprite.Group() self.player = Player() self.all_sprites.add(self.player) self.player_bullets = pygame.sprite.Group() self.enemy_bullets = pygame.sprite.Group() self.obstacles = pygame.sprite.Group() self.lives = Lives(3) """ Making the rows of enemies """ for b in range(5): # 5 vertical rows of enemies self.xPos = 100 # Original starting x position for i in range(11): # 11 horizontal rows of enemies self.e = Enemy(self.xPos, 40 + (30 * b)) # Spawning an enemy self.all_sprites.add( self.e) # Adding it to the all_sprites group self.enemies.add(self.e) # Adding it to the enemies group self.xPos += 50 # Change x position every time with the same value when a new enemy has been made """ drawing the obstacles """ # TODO: make the code shorter for b in range(5): self.xPos = (WIDTH * (1 / 3)) - 70 for i in range(7): # self.obstacle = Obstacle(self.xPos, HEIGHT - 140 + (10 * b)) # self.all_sprites.add( self.obstacle) # Adding it to the all_sprites group self.obstacles.add(self.obstacle) self.xPos += 10 for b in range(5): self.xPos = (WIDTH / 2) - 35 for i in range(7): # self.obstacle = Obstacle(self.xPos, HEIGHT - 140 + (10 * b)) # self.all_sprites.add( self.obstacle) # Adding it to the all_sprites group self.obstacles.add(self.obstacle) self.xPos += 10 for b in range(5): self.xPos = WIDTH * (2 / 3) for i in range(7): # self.obstacle = Obstacle(self.xPos, HEIGHT - 140 + (10 * b)) # self.all_sprites.add( self.obstacle) # Adding it to the all_sprites group self.obstacles.add(self.obstacle) self.xPos += 10 # Game Loop while self.running: self.clock.tick(FPS) self.events() self.update() self.enemy_shoot() self.draw() quit() pygame.quit() sys.exit() def player_shoot(self): """ Make the player shoot bullets """ self.playerbullet = PlayerBullet(self.player.rect.centerx, self.player.rect.top, -10, YELLOW) self.all_sprites.add(self.playerbullet) self.player_bullets.add(self.playerbullet) """ draw lives """ def enemy_shoot(self): self.shooting_chance = 1400 for enemy in self.enemies: # Have a random chance of shooting each frame if random.randrange(self.shooting_chance) == 0: self.enemy_bullet = EnemyBullet(enemy.rect.centerx, enemy.rect.bottom, 10, RED) self.all_sprites.add(self.enemy_bullet) self.enemy_bullets.add(self.enemy_bullet) def events(self): # Events for event in pygame.event.get(): if event.type == pygame.QUIT: self.running = False if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE: self.running = False elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE: self.player_shoot() def update(self): # Game loop - update """ update all the sprites """ self.all_sprites.update() self.playerbulletEnemyHit = pygame.sprite.groupcollide( self.player_bullets, self.enemies, True, True) self.PlayerObstacle_hit = pygame.sprite.groupcollide( self.player_bullets, self.obstacles, True, True) self.enemybulletObstacle_hit = pygame.sprite.groupcollide( self.enemy_bullets, self.obstacles, True, True) self.enemybulletPlayer_hit = pygame.sprite.spritecollide( self.player, self.enemy_bullets, True) if self.enemybulletPlayer_hit: self.player.rect.x = WIDTH / 2 self.lives.current -= 1 if self.lives.current == 0: self.running = False """make all the enemies bounce when one hits the edge""" for oneEnemy in self.enemies: if oneEnemy.rect.right > WIDTH: # if one hits the edge for allEnemies in self.enemies: # Change the direction of all the enemies allEnemies.rect.y += 5 allEnemies.speedx *= -1.0 break elif oneEnemy.rect.left < 0: # if one hits the edge for allEnemies in self.enemies: # Change the direction of all the enemies allEnemies.speedx *= -1.0 allEnemies.rect.y += 5 break def draw(self): self.backgroundrect = self.background.get_rect() self.screen.blit(self.background, self.backgroundrect) self.all_sprites.draw(self.screen) self.lives.draw(self.screen) """ Update the screen when everything has been drawn """ pygame.display.flip()
import time from turtle import Screen from player import Player from car_manager import CarManager from scoreboard import Scoreboard from lives import Lives screen = Screen() screen.title("Turtler") screen.colormode(255) screen.setup(width=600, height=600) screen.tracer(0) player = Player() score = Scoreboard() cars = CarManager() lives = Lives() screen.listen() screen.onkey(player.move_forward, "Up") game_is_on = True while game_is_on: time.sleep(0.1) screen.update() cars.create_car() cars.car_automate() # DETECT ROADKILL for car in cars.car_group: if player.distance(car) < 25: game_is_on = False lives.take_one()
def __init__(self): pygame.init() self.settings = Settings() self.bullets = pygame.sprite.Group() self.enemies = pygame.sprite.Group() self.evil_bullets = pygame.sprite.Group() self.a_map = World_map() self.screen = pygame.display.set_mode( (self.settings.screen_width,self.settings.screen_height)) pygame.display.set_caption("Invasion") self.level = 0 self.stats = Stats(self) temp_x, temp_y = 200, 50 temp_color = (0, 100, 0) temp_text_color =(255, 255, 255) self.play_button = Button(self, temp_x, temp_y, temp_color, temp_text_color, "PLAY") self.play_button.rect.y -= 65 self.play_button._prep_msg("NEW GAME") temp_x, temp_y = 200, 50 temp_color = (20, 40, 0) temp_text_color =(255, 255, 255) self.exit_button = Button(self, temp_x, temp_y, temp_color, temp_text_color, "EXIT") self.exit_button.rect.y += 185 self.exit_button._prep_msg("EXIT") temp_x, temp_y = 200, 50 temp_color = (80, 60, 0) temp_text_color =(255, 255, 255) self.title_button = Button(self, temp_x, temp_y, temp_color, temp_text_color, "TITLE") self.title_button.rect.y += 125 self.title_button._prep_msg("TITLE") self.title = Title(self) self.title_active = False temp_x, temp_y = 200, 50 temp_color = (150, 200, 0) temp_text_color =(255, 255, 255) self.help_button = Button(self, temp_x, temp_y, temp_color, temp_text_color, "HELP") self.help_button.rect.y += 65 self.help_button._prep_msg("HELP") self.help_ = Help(self) self.help_active = False temp_x, temp_y = 200, 50 temp_color = (150, 200, 0) temp_text_color =(255, 255, 255) self.back_button = Button(self, temp_x, temp_y, temp_color, temp_text_color, "BACK") self.back_button.rect.y += 185 self.back_button._prep_msg("BACK") temp_x, temp_y = 250, 50 temp_color = (0, 240, 0) temp_text_color =(255, 255, 255) self.restart_button = Button(self, temp_x, temp_y, temp_color, temp_text_color, "Restart level") temp_x, temp_y = 350, 50 temp_color = (100, 100, 100) temp_text_color =(255, 0, 0) self.win_button = Button(self, temp_x, temp_y, temp_color, temp_text_color, "YOU ARE A WINNER!") self.myTank = Ship(self) self.myTank.live = 0 #interface self.liveboard = Lives(self) self.score = 0 self.scoreboard = Score(self) self.image = pygame.image.load('images/brick_wall3.png') self.rect = self.image.get_rect() self.aid = pygame.image.load('images/aid.png')
class Invasion: def __init__(self): pygame.init() self.settings = Settings() self.bullets = pygame.sprite.Group() self.enemies = pygame.sprite.Group() self.evil_bullets = pygame.sprite.Group() self.a_map = World_map() self.screen = pygame.display.set_mode( (self.settings.screen_width,self.settings.screen_height)) pygame.display.set_caption("Invasion") self.level = 0 self.stats = Stats(self) temp_x, temp_y = 200, 50 temp_color = (0, 100, 0) temp_text_color =(255, 255, 255) self.play_button = Button(self, temp_x, temp_y, temp_color, temp_text_color, "PLAY") self.play_button.rect.y -= 65 self.play_button._prep_msg("NEW GAME") temp_x, temp_y = 200, 50 temp_color = (20, 40, 0) temp_text_color =(255, 255, 255) self.exit_button = Button(self, temp_x, temp_y, temp_color, temp_text_color, "EXIT") self.exit_button.rect.y += 185 self.exit_button._prep_msg("EXIT") temp_x, temp_y = 200, 50 temp_color = (80, 60, 0) temp_text_color =(255, 255, 255) self.title_button = Button(self, temp_x, temp_y, temp_color, temp_text_color, "TITLE") self.title_button.rect.y += 125 self.title_button._prep_msg("TITLE") self.title = Title(self) self.title_active = False temp_x, temp_y = 200, 50 temp_color = (150, 200, 0) temp_text_color =(255, 255, 255) self.help_button = Button(self, temp_x, temp_y, temp_color, temp_text_color, "HELP") self.help_button.rect.y += 65 self.help_button._prep_msg("HELP") self.help_ = Help(self) self.help_active = False temp_x, temp_y = 200, 50 temp_color = (150, 200, 0) temp_text_color =(255, 255, 255) self.back_button = Button(self, temp_x, temp_y, temp_color, temp_text_color, "BACK") self.back_button.rect.y += 185 self.back_button._prep_msg("BACK") temp_x, temp_y = 250, 50 temp_color = (0, 240, 0) temp_text_color =(255, 255, 255) self.restart_button = Button(self, temp_x, temp_y, temp_color, temp_text_color, "Restart level") temp_x, temp_y = 350, 50 temp_color = (100, 100, 100) temp_text_color =(255, 0, 0) self.win_button = Button(self, temp_x, temp_y, temp_color, temp_text_color, "YOU ARE A WINNER!") self.myTank = Ship(self) self.myTank.live = 0 #interface self.liveboard = Lives(self) self.score = 0 self.scoreboard = Score(self) self.image = pygame.image.load('images/brick_wall3.png') self.rect = self.image.get_rect() self.aid = pygame.image.load('images/aid.png') def delete_all_bullets(self): self.evil_bullets.empty() self.bullets.empty() def level_1(self): self.level = 1 #show lives self.liveboard.prepare(self) # destroyd enemies self.score = 0 self.scoreboard.prepare(self) self.a_map.create_map() #create a map 1 self.delete_all_bullets() #self.myTank.out_coordinates = [] self.myTank.create_map() #create a map self.myTank.right_coordinates() # set new coordinates #self.myEnemy = Enemy(self) #print('LEVEL 111111111111111111111111111111') doNE self.enemies_list_coordinate = [] for i in range(15): #20 #self.create_an_enemy() self.create_an_enemy2() #add coordianates self.settings.bgr_color = WHITE self.image = pygame.image.load('images/brick_wall3.png') #self.image = pygame.image.load('images/brick_wall.png') def level_2(self): self.delete_all_bullets() self.settings.bgr_color = LIGHTGRAY self.image = pygame.image.load('images/brick_wall2.png') self.enemies_list_coordinate = [] for i in range(6): # 10 9 #self.create_an_enemy() self.create_an_enemy2() def level_3(self): self.delete_all_bullets() self.settings.bgr_color = LIGHTGRAY self.image = pygame.image.load('images/brick_wall.png') self.enemies_list_coordinate = [] for i in range(10): #12 #self.create_an_enemy() self.create_an_enemy2() def level_4(self): self.delete_all_bullets() self.settings.bgr_color = LIGHTGRAY self.image = pygame.image.load('images/brick_wall2.png') self.enemies_list_coordinate = [] for i in range(8): #10 15 #self.create_an_enemy() self.create_an_enemy2() def level_5(self): self.delete_all_bullets() self.settings.bgr_color = LIGHTGRAY self.image = pygame.image.load('images/brick_wall.png') self.enemies_list_coordinate = [] for i in range(10): #10 17 #self.create_an_enemy() self.create_an_enemy2() def _check_events(self): for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() if event.type == pygame.MOUSEBUTTONDOWN: mouse_pos = pygame.mouse.get_pos() self._check_play_button(mouse_pos) self._check_exit_button(mouse_pos) self._check_title_button(mouse_pos) self._check_help_button(mouse_pos) self._check_restart_button(mouse_pos) self._check_back_button(mouse_pos) self._check_win_button(mouse_pos) if event.type == pygame.KEYDOWN: if event.key == pygame.K_q: sys.exit() if event.key == pygame.K_RIGHT: #self.myTank.rect.x += self.myTank.ship_speed self.myTank.moving_right = True if event.key == pygame.K_LEFT: #self.myTank.rect.x -= self.myTank.ship_speed self.myTank.moving_left = True if event.key == pygame.K_UP: #self.myTank.rect.y -= self.myTank.ship_speed self.myTank.moving_up = True if event.key == pygame.K_DOWN: #self.myTank.rect.y += self.myTank.ship_speed self.myTank.moving_down = True if event.key == pygame.K_SPACE: self.fire_bullets() if event.key == pygame.K_BACKSPACE: self._check_enter() if event.key == pygame.K_r: self._check_restart() if event.type == pygame.KEYUP: if event.key == pygame.K_RIGHT: self.myTank.moving_right = False if event.key == pygame.K_LEFT: self.myTank.moving_left = False if event.key == pygame.K_UP: self.myTank.moving_up = False if event.key == pygame.K_DOWN: self.myTank.moving_down = False def _check_exit_button(self,mouse_pos): if self.exit_button.rect.collidepoint(mouse_pos) and self.myTank.live == 0 and not self.stats.game_active and not self.help_active: # invisible button musnt be worked sys.exit() def _check_enter(self): self.enemies.empty() self.stats.game_active = True self.myTank.live = LIVE_OF_TANK self.level_1() pygame.mouse.set_visible(False) def _check_restart(self): if self.level == 0: return 0 self.enemies.empty() self.stats.game_active = True self.myTank.live = LIVE_OF_TANK #show lives self.liveboard.prepare(self) # destroyd enemies self.score = 0 self.scoreboard.prepare(self) if self.level == 1: self.level_1() elif self.level == 2: self.level_2() elif self.level == 3: self.level_3() elif self.level == 4: self.level_4() elif self.level == 5: self.level_5() pygame.mouse.set_visible(False) def _check_restart_button(self,mouse_pos): if self.restart_button.rect.collidepoint(mouse_pos) and self.myTank.live == 0 and not self.stats.game_active and not self.help_active: # invisible button musnt be worked if self.level == 0: return 0 self.enemies.empty() self.stats.game_active = True self.myTank.live = LIVE_OF_TANK #show lives self.liveboard.prepare(self) # destroyd enemies self.score = 0 self.scoreboard.prepare(self) if self.level == 1: self.level_1() elif self.level == 2: self.level_2() elif self.level == 3: self.level_3() elif self.level == 4: self.level_4() elif self.level == 5: self.level_5() pygame.mouse.set_visible(False) def _check_title_button(self, mouse_pos): if self.title_button.rect.collidepoint(mouse_pos) and self.myTank.live == 0 and not self.stats.game_active and not self.help_active: # invisible button musnt be worked self.title_active = True pygame.mouse.set_visible(False) def _check_help_button(self, mouse_pos): if self.help_button.rect.collidepoint(mouse_pos) and self.myTank.live == 0 and not self.stats.game_active and not self.help_active: # invisible button musnt be worked self.help_active = True #pygame.mouse.set_visible(False) def _check_back_button(self, mouse_pos): if self.back_button.rect.collidepoint(mouse_pos) and self.help_active == True and not self.stats.game_active: # invisible button musnt be worked self.help_active = False #pygame.mouse.set_visible(False) def _check_play_button(self,mouse_pos): if self.play_button.rect.collidepoint(mouse_pos) and self.myTank.live == 0 and not self.stats.game_active and not self.help_active: # invisible button musnt be worked self.enemies.empty() self.stats.game_active = True self.myTank.live = LIVE_OF_TANK self.level_1() pygame.mouse.set_visible(False) #print(dir(self.enemies)) def _check_win_button(self,mouse_pos): if self.win_button.rect.collidepoint(mouse_pos) and self.myTank.live > 0 and not self.stats.game_active and not self.help_active: # invisible button musnt be worked self.enemies.empty() self.stats.game_active = True self.myTank.live = LIVE_OF_TANK self.level_1() pygame.mouse.set_visible(False) def fire_bullets(self): if len(self.bullets) <= BULLET_LIMIT: #my fire limit new_bullet = Bullet(self, self.myTank.direction,self.level) self.bullets.add(new_bullet) def fire_evil_bullets(self,enemy): new_bullet = Evil_bullet(self, enemy.rect.x, enemy.rect.y, enemy.direction,self.level) self.evil_bullets.add(new_bullet) def create_an_enemy2(self): new_enemy = Enemy(self) if self.level == 1: new_enemy.create_map() #CHANGE a map #new_enemy.ship_speed = 0.25 #CHANGE LEVEL DIFICULTY #print('ITTTTTTTTTTTTTTTTTTTTT') pass elif self.level == 2: new_enemy.change_map() elif self.level == 3: new_enemy.change_map_3() elif self.level == 4: new_enemy.change_map_4() elif self.level == 5: new_enemy.change_map_5() #new_enemy.ship_speed = 0.5 new_enemy.add_coordinates(self.myTank.rect.x, self.myTank.rect.y) #for temp in self.a_map.aid_list: #new_enemy.(temp[0],temp[1]) for x,y in self.enemies_list_coordinate: new_enemy.add_coordinates(x,y) #new_enemy.set_zero_coordinates() # return False if limit is out temp = new_enemy.right_coordinates() x = new_enemy.rect.x y= new_enemy.rect.y if temp != False: ###for enemy_update in self.enemies: ##enemy_update.add_coordinates(x, y)dd self.enemies_list_coordinate.append([x,y]) #self.add_coordinates(x,y) self.enemies.add(new_enemy) def levels(self): if len(self.enemies) == 0 and self.level == 1: #print(dir(self.evil_bullets))# == 0: #print('WIN WIN') self.level = 2 self.myTank.change_map() self.myTank.right_coordinates() # set new coordinates for my tank self.a_map.level_2_world_map() self.level_2() elif len(self.enemies) == 0 and self.level == 2: #print(dir(self.evil_bullets))# == 0: #print('WIN WIN') self.level = 3 self.myTank.change_map_3() self.myTank.right_coordinates() # set new coordinates for my tank self.a_map.level_3_world_map() self.level_3() elif len(self.enemies) == 0 and self.level == 3: #print(dir(self.evil_bullets))# == 0: #print('WIN WIN') self.level = 4 self.myTank.change_map_4() self.myTank.right_coordinates() # set new coordinates for my tank self.a_map.level_4_world_map() self.level_4() elif len(self.enemies) == 0 and self.level == 4: #print(dir(self.evil_bullets))# == 0: #print('WIN WIN') self.level = 5 self.myTank.change_map_5() self.myTank.right_coordinates() # set new coordinates for my tank self.a_map.level_5_world_map() self.level_5() elif len(self.enemies) == 0 and self.level == 5: pass #print(dir(self.evil_bullets)) #print('WIN WIN') #self.level_4() #restart game def lose_or_win(self): if self.myTank.live == 0: self.stats.game_active = False pygame.mouse.set_visible(True) pass #del self.myTank elif self.myTank.live > 0 and len(self.enemies) == 0 and self.level == 5: # IF WIN CHANGE LEVEL self.stats.game_active = False # IF WIN pygame.mouse.set_visible(True) # IF WIN def _update_screen(self): self.screen.fill(self.settings.bgr_color) self.myTank.blitme() for row in self.a_map.world_map_list: # CAN I update this one? for x,y in row: self.rect.x = x self.rect.y = y self.screen.blit(self.image, self.rect) #pygame.draw.rect(self.screen, DARKGRAY, (x, y, TILE, TILE),2) #for bullet in self.bullets.sprites(): #bullet.draw_bullet() #for bullet in self.evil_bullets.sprites(): #bullet.draw_bullet() #self.myEnemy.blitme() #for enemy in self.enemies.sprites(): #enemy.blitme() if not self.stats.game_active and self.myTank.live == 0 : self.play_button.draw_button() self.restart_button.draw_button() self.help_button.draw_button() self.title_button.draw_button() self.exit_button.draw_button() if self.title_active == True: self.title.draw_title() pygame.display.flip() #SHOW ALL update_screen time.sleep(2) self.title_active = False if self.help_active == True: self.help_.draw_title() self.back_button.draw_button() pygame.display.flip() #SHOW ALL update_screen #time.sleep(3) #self.help_active = False else: self.liveboard.draw() self.scoreboard.draw() if not self.stats.game_active and self.myTank.live > 0 and len(self.enemies) == 0 : self.win_button.draw_button() #pygame.display.flip() def run(self): #self.level = 1 while(True): for i in range(100): #if not self.stats.game_active: self.lose_or_win() self._check_events() self.myTank.empty_coordinates_others() #self.liveboard.prepare() #SHOW ALL update_screen self._update_screen() #animation of destroy and Delete if self.stats.game_active == True: #or self.stats.game_active == True: # self.myTank.live > 0 or not winner #for temp in self.a_map.aid_list: #print(temp[0],temp[1]) self.levels() for enemy in self.enemies: #update coordinates into enemies and myTank enemy.coordinates_others = [] self.myTank.coordinates_others = [] #for temp in self.a_map.aid_list: #self.myTank.add_coordinates(temp[0],temp[1]) #print(temp[0],temp[1]) for enemy_update in self.enemies: enemy.add_coordinates(enemy_update.rect.x, enemy_update.rect.y) enemy.add_coordinates(self.myTank.rect.x, self.myTank.rect.y) for temp in self.a_map.aid_list: enemy.add_coordinates(temp[0],temp[1]) self.myTank.add_coordinates(enemy_update.rect.x, enemy_update.rect.y) #live circle of enemy if enemy.live == True and i == 0: pass enemy.rand_direction() #enemy is shoting self.fire_evil_bullets(enemy) if i != 0: if enemy.live == True and i%2 == 0 or i%3 == 0: # speed enemies added or i%3 == 0 # print(f'i= {i}')# speed enemie3s enemy.update() if enemy.live == False and i == 0: self.score += 1 self.scoreboard.prepare(self) self.enemies.remove(enemy) #SHOW ALL update_screen enemy.blitme() #for in if len(self.a_map.aid_list) != 0: myTank_rightTopX = self.myTank.rect.x + self.myTank.SIZE myTank_lefttBottomY = self.myTank.rect.y + self.myTank.SIZE #temp = 0 for a in self.a_map.aid_list: x = a[0] y = a[1] self.rect.x = x self.rect.y = y rightTopX = x + 31 lefttBottomY = y + 31 if (rightTopX >= myTank_rightTopX >= x) and (lefttBottomY >= self.myTank.rect.y >= y) or (rightTopX >= myTank_rightTopX >= x) and (lefttBottomY >= myTank_lefttBottomY >= y) or (rightTopX >= self.myTank.rect.x >= x) and (lefttBottomY >= myTank_lefttBottomY >= y) or (rightTopX >= self.myTank.rect.x >= x) and (lefttBottomY >= self.myTank.rect.y >= y): #temp += 2 ################??????????????????????????? self.a_map.aid_list.remove(a) #temp += 2 self.myTank.live += 2 self.liveboard.prepare(self) #break else: self.screen.blit(self.aid, self.rect) self.myTank.update() #self.bullets.update() for bullet in self.evil_bullets.sprites(): if (self.myTank.rect.x + self.myTank.SIZE >= bullet.x >= self.myTank.rect.x) and (self.myTank.rect.y + self.myTank.SIZE >= bullet.y >= self.myTank.rect.y): #enemy.live = False #self.enemies.remove(enemy) print('You has been attacked') self.myTank.live -= 1 #show lives self.liveboard.prepare(self) self.evil_bullets.remove(bullet) #wall if bullet.update(): self.evil_bullets.remove(bullet) else: bullet.draw_bullet() #SHOW ALL update_screen # How to move and delete bullet for bullet in self.bullets.sprites(): #FIRE FIRE FIRE to enemies #step = True for enemy in self.enemies: if (enemy.rect.x + enemy.SIZE >= bullet.x >= enemy.rect.x) and (enemy.rect.y + enemy.SIZE >= bullet.y >= enemy.rect.y): #step = False enemy.live = False #self.enemies.remove(enemy) self.bullets.remove(bullet) #wall temp = bullet.update() if temp == True: self.bullets.remove(bullet) else: bullet.draw_bullet() #SHOW ALL update_screen pygame.display.flip() #SHOW ALL update_screen