# -*- coding: cp1252 -*-
from Plate import *
import Player
import wxReversi
import wx
import random
import threading

__version__ = (1, 0, 2)
__build__ = (0, 0)
__date__ = (2008, 1, 15)
__author__ = ('Guillaume', 'Duriaud')



class Reversi:
    def __init__(self):
        """ Created: 2007.10.31 - Updated: """        
        self.plate = PLATEINIT[:]
        glovar['freemove'] = FREEMOVEINIT[:]
        glovar['platemove'] = PLATEMOVEINIT[:]
        self.player1 = Player.Player(self, 'black')
        self.player2 = Player.Player(self, 'white')
        self.playermain = self.player1
        self.player1.isWaiting = False
        self.wReversi = wxReversi.wxReversi(self)
        self.wReversi.Show()
        self.lastMove = -1

    def Initialize(self, black, white):
        """ Created: 2007.10.31 - Updated: 2007.11.27 """
        self.player1.endreflexion = True
        self.player2.endreflexion = True
        self.player1.endgame = True
        self.player2.endgame = True
        while self.player1.isWaiting: continue
        while self.player2.isWaiting: continue
##        self.player1.endreflexion = False
##        self.player2.endreflexion = False

        
        if black == 'player': self.player1 = Player.Player(self, 'black')
        else: self.player1 = Player.Computer(self, 'black')
        if white == 'player': self.player2 = Player.Player(self, 'white')
        else: self.player2 = Player.Computer(self, 'white')
        
        self.plate = PLATEINIT[:]
        glovar['freemove'] = FREEMOVEINIT[:]
        glovar['platemove'] = PLATEMOVEINIT[:]        
        
        self.playermain = self.player1
        if isinstance(self.player2, Player.Computer):
            self.player2.Initialize()
            threading.Thread(None, self.player2.Waiting, None).start()

        if isinstance(self.player1, Player.Computer):
            self.player1.Initialize()
            threading.Thread(None, self.player1.Play, None).start()        


    def ChangePlayerMain(self, n = 0):
        """ Created: 2007.10.31 - Updated: """
        if n == 2:
            self.EndGame()
            return
        ## On stoppe la réflexion de tout le monde
        self.player1.endreflexion = True
        self.player2.endreflexion = True
        while self.player1.isWaiting: continue
        while self.player2.isWaiting: continue
        self.player1.endreflexion = False
        self.player2.endreflexion = False


        ## On inverse les joueurs
        if self.playermain.joueur == 1: self.playermain = self.player2
        else: self.playermain = self.player1
            
        if DoitPasser(self.plate, self.playermain.joueur):
            return self.ChangePlayerMain(n + 1)


        ## On relance le jeu
        if self.playermain.joueur == 1:
            if isinstance(self.player2, Player.Computer):
                self.player2.Initialize()                
                threading.Thread(None, self.player2.Waiting, None).start()
            self.wReversi.timerBlack.Start(1000)
            self.wReversi.timerWhite.Start(1000)                            
            if isinstance(self.player1, Player.Computer):
                threading.Thread(None, self.player1.Play, None).start()
        else:
            if isinstance(self.player1, Player.Computer):
                self.player1.Initialize()            
                threading.Thread(None, self.player1.Waiting, None).start()
            self.wReversi.timerBlack.Start(1000)
            self.wReversi.timerWhite.Start(1000)                            

            if isinstance(self.player2, Player.Computer):
                threading.Thread(None, self.player2.Play, None).start()

    
    def EndGame(self):
        """ Created: 2007.10.31 - Updated: """
        sb, sw = Score(self.plate)
        wx.MessageBox('Le score est de ' + str(sb) + ' à ' + str(sw))
        

    
random.seed()
app = wx.PySimpleApp()
rev = Reversi()
app.MainLoop()
