Exemplo n.º 1
0
 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
Exemplo n.º 2
0
    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.
Exemplo n.º 3
0
 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)
Exemplo n.º 4
0
    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)
Exemplo n.º 5
0
 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)
Exemplo n.º 6
0
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 .
Exemplo n.º 7
0
    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()
Exemplo n.º 8
0
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()
Exemplo n.º 9
0
    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()
Exemplo n.º 10
0
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()
Exemplo n.º 11
0
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()
Exemplo n.º 12
0
    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')   
Exemplo n.º 13
0
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