Beispiel #1
0
    def _start(self):
        """
        Init and start new game scene
        :return: None
        """
        self.tileset = self.manager.get_image("tileset.png")
        self.main_theme_music = self.manager.get_music("main-theme.ogg")
        self.explosion_sound = self.manager.get_sound("boom.ogg")

        self.width, self.height = pygame.display.get_surface().get_size()
        self.track = Track()
        self.obstacle = Obstacle(self.track)
        self.player = Player(self.track)
        self.player.attach()
        self.explosion_sprite_size = 192
        self.explosion_speed = 4
        self.explosion = Animation(self.manager.get_image("explosion.png"),
                                   self.explosion_sprite_size,
                                   self.explosion_sprite_size,
                                   self.explosion_speed)
        self.is_explosion_started = False
        self.settings = Settings()
        self.font = pygame.font.SysFont("Monospace",
                                        40,
                                        bold=False,
                                        italic=False)
        self.calculate_tile_size()
        self.make_threads()
Beispiel #2
0
 def __init__(self, l):
     '''
     Constructeur de la class LoadScene
     '''
     self.width = pygame.display.get_surface().get_width()
     self.height = pygame.display.get_surface().get_height()
     self.loader = l
     self.action = 0
     self.actionCallBack = False
     
     self.nt = False
     self.tour = 1
     self.pioche = Pioche()
     deckPlayer1 = Deck("deck1", self.pioche.getDecks("deck1"))
     deckPlayer2 = Deck("deck2", self.pioche.getDecks("deck2"))
     
     self.player1 = Player(1, "Egor", deckPlayer1)
     self.player2 = Player(2, "Quentin", deckPlayer2)
     
     self.lastAnimCard = None
     
     l.clearAnimation()
     l.addAnimationByPath('bg', '../img/background.jpg')
     l.addAnimationByPath('showCard', '../img/card/spellCard.jpg', self.width / 2 - 75, self.height / 2 - 105, level=4)
     l.addAnimationByPath('pioche1', '../img/card/backSpellCard.jpg', level=1)
     l.addAnimationByPath('pioche2', '../img/card/backSpellCard.jpg', level=1)
     l.addAnimationByPath('passerTourJoueur', '../img/passer.png', self.width / 2 - 140, self.height / 2 - 50, level=1)
     
     self.btnPasser = Button('passerTourJoueur', '../img/passer.png', '../img/passer_select.png', self.partieSolo)
     self.btnPasser.loadButton(self.width / 2 - 140, self.height / 2 - 50, 280, 50, self.width, self.height)
     
     selection = l.getAnimation('pioche1')
     if len(selection) > 0:
         selection[0].newPos(self.width - 200, self.height / 2 - 105 - 110, 75, 105, 0, None)
     
     selection = l.getAnimation('pioche2')
     if len(selection) > 0:
         selection[0].newPos(self.width - 200, self.height / 2 + 105, 75, 105, 0, None)
     
     self.levelMaxPlayer = 3
     self.levelMaxEnemy = 3
     
     self.cardPlayer = []
     for i in range(5, 8):
         self.cardPlayer.append(CardInfo(l, self.player1.deck.getCarte(), i))
     
     self.cardEnemy = []
     for i in range(5, 8):
         self.cardEnemy.append(CardInfo(l, self.player2.deck.getCarte(), i))
     
     self.resizeWindow(l, self.width, self.height)
     self.ReturnScene = self
     
     self.changeText(l, "INFO")
Beispiel #3
0
    def __init__(self, namePlayer1, namePlayer2):
        '''
        Constructor
        @param namePlayer1: Nom du joueur 1
        @param namePlayer2: Nom du joueur 2
        '''
        self.tour = 1

        self.pioche = Pioche()
        deckPlayer1 = Deck("deck1", self.pioche.getDecks("deck1"))
        deckPlayer2 = Deck("deck1", self.pioche.getDecks("deck2"))
        
        self.player1 = Player(1, namePlayer1, deckPlayer1)
        self.player2 = Player(2, namePlayer2, deckPlayer2)
Beispiel #4
0
    def __init__(self):
        self.player = Player()

        self.gameWindow = tk.Tk()
        self.jokerFrame = tk.Frame(self.gameWindow)
        self.halfJoker = tk.Button(self.jokerFrame, text="50/50")
        self.audienceJoker = tk.Button(self.jokerFrame, text="Publikum")
        self.startBtn = tk.Button(self.gameWindow,
                                  text="START",
                                  bg="gray",
                                  command=self.start)
        # self.question = tk.Label(self.gameWindow)
        # self.score = tk.Label(self.gameWindow, text=self.player.getLevel())

        self.question = QuestionDisplayPanel(self.gameWindow)

        self.halfJoker.pack(side=tk.RIGHT)
        self.audienceJoker.pack(side=tk.RIGHT)

        self.gameWindow.title("Wer wird Millionär ?")
        self.gameWindow.geometry("500x500")

        self.startBtn.pack(fill=tk.X, side=tk.TOP)
        self.jokerFrame.pack(side=tk.TOP)
        # self.score.pack(fill=tk.X, side=tk.TOP)
        # self.answerD.pack(fill=tk.X, side=tk.BOTTOM)
        # self.answerC.pack(fill=tk.X, side=tk.BOTTOM)
        # self.answerB.pack(fill=tk.X, side=tk.BOTTOM)
        # self.answerA.pack(fill=tk.X, side=tk.BOTTOM)
        self.question.pack(fill=tk.X, side=tk.BOTTOM)
        self.gameWindow.mainloop()
Beispiel #5
0
	def Setup(self, message="", callback=None, time=None):
		# create our main player with id 0
		self.player = Player(self, 0, [0, 0, 11.0 / gfx.width, 12.0 / gfx.width], active=True)
		self.camera = BitCamera([0, 0, 1.0 / config.zoom, float(gfx.height) / gfx.width / config.zoom], tracking=self.player)
		if message:
			self.AddMessage(message, callback, time)
Beispiel #6
0
class Core(Game, EventMonitor, LevelManager, ConnectionListener):
	def __init__(self, server="mccormick.cx"):
		self.serverhost = server
		config.zoom = 5
		self.bgColor = (255, 255, 255)
		gfx.Caption('Infinite 8-bit Platformer')
		gfx.SetSize([800, 450])
		gfx.LoadFont("freaky_fonts_ca", 16.0 / gfx.width, "default")
		gfx.LoadFont("FreeSans", 18.0 / gfx.width, "chat")
		gfx.LoadFont("FreeSansBold", 12.0 / gfx.width, "speech")
		#gfx.LoadFont("FreeSans", 8.0 / gfx.width, "tiny")
		sfx.LoadSound("item")
		sfx.LoadSound("portal")
		sfx.LoadSound("die")
		sfx.LoadSound("jump")
		self.level = None
		Game.__init__(self)
		EventMonitor.__init__(self)
		# connection to the network
		self.net = NetMonitor(self)
		# The editLayer user interface (hud for editing levels)
		self.editLayer = EditLayer(self)
		# The other hud stuff
		self.hud = Hud(self)
		# progress bar should go above everything else
		self.progress = Progress()
		# Create player and camera and put some text on the screen
		# Give us the methods for manipulating level collections
		self.players = PlayerManager(self)
		# splash screen rock
		self.splash = None
		if not config.debugmode:
			self.splash = Splash(self)
			self.Add(self.splash)
		else:
			self.StartGame()
	
	def StartGame(self):
		# get rid of the splash screen
		if self.splash:
			self.Remove(self.splash)
			del self.splash
		# get the player and camera into the game
		self.Setup()
		# add the network management code
		self.Add(self.net)
		# global tooltip singleton
		self.Add(tooltip)
		# add the layer for editing levels
		self.Add(self.editLayer)
		# add the game's heads-up-display
		self.Add(self.hud)
		# add the progress meter for loading etc.
		self.Add(self.progress)
		# initialise the level manager
		LevelManager.__init__(self)
		# connect to the server
		self.net.Connect()
	
	def Setup(self, message="", callback=None, time=None):
		# create our main player with id 0
		self.player = Player(self, 0, [0, 0, 11.0 / gfx.width, 12.0 / gfx.width], active=True)
		self.camera = BitCamera([0, 0, 1.0 / config.zoom, float(gfx.height) / gfx.width / config.zoom], tracking=self.player)
		if message:
			self.AddMessage(message, callback, time)
	
	def AddMessage(self, messagetxt, callback=None, time=None):
		# why do i have to do this? the first notification does not appear if I don't delay for 1 frame
		self.QueueLater(1, self.Add, Notification(self, messagetxt, callback=callback, time=time))
	
	def RemoveMessage(self, message):
		self.Remove(message)
	
	def Quit(self):
		Game.Quit(self)
	
	###
	### Concurrency
	###
	
	def Pump(self):
		ConnectionListener.Pump(self)
		self.players.Pump()
		Game.Pump(self)
		EventMonitor.Pump(self)
	
	def Run(self):
		if not self.level:
			gfx.SetBackgroundColor(self.bgColor)
		Game.Run(self)
		gfx.Flip()
	
	def Update(self):
		Concurrent.Update(self)
	
	###
	### Platformer events
	###
	
	def PlayerDied(self):
		# if they don't have a last platform them pick the first platform on the level
		destination = self.player.lastplatform and self.player.lastplatform.id or self.levels[self.level].layer.platforms[0].id
		self.QueueLater(100, self.JoinLevel, self.level, destination)
		self.LeaveLevel()
		self.Setup("oops!")
	
	def Teleport(self, portal):
		parts = portal.destination.split(":")
		if len(parts) == 2:
			self.SetLevel(portal=portal, *parts)
			return True
	
	def TeleportToLevel(self, displayName):
		if self.levels.get(displayName):
			levelname = self.levels[displayName].name
		else:
			levelname = displayName[len("level"):]
		self.SetLevel("level" + levelname, "start")
	
	def Back(self):
		LevelManager.Back(self)
	
	def DoChatBox(self, text):
		if text.startswith("/help"):
			webbrowser.open("http://infiniteplatformer.com/info/help")
		elif text.startswith("/teleport"):
			bits = text.split(" ")
			# TODO: support x,y locations and named portals
			destination = " ".join(bits[1:])
			matches = [l for l in self.levels if self.levels[l].displayName == destination]
			if len(matches):
				self.TeleportToLevel(matches[0])
			elif self.net.serverconnection == 1:
				self.net.SendWithID({"action": "findlevel", "name": destination})
			else:
				self.AddMessage("You are offline", None, 5.0)
		elif text.startswith("/new"):
			self.edit_layer.NewLevel()
		elif text.startswith("/quit"):
			self.Quit()
		elif text.startswith("/back"):
			self.Back()
		else:
			self.player.Chat(text)
			self.hud.chatBox.ClearText()
		self.hud.chatBox.Hide()
	
	###
	### Interface events
	###
	
	def KeyDown(self, e):
		#print e
		pass
	
	def KeyDown_escape(self, e):
		self.Quit()
	
	###
	### Network events
	###
	
	def Network_foundlevel(self, data):
		if data['level']:
			self.TeleportToLevel(data['level'])
		else:
			self.AddMessage('No such level "%s"' % data['name'], time=1)
Beispiel #7
0
class GameScene(Scene):
    '''
    Une scene pour le chargement des données
    '''
    
    def __init__(self, l):
        '''
        Constructeur de la class LoadScene
        '''
        self.width = pygame.display.get_surface().get_width()
        self.height = pygame.display.get_surface().get_height()
        self.loader = l
        self.action = 0
        self.actionCallBack = False
        
        self.nt = False
        self.tour = 1
        self.pioche = Pioche()
        deckPlayer1 = Deck("deck1", self.pioche.getDecks("deck1"))
        deckPlayer2 = Deck("deck2", self.pioche.getDecks("deck2"))
        
        self.player1 = Player(1, "Egor", deckPlayer1)
        self.player2 = Player(2, "Quentin", deckPlayer2)
        
        self.lastAnimCard = None
        
        l.clearAnimation()
        l.addAnimationByPath('bg', '../img/background.jpg')
        l.addAnimationByPath('showCard', '../img/card/spellCard.jpg', self.width / 2 - 75, self.height / 2 - 105, level=4)
        l.addAnimationByPath('pioche1', '../img/card/backSpellCard.jpg', level=1)
        l.addAnimationByPath('pioche2', '../img/card/backSpellCard.jpg', level=1)
        l.addAnimationByPath('passerTourJoueur', '../img/passer.png', self.width / 2 - 140, self.height / 2 - 50, level=1)
        
        self.btnPasser = Button('passerTourJoueur', '../img/passer.png', '../img/passer_select.png', self.partieSolo)
        self.btnPasser.loadButton(self.width / 2 - 140, self.height / 2 - 50, 280, 50, self.width, self.height)
        
        selection = l.getAnimation('pioche1')
        if len(selection) > 0:
            selection[0].newPos(self.width - 200, self.height / 2 - 105 - 110, 75, 105, 0, None)
        
        selection = l.getAnimation('pioche2')
        if len(selection) > 0:
            selection[0].newPos(self.width - 200, self.height / 2 + 105, 75, 105, 0, None)
        
        self.levelMaxPlayer = 3
        self.levelMaxEnemy = 3
        
        self.cardPlayer = []
        for i in range(5, 8):
            self.cardPlayer.append(CardInfo(l, self.player1.deck.getCarte(), i))
        
        self.cardEnemy = []
        for i in range(5, 8):
            self.cardEnemy.append(CardInfo(l, self.player2.deck.getCarte(), i))
        
        self.resizeWindow(l, self.width, self.height)
        self.ReturnScene = self
        
        self.changeText(l, "INFO")
    
    def asyncAnimDeckPlayerFinal(self, anim):
        if not (self.lastAnimCard == None):
            self.actionCallBack = False
            self.lastAnimCard = None
    
    def asyncAnimDeckPlayer(self, anim):
        if not (self.lastAnimCard == None):
            self.lastAnimCard.setResize(self.width - 5 - (80 * len(self.cardPlayer)), self.height - 115, 75, 105, 40, self.asyncAnimDeckPlayerFinal)
    
    def animDeckPlayer(self):
        self.levelMaxPlayer += 1
        
        card = CardInfo(self.loader, self.player1.deck.getCarte(), self.levelMaxPlayer)
        card.setResize(self.width - 163 , self.height / 2 + 152, 0, 0, 0, None)
        card.setResize(self.width - 200, self.height / 2 + 105, 75, 105, 20, self.asyncAnimDeckPlayer)
        
        self.cardPlayer.append(card)
        self.lastAnimCard = card
        
    def asyncAnimDeckEnemyFinal(self, anim):
        if not (self.lastAnimCard == None):
            self.actionCallBack = False
            self.lastAnimCard = None
    
    def asyncAnimDeckEnemy(self, anim):
        if not (self.lastAnimCard == None):
            self.lastAnimCard.setResize(-70 + (80 * len(self.cardPlayer)), 10, 75, 105, 40, self.asyncAnimDeckEnemyFinal)
    
    def animDeckEnemy(self):
        self.levelMaxPlayer += 1
        
        card = CardInfo(self.loader, self.player2.deck.getCarte(), self.levelMaxPlayer)
        card.setResize(self.width - 163 , self.height / 2 - 53 - 110, 0, 0, 0, None)
        card.setResize(self.width - 200, self.height / 2 - 105 - 110, 75, 105, 20, self.asyncAnimDeckEnemy)
        
        self.cardEnemy.append(card)
        self.lastAnimCard = card
    
    def asyncChangeText(self, anim):
        anim.newPos((self.width / 2), (self.height / 2), 0, 0, 50, None)
        self.actionCallBack = False
    
    def changeText(self, l, message):
        texts = l.getFont('mainTitle')
            
        if len(texts) > 0:
            sprite = Sprite(texts[0].render(message, 1, (255, 255, 0)))
            animation = Animation(sprite)
            animation.newPos((self.width / 2 - sprite.w / 2), (self.height / 2 - sprite.h / 2) + 60, sprite.w, sprite.h, 0)
            animation.newPos((self.width / 2 - sprite.w / 2), (self.height / 2 - sprite.h / 2) + 60, sprite.w, sprite.h, 50, self.asyncChangeText)
                
            l.removeAnimation('info')
            l.addAnimation('info', animation)
    
    def partieSolo(self, e):
        self.nt = True
          
    def statusText(self, l):
        texts = l.getFont('mainTitle')
        
        # PLayer 1 ( Down )
        if len(texts) > 0:
            sprite = Sprite(texts[0].render("VIE: " + str(self.player1.health) +  "/30", 1, (255, 255, 0)))
            spriteBis = Sprite(texts[0].render("MANA: " + str(self.player1.mana) +  "/10", 1, (255, 255, 0)))
            spriteTer = Sprite(texts[0].render("" + str(self.player1.name) +  "", 1, (255, 255, 0)))
            
            animation = Animation(sprite)
            animationBis = Animation(spriteBis)
            animationTer = Animation(spriteTer)
            
            animation.newPos(self.width - (sprite.w / 2) - 10, (self.height / 2 - sprite.h / 2) - 10 - (sprite.h / 2), sprite.w / 2, sprite.h / 2, 0)
            animationBis.newPos(self.width - (sprite.w / 2) - 10, (self.height / 2 - sprite.h / 2), sprite.w / 2, sprite.h / 2, 0)
            animationTer.newPos(self.width - (sprite.w / 2) - 10, (self.height / 2 - sprite.h / 2) - (10 - (sprite.h / 2) * 2), sprite.w / 2, sprite.h / 2, 0)
            
            l.removeAnimation('infoVieP1')
            l.addAnimation('infoVieP1', animation, level=5)
            
            l.removeAnimation('infoManaP1')
            l.addAnimation('infoManaP1', animationBis, level=5)
            
            l.removeAnimation('infoNameP1')
            l.addAnimation('infoNameP1', animationTer, level=5)
        
        # PLayer 1 ( UP )
        if len(texts) > 0:
            sprite = Sprite(texts[0].render("VIE: " + str(self.player2.health) +  "/30", 1, (255, 255, 0)))
            spriteBis = Sprite(texts[0].render("MANA: " + str(self.player2.mana) +  "/10", 1, (255, 255, 0)))
            spriteTer = Sprite(texts[0].render("" + str(self.player2.name) +  "", 1, (255, 255, 0)))
            
            animation = Animation(sprite)
            animationBis = Animation(spriteBis)
            animationTer = Animation(spriteTer)
            
            animation.newPos(10, (self.height / 2 - sprite.h / 2) - 10 - (sprite.h / 2), sprite.w / 2, sprite.h / 2, 0)
            animationBis.newPos(10, (self.height / 2 - sprite.h / 2), sprite.w / 2, sprite.h / 2, 0)
            animationTer.newPos(10, (self.height / 2 - sprite.h / 2) - (10 - (sprite.h / 2) * 2), sprite.w / 2, sprite.h / 2, 0)
            
            l.removeAnimation('infoVieP2')
            l.addAnimation('infoVieP2', animation, level=5)
            
            l.removeAnimation('infoManaP2')
            l.addAnimation('infoManaP2', animationBis, level=5)
            
            l.removeAnimation('infoNameP2')
            l.addAnimation('infoNameP2', animationTer, level=5)
        
        selection = l.getAnimation('pioche1')
        if len(selection) > 0:
            selection[0].newPos(self.width - 200, self.height / 2 - 105 - 110, 75, 105, 0, None)
        
        selection = l.getAnimation('pioche2')
        if len(selection) > 0:
            selection[0].newPos(self.width - 200, self.height / 2 + 105, 75, 105, 0, None)
    
    def quitterCallBack(self, nom):
        self.ReturnScene = None
    
    def retourCallBack(self, nom):
        from scene.MainScene import MainScene
        self.ReturnScene = MainScene(self.loader)
    
    def updateMain(self, e, l):
        x = 10
        y = 10
        for cardUpdateEnemy in self.cardEnemy:
            if self.lastAnimCard != cardUpdateEnemy:
                cardUpdateEnemy.update(e, l)
                cardUpdateEnemy.updateResize(self.width, self.height)
                cardUpdateEnemy.setPosition(x, y, 0)
                x += cardUpdateEnemy.width + 5
        
        x = self.width - 85
        y = self.height - 115
        for cardUpdatePlayer in self.cardPlayer:
            if self.lastAnimCard != cardUpdatePlayer:
                cardUpdatePlayer.update(e, l)
                cardUpdatePlayer.updateResize(self.width, self.height)
                cardUpdatePlayer.setPosition(x, y, 0)
                x -= cardUpdatePlayer.width + 5
        
        self.statusText(l)
    
    def update(self, e, l):
        '''
        @param e: le gestionnaire d'événement
        @param l: le gestionnaire d'image
        @return: Scene à renvoyer
        '''
        self.btnPasser.update(e, l)
        
        if (e.keyboard[pygame.K_ESCAPE]):
            e.keyboard[pygame.K_ESCAPE] = False
            self.retourCallBack('')
            self.loader.clearFont()
        
        if self.action == 0:
            #Get name and random begin
            print("Choix du nom ...")
            print("Choix du joueur commençant ...")
            self.changeText(l, "" + self.player1.name + " à vous !")
            self.actionCallBack = True
            self.action = 1
        elif self.action == 1:
            if self.actionCallBack == False:
                self.animDeckPlayer()
                self.action = 2
                self.actionCallBack = True
        elif self.action == 2:
            if self.actionCallBack == False:
                self.action = 10
                
        elif self.action == 10:
            # Joueur 1 sur joueur 2
            if e.keyboard[pygame.K_v] or self.nt:
                self.nt = False
                e.keyboard[pygame.K_v] = False
                self.changeText(l, "" + self.player2.name + " à vous !")
                self.action = 11
                self.actionCallBack = True
        elif self.action == 11:
            if self.actionCallBack == False:
                self.animDeckEnemy()
                self.action = 12
                self.actionCallBack = True
        elif self.action == 12:
            if self.actionCallBack == False:
                self.action = 20
                
        elif self.action == 20:
            # Joueur 2 sur joueur 1
            if e.keyboard[pygame.K_v] or self.nt:
                self.nt = False
                e.keyboard[pygame.K_v] = False
                self.changeText(l, "" + self.player1.name + " à vous !")
                self.actionCallBack = True
                self.action = 30
        elif self.action == 30:
            # reset
            
            self.tour += 1
            print("Tour passé : " + str(self.tour))
            self.player1.nextTour(self.tour)
            self.player2.nextTour(self.tour)
            
            self.changeText(l, "" + self.player1.name + " à vous !")
            self.actionCallBack = True
            self.action = 1
        elif self.action == 40:
            # Fin de partie
            pass
        elif self.action == 50:
            self.retourCallBack('')
            
        self.updateMain(e, l)
            
        if (e.quit):
            e.quit = True
            self.retourCallBack('')
            self.loader.clearFont()
        
        return self.ReturnScene
    
    def resizeWindow(self, l, w, h):
        self.width = w
        self.height = h
        
        backgrounds = l.getAnimation('bg')
        if len(backgrounds) > 0:
            backgrounds[0].newPos(0, 0, self.width, self.height, 0)
        
        self.btnPasser.resizeWindow(l, w, h)
        
        animation = l.getAnimation('title')
        if len(animation) > 0:
            animation[0].newPos((self.width / 2 - animation[0].sprite.w / 2), 30, animation[0].sprite.w, animation[0].sprite.h, 0)
        
        self.updateMain(None, l)
Beispiel #8
0
class GameScene(Scene):
    def _start(self):
        """
        Init and start new game scene
        :return: None
        """
        self.tileset = self.manager.get_image("tileset.png")
        self.main_theme_music = self.manager.get_music("main-theme.ogg")
        self.explosion_sound = self.manager.get_sound("boom.ogg")

        self.width, self.height = pygame.display.get_surface().get_size()
        self.track = Track()
        self.obstacle = Obstacle(self.track)
        self.player = Player(self.track)
        self.player.attach()
        self.explosion_sprite_size = 192
        self.explosion_speed = 4
        self.explosion = Animation(self.manager.get_image("explosion.png"),
                                   self.explosion_sprite_size,
                                   self.explosion_sprite_size,
                                   self.explosion_speed)
        self.is_explosion_started = False
        self.settings = Settings()
        self.font = pygame.font.SysFont("Monospace",
                                        40,
                                        bold=False,
                                        italic=False)
        self.calculate_tile_size()
        self.make_threads()

    def make_threads(self):
        """
        Start threads to change game state
        :return: None
        """
        threading.Thread(target=self.update_track).start()
        threading.Thread(target=self.update_move).start()
        if self.settings['music']:
            self.main_theme_music.play()

    def update_track(self):
        """
        Updating track for next game state
        :return: None
        """
        while not self.is_end():
            if not self.obstacle.wait:
                self.obstacle.attach()
            self.obstacle.wait = OBSTACLE_WAIT_FOR_NEXT if not self.obstacle.wait else self.obstacle.wait - 1

            if self.player.is_dead:
                ScoreScene.save(self.player.score)
                self.is_explosion_started = True
                self.player.detach()
                self.explosion.start()
                if self.settings['music']:
                    self.explosion_sound.play()
                break
            self.player.detach()
            self.track.move()
            self.player.attach()
            self.player.score += 1
            if self.player.score % (SPEED_INCREASE_SCORE *
                                    self.track.level) == 0:
                self.track.speed += 1
            if self.player.score % (LEVEL_INCREASE_SCORE *
                                    self.track.level) == 0:
                self.track.level += 1
                self.player.lives_count = int(self.player.lives_count *
                                              PLAYER_LIVES_INCREASE)
                self.track.speed = self.track.level

            track_sleep_time = TRACK_MOVE_SLEEP_TIME / self.track.get_speed()
            time.sleep(track_sleep_time)

    def update_move(self):
        """
        Update player move, handles player position on track
        :return: None
        """
        while not self.is_end():
            if self.player.is_dead:
                break
            self.player.move()
            time.sleep(PLAYER_MOVE_SLEEP_TIME)

    def _event(self, event):
        """
        Make event handle
        :param event: any occurred event
        :return: None
        """
        for e in event.get():
            if e.type == pygame.KEYDOWN:
                if e.key == pygame.K_p:
                    self.set_next_scene("pause")
                    self.the_end()
                elif e.key == pygame.K_ESCAPE:
                    ScoreScene.save(self.player.score)
                    self.set_next_scene("menu")
                    self.the_end()
                elif e.key == pygame.K_LEFT:
                    self.player.direction = "left"
                    self.player.move()
                elif e.key == pygame.K_RIGHT:
                    self.player.direction = "right"
                    self.player.move()
                elif e.key == pygame.K_UP:
                    self.track.speed += 1
                elif e.key == pygame.K_DOWN:
                    self.track.speed -= 1
            elif e.type == pygame.KEYUP:
                self.player.direction = None

    def _update(self, dt):
        """
        Update scene by time
        :param dt: time interval pass from previous call
        :return: None
        """
        if self.is_explosion_started:
            self.explosion.update(dt)
            if not self.explosion.is_start() and self.player.is_dead:
                self.set_next_scene("game_over")
                self.the_end()

    def _draw(self, dt):
        """
        Redraw game by current status
        :param dt: time interval pass from previous call
        :return: None
        """
        self.display.fill(BACKGROUND_COLOR)
        self.draw_field()
        self.draw_score()
        if self.explosion.is_start():
            player_center = [
                x - int(self.explosion_sprite_size / 2)
                for x in self.player.get_center(self.tile_size)
            ]
            self.display.blit(self.explosion.sprite, player_center,
                              self.explosion.get_coords())

    def the_end(self):
        self.main_theme_music.stop()
        super().the_end()

    def calculate_tile_size(self):
        field_width = self.width / 2
        field_height = self.height
        tile_height = field_height / self.track.tiles_y
        tile_width = field_width / self.track.tiles_x
        self.tile_size = int(
            tile_width if tile_height > tile_width else tile_height)
        self.scaled_tile = pygame.transform.scale(
            self.tileset, (self.tile_size * TILES_COUNT, self.tile_size))

    def draw_field(self):
        margin = 1
        for x in range(self.track.tiles_x):
            for y in range(self.track.tiles_y):
                # Draw tile in (x,y)
                # get rect() area; select tile from tileset
                destination = Rect(x * self.tile_size, y * self.tile_size,
                                   self.tile_size, self.tile_size)
                src = Rect(self.track.tiles[x][y] * self.tile_size, 0,
                           self.tile_size - margin, self.tile_size - margin)
                self.display.blit(self.scaled_tile, destination, src)

    def draw_score(self):
        x = self.width / 2 + self.tile_size
        y = self.tile_size
        self.display.blit(
            self.font.render("Счёт: " + str(self.player.score), True,
                             (0, 0, 0)), (x, y))
        self.display.blit(
            self.font.render("Скорость: " + str(self.track.speed), True,
                             (0, 0, 0)), (x, y * 2))
        self.display.blit(
            self.font.render("Жизней: " + str(self.player.lives_count), True,
                             (0, 0, 0)), (x, y * 3))
        self.display.blit(
            self.font.render("Уровень: " + str(self.track.level), True,
                             (0, 0, 0)), (x, y * 4))
Beispiel #9
0
class Area(object):
    '''
    Terrain du jeux
    '''

    def __init__(self, namePlayer1, namePlayer2):
        '''
        Constructor
        @param namePlayer1: Nom du joueur 1
        @param namePlayer2: Nom du joueur 2
        '''
        self.tour = 1

        self.pioche = Pioche()
        deckPlayer1 = Deck("deck1", self.pioche.getDecks("deck1"))
        deckPlayer2 = Deck("deck1", self.pioche.getDecks("deck2"))
        
        self.player1 = Player(1, namePlayer1, deckPlayer1)
        self.player2 = Player(2, namePlayer2, deckPlayer2)
    
    def inputAction(self, message):
        '''
        Demande de saisie utilisateur
        @param message: prompt
        @return: int 
        '''
        ID = -1
        try:
            ID = input(message + "[int]# ")
            ID = int(ID)
        except EOFError:
            print("Saisie incorrecte EOFError=")
            ID = -1
        except NameError:
            print("Saisie incorrecte NameError")
            ID = -1
        except ValueError:
            print("Saisie incorrecte ValueError")
            ID = -1
        return ID
    
    def gameLoop(self):
        '''
        Boucle du jeux
        '''
        stop = False

        while stop == False:
            
            if self.player1.health <= 0:
                print(self.player1.name + " a perdu et " + self.player2.name + " a GAGNER !!!!")
                stop = True
            if self.player2.health <= 0:
                print(self.player2.name + " a perdu et " + self.player1.name + " a GAGNER !!!!")
                stop = True 
            
            self.playerTurn_v2(self.player1, self.player2)
            self.playerTurn_v2(self.player2, self.player1)
            
            self.tour = self.tour + 1
            
            self.player1.nextTour(self.tour)
            self.player2.nextTour(self.tour)
            
            print("Tous le monde Pioche une carte")
            
            try:
                self.player1.piocheCarte()
            except GameException as e:
                print(self.player1.name + " " + str(e))
            try:
                self.player2.piocheCarte()
            except GameException as e:
                print(self.player2.name + " " + str(e))
    
    def gameLoopNetworkHost(self, host, conn):
        '''
        Boucle du jeux en réseau pour l'host
        '''
        
        stop = False

        while stop == False:
            
            if self.player1.health <= 0:
                print(self.player1.name + " a perdu et " + self.player2.name + " a GAGNER !!!!")
                stop = True
            if self.player2.health <= 0:
                print(self.player2.name + " a perdu et " + self.player1.name + " a GAGNER !!!!")
                stop = True 
            
            self.playerTurn_v2(self.player1, self.player2)
            self = host.run(self, conn)
            
            
            self.tour = self.tour + 1
            
            self.player1.nextTour(self.tour)
            self.player2.nextTour(self.tour)
            
            print("Tous le monde Pioche une carte")
            
            try:
                self.player1.piocheCarte()
            except GameException as e:
                print(self.player1.name + " " + str(e))
            try:
                self.player2.piocheCarte()
            except GameException as e:
                print(self.player2.name + " " + str(e))
        host.close(conn)
    
    def gameLoopNetworkClient(self):
        self.playerTurn_v2(self.player2, self.player1)
        return self
    
    
    def playerTurn_v2(self, player, ennemy):
        '''
        Les interaction du joueur pendant le tour
        @param player: Joueur
        @param ennemy: Joueur adverse
        '''
        validator = True
        while validator:
            print(self)
            try:
                ID_attack = random.randint(1,len(self.player.hand))
                
                if player.isCarteServant(ID_attack):
                        # Si c'est une carte d'invocation des serviteur
                        player.invoke(ID_attack)
                        validator = self.verifActionJoueur(player)
                else:
                    #Si ce n'est pas une carte sort
                    ID_target = random.randint(1,len(self.enemy.fields))
                    player.war(ID_attack, ID_target, ennemy)
                    validator = self.verifActionJoueur(player)
            except GameException as e:
                print(e)
        
    def playerTurn(self, player, ennemy):
        '''
        Action du joueur
        @param player: Joueur
        @param ennemy: Joueur adverse
        '''
        validator = True
        
        while validator:
            print(self.toString())
            
            ID = random.randint(1,len(self.player.hand))
            
            elif self.isPlayer(ID):
                # Si le joueur a choisie lui meme
                if int(player.mana) >= 2:
                    ID_target = random.randint(1,len(self.enemy.fields))
                    player.fight(ID_target, ennemy)
                    validator = self.verifActionJoueur(player)
                else:
                    print(player.name + " : Je n'ai pas suffisamment de mana")
            elif self.isSpell(ID):
                # Si le joueur choisie un sort
                try:
                    ID_target = random.randint(1,len(self.enemy.fields))
                    player.useCarteSpell(ID, ID_target, ennemy)
                    validator = self.verifActionJoueur(player)
                except GameException as e:
                    print(e)
            elif player.isCarteServant(ID):
                # Si le joueur a choisie d'invoquer un serviteur
                try:
                    player.invoke(ID)
                    validator = self.verifActionJoueur(player)
                except GameException as e:
                    print(e)
Beispiel #10
0
            if input == "d": debug.set_trace()
            elif input == "f": slow = False
        if not result is False: return result
    except:
        debug.set_trace()

dump = replaydump.ReplayDump(replayfile, False)

sserver = dump.read()
seed = dump.read()
player1_name = dump.read()
my_deck = dump.read()
player2_name = dump.read()
other_deck = dump.read()

player1 = Player(player1_name, my_deck)
player2 = Player(player2_name, other_deck)
player1.dirty_input = userinput
player2.dirty_input = userinput

# Choose starting player
random.seed(seed)

dispatcher.reset()
Keeper.init([player1, player2])

# This is hacky
replaydump.players = dict([(player.name,player) for player in [player1, player2]])
replaydump.stack = Keeper.stack

msg = Keeper.start()
Beispiel #11
0
        seed = dump_to_replay.read()
        player1 = dump_to_replay.read()
        my_deck = dump_to_replay.read()
        player2 = dump_to_replay.read()
        other_deck = dump_to_replay.read()
        input = replayInput
    else:
        dump_to_replay = replaydump.ReplayDump(filename=replay_file, save=True)
        seed = time.time()
        player1 = conf.get("main", "playername")
        player2 = conf.get("solitaire", "playername")
        my_deck, sideboard = read_deckfile(conf.get("main", "deckfile"))
        other_deck, other_sideboard = read_deckfile(
            conf.get("solitaire", "deckfile"))
        input = playerInput

        dump_to_replay.write(True)
        dump_to_replay.write(seed)
        for name, deck in [(player1, my_deck), (player2, other_deck)]:
            dump_to_replay.write(name)
            dump_to_replay.write(deck)

    players = [Player(player1, my_deck), Player(player2, other_deck)]
    random.seed(seed)
    for player in players:
        player.dirty_input = input
        replaydump.players[player.name] = player

    Keeper.init(players)
    Keeper.start()
Beispiel #12
0
    def __init__(self):
        self.player = Player()
        self.oldText = ""

        self.editWindow = tk.Tk()
        self.editWindow.title = "Who Gets The Million - EDITOR"

        self.menuFrame = tk.Frame(self.editWindow)
        self.openButton = tk.Button(self.menuFrame, text="OPEN")
        self.saveButton = tk.Button(self.menuFrame, text="SAVE")
        self.newButton = tk.Button(self.menuFrame, text="NEW COLLECTION")

        self.poolFrame = tk.Frame(self.editWindow)
        self.currentPool = tk.StringVar(self.editWindow)
        self.currentPool.set("Create new")
        self.currentPool.trace("w", self.changedPool)
        self.poolDropdownList = list(self.player.getPools())
        self.poolDropdownList.append("Create new")
        self.poolOptions = tk.OptionMenu(self.poolFrame, self.currentPool,
                                         *self.poolDropdownList)
        self.questionList = tk.Listbox(self.poolFrame)
        self.newQuestionButton = tk.Button(self.poolFrame,
                                           text="New Question",
                                           command=self.appenQuestion)
        self.editQuestionButton = tk.Button(self.poolFrame,
                                            text="EDIT",
                                            command=self.loadQuestion)

        self.editPanel = QuestionEditPanel(self.editWindow, "OK", "50/50")

        # self.questionFrame = tk.Frame(self.editWindow)
        # self.currentText = tk.StringVar()
        # self.textLabel = tk.Label(self.questionFrame, text="Text:")
        # self.textField = tk.Entry(self.questionFrame, textvariable=self.currentText)

        # self.currentAText = tk.StringVar()
        # self.answerALabel = tk.Label(self.questionFrame, text="A:")
        # self.answerAField = tk.Entry(self.questionFrame, textvariable=self.currentAText)
        # self.answerACorrect = tk.Checkbutton(self.questionFrame, text=corr)
        # self.answerAFifty = tk.Checkbutton(self.questionFrame, text=ff)
        #
        # self.currentBText = tk.StringVar()
        # self.answerBLabel = tk.Label(self.questionFrame, text="B:")
        # self.answerBField = tk.Entry(self.questionFrame, textvariable=self.currentBText)
        # self.answerBCorrect = tk.Checkbutton(self.questionFrame, text=corr)
        # self.answerBFifty = tk.Checkbutton(self.questionFrame, text=ff)
        #
        # self.currentCText = tk.StringVar()
        # self.answerCLabel = tk.Label(self.questionFrame, text="C:")
        # self.answerCField = tk.Entry(self.questionFrame, textvariable=self.currentCText)
        # self.answerCCorrect = tk.Checkbutton(self.questionFrame, text=corr)
        # self.answerCFifty = tk.Checkbutton(self.questionFrame, text=ff)
        #
        # self.currentDText = tk.StringVar()
        # self.answerDLabel = tk.Label(self.questionFrame, text="D:")
        # self.answerDField = tk.Entry(self.questionFrame, textvariable=self.currentDText)
        # self.answerDCorrect = tk.Checkbutton(self.questionFrame, text=corr)
        # self.answerDFifty = tk.Checkbutton(self.questionFrame, text=ff)
        #
        # self.buttonFrame = tk.Frame(self.questionFrame)
        # self.applyButton = tk.Button(self.buttonFrame, text="APPLY", command=self.applyQuestion)
        # self.deleteButton = tk.Button(self.buttonFrame, text="DELETE")

        # Setup window
        self.newButton.pack(side=tk.LEFT)
        self.openButton.pack(side=tk.LEFT)
        self.saveButton.pack(side=tk.LEFT)
        self.menuFrame.pack(side=tk.TOP, anchor=tk.W)

        self.poolOptions.pack(side=tk.TOP, fill=tk.X)
        self.questionList.pack(side=tk.TOP, fill=tk.X)
        self.newQuestionButton.pack(side=tk.LEFT, anchor=tk.SW, fill=tk.X)
        self.editQuestionButton.pack(side=tk.RIGHT, anchor=tk.SE, fill=tk.X)
        self.poolFrame.pack(side=tk.LEFT)

        # self.textLabel.grid(row=0)
        # self.answerALabel.grid(row=1)
        # self.answerBLabel.grid(row=2)
        # self.answerCLabel.grid(row=3)
        # self.answerDLabel.grid(row=4)
        # # self.textField.grid(row=0, column=1)
        # self.answerAField.grid(row=1, column=1)
        # self.answerBField.grid(row=2, column=1)
        # self.answerCField.grid(row=3, column=1)
        # self.answerDField.grid(row=4, column=1)
        # self.answerACorrect.grid(row=1, column=2)
        # self.answerBCorrect.grid(row=2, column=2)
        # self.answerCCorrect.grid(row=3, column=2)
        # self.answerDCorrect.grid(row=4, column=2)
        # self.answerAFifty.grid(row=1, column=3)
        # self.answerBFifty.grid(row=2, column=3)
        # self.answerCFifty.grid(row=3, column=3)
        # self.answerDFifty.grid(row=4, column=3)
        #
        # self.applyButton.pack(side=tk.LEFT, anchor=tk.W, fill=tk.X)
        # self.deleteButton.pack(side=tk.RIGHT, anchor=tk.E, fill=tk.X)
        # self.buttonFrame.grid(row=5, columnspan=4)
        #
        # self.questionFrame.pack(side=tk.RIGHT, anchor=tk.NW)

        # start looping
        self.editWindow.mainloop()
Beispiel #13
0
class EditorUi:
    def __init__(self):
        self.player = Player()
        self.oldText = ""

        self.editWindow = tk.Tk()
        self.editWindow.title = "Who Gets The Million - EDITOR"

        self.menuFrame = tk.Frame(self.editWindow)
        self.openButton = tk.Button(self.menuFrame, text="OPEN")
        self.saveButton = tk.Button(self.menuFrame, text="SAVE")
        self.newButton = tk.Button(self.menuFrame, text="NEW COLLECTION")

        self.poolFrame = tk.Frame(self.editWindow)
        self.currentPool = tk.StringVar(self.editWindow)
        self.currentPool.set("Create new")
        self.currentPool.trace("w", self.changedPool)
        self.poolDropdownList = list(self.player.getPools())
        self.poolDropdownList.append("Create new")
        self.poolOptions = tk.OptionMenu(self.poolFrame, self.currentPool,
                                         *self.poolDropdownList)
        self.questionList = tk.Listbox(self.poolFrame)
        self.newQuestionButton = tk.Button(self.poolFrame,
                                           text="New Question",
                                           command=self.appenQuestion)
        self.editQuestionButton = tk.Button(self.poolFrame,
                                            text="EDIT",
                                            command=self.loadQuestion)

        self.editPanel = QuestionEditPanel(self.editWindow, "OK", "50/50")

        # self.questionFrame = tk.Frame(self.editWindow)
        # self.currentText = tk.StringVar()
        # self.textLabel = tk.Label(self.questionFrame, text="Text:")
        # self.textField = tk.Entry(self.questionFrame, textvariable=self.currentText)

        # self.currentAText = tk.StringVar()
        # self.answerALabel = tk.Label(self.questionFrame, text="A:")
        # self.answerAField = tk.Entry(self.questionFrame, textvariable=self.currentAText)
        # self.answerACorrect = tk.Checkbutton(self.questionFrame, text=corr)
        # self.answerAFifty = tk.Checkbutton(self.questionFrame, text=ff)
        #
        # self.currentBText = tk.StringVar()
        # self.answerBLabel = tk.Label(self.questionFrame, text="B:")
        # self.answerBField = tk.Entry(self.questionFrame, textvariable=self.currentBText)
        # self.answerBCorrect = tk.Checkbutton(self.questionFrame, text=corr)
        # self.answerBFifty = tk.Checkbutton(self.questionFrame, text=ff)
        #
        # self.currentCText = tk.StringVar()
        # self.answerCLabel = tk.Label(self.questionFrame, text="C:")
        # self.answerCField = tk.Entry(self.questionFrame, textvariable=self.currentCText)
        # self.answerCCorrect = tk.Checkbutton(self.questionFrame, text=corr)
        # self.answerCFifty = tk.Checkbutton(self.questionFrame, text=ff)
        #
        # self.currentDText = tk.StringVar()
        # self.answerDLabel = tk.Label(self.questionFrame, text="D:")
        # self.answerDField = tk.Entry(self.questionFrame, textvariable=self.currentDText)
        # self.answerDCorrect = tk.Checkbutton(self.questionFrame, text=corr)
        # self.answerDFifty = tk.Checkbutton(self.questionFrame, text=ff)
        #
        # self.buttonFrame = tk.Frame(self.questionFrame)
        # self.applyButton = tk.Button(self.buttonFrame, text="APPLY", command=self.applyQuestion)
        # self.deleteButton = tk.Button(self.buttonFrame, text="DELETE")

        # Setup window
        self.newButton.pack(side=tk.LEFT)
        self.openButton.pack(side=tk.LEFT)
        self.saveButton.pack(side=tk.LEFT)
        self.menuFrame.pack(side=tk.TOP, anchor=tk.W)

        self.poolOptions.pack(side=tk.TOP, fill=tk.X)
        self.questionList.pack(side=tk.TOP, fill=tk.X)
        self.newQuestionButton.pack(side=tk.LEFT, anchor=tk.SW, fill=tk.X)
        self.editQuestionButton.pack(side=tk.RIGHT, anchor=tk.SE, fill=tk.X)
        self.poolFrame.pack(side=tk.LEFT)

        # self.textLabel.grid(row=0)
        # self.answerALabel.grid(row=1)
        # self.answerBLabel.grid(row=2)
        # self.answerCLabel.grid(row=3)
        # self.answerDLabel.grid(row=4)
        # # self.textField.grid(row=0, column=1)
        # self.answerAField.grid(row=1, column=1)
        # self.answerBField.grid(row=2, column=1)
        # self.answerCField.grid(row=3, column=1)
        # self.answerDField.grid(row=4, column=1)
        # self.answerACorrect.grid(row=1, column=2)
        # self.answerBCorrect.grid(row=2, column=2)
        # self.answerCCorrect.grid(row=3, column=2)
        # self.answerDCorrect.grid(row=4, column=2)
        # self.answerAFifty.grid(row=1, column=3)
        # self.answerBFifty.grid(row=2, column=3)
        # self.answerCFifty.grid(row=3, column=3)
        # self.answerDFifty.grid(row=4, column=3)
        #
        # self.applyButton.pack(side=tk.LEFT, anchor=tk.W, fill=tk.X)
        # self.deleteButton.pack(side=tk.RIGHT, anchor=tk.E, fill=tk.X)
        # self.buttonFrame.grid(row=5, columnspan=4)
        #
        # self.questionFrame.pack(side=tk.RIGHT, anchor=tk.NW)

        # start looping
        self.editWindow.mainloop()

    def loadQuestionList(self, difficultie=0):
        self.questionList.delete(0, tk.END)
        questions = self.player.collection.getQuestions(difficultie)
        for i, e in enumerate(questions):
            self.questionList.insert(i, e["text"])

    def changedPool(self, *args):
        print(self.currentPool.get())
        if self.currentPool.get() == "Create new":
            self.poolDropdownList.append(str(len(self.poolDropdownList) - 1))
            self.currentPool.set(str(len(self.poolDropdownList) - 2))
            self.updateDropdown()
        else:
            pass
            # self.loadQuestionList(int(self.currentPool.get()))

    def updateDropdown(self):
        menu = self.poolOptions["menu"]
        menu.delete(0, tk.END)
        # print(self.poolDropdownList)
        for i in self.poolDropdownList:
            # print("Set {}".format(i))
            menu.add_command(
                label=str(i),
                command=lambda value=str(i): self.currentPool.set(value))

    def appenQuestion(self):
        self.player.collection.append(int(self.currentPool.get()),
                                      "New question")
        self.loadQuestionList(int(self.currentPool.get()))

    def loadQuestion(self):
        q = self.player.collection.getQuestionByText(
            int(self.currentPool.get()),
            self.questionList.get(self.questionList.curselection()))
        # print("q = {}".format(q))
        self.oldText = q["text"]
        self.currentText.set(q["text"])
        self.currentAText.set(q["a"])
        self.currentBText.set(q["b"])
        self.currentCText.set(q["c"])
        self.currentDText.set(q["d"])

    def applyQuestion(self):
        self.player.collection.editQuestionByText(self.oldText,
                                                  self.currentText.get(),
                                                  self.currentAText.get(),
                                                  self.currentBText.get(),
                                                  self.currentCText.get(),
                                                  self.currentDText.get(),
                                                  self.mkCorrect(),
                                                  self.mkFiftyFifty())

    def mkCorrect(self):
        pass

    def mkFiftyFifty(self):
        pass
Beispiel #14
0
class Area(object):
    '''
    Terrain du jeux
    '''

    def __init__(self, namePlayer1, namePlayer2):
        '''
        Constructor
        @param namePlayer1: Nom du joueur 1
        @param namePlayer2: Nom du joueur 2
        '''
        self.tour = 1

        self.pioche = Pioche()
        deckPlayer1 = Deck("deck1", self.pioche.getDecks("deck1"))
        deckPlayer2 = Deck("deck1", self.pioche.getDecks("deck2"))
        
        self.player1 = Player(1, namePlayer1, deckPlayer1)
        self.player2 = Player(2, namePlayer2, deckPlayer2)
    
    def inputAction(self, message):
        '''
        Demande de saisie utilisateur
        @param message: prompt
        @return: int 
        '''
        ID = -1
        try:
            ID = input(message + "[int]# ")
            ID = int(ID)
        except EOFError:
            print("Saisie incorrecte EOFError=")
            ID = -1
        except NameError:
            print("Saisie incorrecte NameError")
            ID = -1
        except ValueError:
            print("Saisie incorrecte ValueError")
            ID = -1
        return ID
    
    def gameLoop(self):
        '''
        Boucle du jeux
        '''
        stop = False

        while stop == False:
            
            if self.player1.health <= 0:
                print(self.player1.name + " a perdu et " + self.player2.name + " a GAGNER !!!!")
                stop = True
            if self.player2.health <= 0:
                print(self.player2.name + " a perdu et " + self.player1.name + " a GAGNER !!!!")
                stop = True 
            
            self.playerTurn_v2(self.player1, self.player2)
            #self.playerTurnIA(self.player2, self.player1)
            self.playerTurnIA(self.player2, self.player1)
            self.tour = self.tour + 1
            
            self.player1.nextTour(self.tour)
            self.player2.nextTour(self.tour)
            
            print("Tous le monde Pioche une carte")
            
            try:
                self.player1.piocheCarte()
            except GameException as e:
                print(self.player1.name + " " + str(e))
            try:
                self.player2.piocheCarte()
            except GameException as e:
                print(self.player2.name + " " + str(e))
    
    def gameLoopNetworkHost(self, host, conn):
        '''
        Boucle du jeux en réseau pour l'host
        '''
        
        stop = False

        while stop == False:
            
            if self.player1.health <= 0:
                print(self.player1.name + " a perdu et " + self.player2.name + " a GAGNER !!!!")
                stop = True
            if self.player2.health <= 0:
                print(self.player2.name + " a perdu et " + self.player1.name + " a GAGNER !!!!")
                stop = True 
            
            self.playerTurn_v2(self.player1, self.player2)
            self = host.run(self, conn)
            
            
            self.tour = self.tour + 1
            
            self.player1.nextTour(self.tour)
            self.player2.nextTour(self.tour)
            
            print("Tous le monde Pioche une carte")
            
            try:
                self.player1.piocheCarte()
            except GameException as e:
                print(self.player1.name + " " + str(e))
            try:
                self.player2.piocheCarte()
            except GameException as e:
                print(self.player2.name + " " + str(e))
        host.close(conn)
    
    def gameLoopNetworkClient(self):
        self.playerTurn_v2(self.player2, self.player1)
        return self
    
    
    def playerTurn_v2(self, player, ennemy):
        '''
        Les interaction du joueur pendant le tour
        @param player: Joueur
        @param ennemy: Joueur adverse
        '''
        validator = True
        while validator:
            self.player1.enterrerServiteurs()
            self.player2.enterrerServiteurs()
            print(self)
            try:
                ID_attack = self.inputAction("<" + player.name + "> Id carte ou serviteur [passer=0]")
                
                if int(ID_attack) == 0:
                    # Si le joueur souhaite passer son tour
                    print(player.name + " passe son tour")
                    validator = False
                elif int(ID_attack) < 0:
                    print("Saisie incorrecte")
                else:
                    if player.isCarteServant(ID_attack):
                        # Si c'est une carte d'invocation des serviteur
                        player.invoke(ID_attack)
                        validator = self.verifActionJoueur(player)
                    else:
                        #Si ce n'est pas une carte sort
                        ID_target = self.inputAction(player.name + " : entrer de la cible [annuler=0]")
                        if int(ID_target) == 0:
                            pass
                        else:
                            player.war(ID_attack, ID_target, ennemy)
                            validator = self.verifActionJoueur(player)
                
            except GameException as e:
                print(e)
    
    def choiseTargetIA(self, ennemy):
        '''
        Choisie le cible a attaquer
        '''
        ID_Target = 2
        if len(ennemy.fields) > 0:
            for ID_serv in ennemy.fields:
                if ennemy.fields[ID_serv].camouflage != True:
                    ID_Target = ID_serv
        return ID_Target
    
    def playerTurnIA(self, player, ennemy):
        '''
        Action du joueur
        @param player: Joueur
        @param ennemy: Joueur adverse
        '''
        self.player1.enterrerServiteurs()
        self.player2.enterrerServiteurs()
        if len(player.fields):
            print("Attaques des serviteur")
            for ID_serv in player.fields:
                if player.fields[ID_serv].action == True:
                    ID_Target = self.choiseTargetIA(ennemy)
                    player.fields[ID_serv].fight(ID_Target, ennemy)
                    
        print("Attaques du joueur")
        ID_Carte = 0
        #go = False
        for carte in player.hand:
            if player.hand[carte].cost <= player.mana and player.isCarteServant(carte):
                print("IA choisie " + carte)
                ID_Carte = carte
                break
        if ID_Carte != 0:
            print("IA utilise " + carte)
            player.invoke(carte)
        
        ID_Carte = 0
        ID_Target = 0
        for carte in player.hand:
            if player.hand[carte].cost <= player.mana:
                #print(player.hand[carte])
                
                if player.isSpell(carte):
                    ID_Target = self.choiseTargetIA(ennemy)
                    ID_Carte = carte
        if ID_Target != 0:
            player.useCarteSpell(ID_Carte, ID_Target, ennemy)
            
            

            '''
            
            ID = self.inputAction("<" + player.name + "> Id carte ou serviteur [passer=0]")
            
            if int(ID) == 0:
                #Passer le tour
                validator = False
            elif self.isPlayer(ID):
                # Si le joueur a choisie lui meme
                if int(player.mana) >= 2:
                    ID_target = self.inputAction(player.name + " : entrer de la cible [passer=0]")
                    player.fight(ID_target, ennemy)
                    validator = self.verifActionJoueur(player)
                else:
                    print(player.name + " : Je n'ai pas suffisamment de mana")
            elif self.isSpell(ID):
                # Si le joueur choisie un sort
                try:
                    ID_target = self.inputAction(player.name + " : entrer de la cible [passer=0]")
                    player.useCarteSpell(ID, ID_target, ennemy)
                    validator = self.verifActionJoueur(player)
                except GameException as e:
                    print(e)
            elif player.isCarteServant(ID):
                # Si le joueur a choisie d'invoquer un serviteur
                try:
                    player.invoke(ID)
                    validator = self.verifActionJoueur(player)
                except GameException as e:
                    print(e)
            elif self.isServant(ID):
                try:
                    ID_target = self.inputAction(player.name + " : entrer de la cible (0 pour passer) ")
                    servant = player.getServiteur(ID)
                    servant.fight(ID_target, ennemy)
                    validator = self.verifActionJoueur(player)
                except GameException as e:
                    print(e)
            else:
                print("Saisie incorrecte ()")
                
            
            self.player1.enterrerServiteurs()
            self.player2.enterrerServiteurs()
        '''
    
    def playerTurn(self, player, ennemy):
        '''
        Action du joueur
        @param player: Joueur
        @param ennemy: Joueur adverse
        '''
        validator = True
        
        while validator:

            print(self.toString())
            
            ID = self.inputAction("<" + player.name + "> Id carte ou serviteur [passer=0]")
            
            if int(ID) == 0:
                #Passer le tour
                validator = False
            elif self.isPlayer(ID):
                # Si le joueur a choisie lui meme
                if int(player.mana) >= 2:
                    ID_target = self.inputAction(player.name + " : entrer de la cible [passer=0]")
                    player.fight(ID_target, ennemy)
                    validator = self.verifActionJoueur(player)
                else:
                    print(player.name + " : Je n'ai pas suffisamment de mana")
            elif self.isSpell(ID):
                # Si le joueur choisie un sort
                try:
                    ID_target = self.inputAction(player.name + " : entrer de la cible [passer=0]")
                    player.useCarteSpell(ID, ID_target, ennemy)
                    validator = self.verifActionJoueur(player)
                except GameException as e:
                    print(e)
            elif player.isCarteServant(ID):
                # Si le joueur a choisie d'invoquer un serviteur
                try:
                    player.invoke(ID)
                    validator = self.verifActionJoueur(player)
                except GameException as e:
                    print(e)
            elif self.isServant(ID):
                try:
                    ID_target = self.inputAction(player.name + " : entrer de la cible (0 pour passer) ")
                    servant = player.getServiteur(ID)
                    servant.fight(ID_target, ennemy)
                    validator = self.verifActionJoueur(player)
                except GameException as e:
                    print(e)
            else:
                print("Saisie incorrecte ()")
                
            
            self.player1.enterrerServiteurs()
            self.player2.enterrerServiteurs()
            
    def verifActionJoueur(self, joueur):
        '''
        Verifie si l'utilisateur peut encore faire des actions
        @param joueur: Le joueur
        '''
        flag = False
        if int(joueur.mana) > 0: # Si le joueur n'a plus de mana
            if joueur.action == True:
                flag = True
            
        
        for key in joueur.fields:
            if joueur.fields[key].action == True:
                flag = True
        
        return flag
    
    def toString(self):
        txt = "\n\n@@@@@@@@@@@@@@@ --------------- TOUR " + str(self.tour) + " --------------- @@@@@@@@@@@@@@@\n"
        txt += "ID=" + str(self.player1)
        txt += "ID=" + str(self.player2)
        return txt + "\n"
    
    def toString_v2(self):
        txt = "\n\n@@@@@@@@@@@@@@@ --------------- TOUR " + str(self.tour) + " --------------- @@@@@@@@@@@@@@@\n"
        txt += "ID=" + str(self.player1)
        txt += "ID=" + str(self.player2.ID) + ":" + str(self.player2.name) + ":[" + str(self.player2.mana) + "pm, " + str(self.player2.health) + "pv, a=" + str(self.player2.action) + "] "
        txt += " Fields :\n"
        for key in self.player2.fields:
            txt += "\t" + str(self.player2.fields[key]) + "\n"
        return txt + "}\n"
    
    def __str__(self):
        return self.toString_v2()
    
    def setPlayer1(self, player1):
        self.player1 = player1
        
    def setPlayer2(self, player2):
        self.player2 = player2
        
    def getPlayer1(self):
        return self.player1
    
    def getPlayer2(self):
        return self.player2
    
    def getTour(self):
        return self.tour