示例#1
0
class Tests:
    def setup(self):
        self.b1 = Bateau.Croiseur(1, 1, True)
        self.b2 = Bateau.Escorteur(2, 5, False)
        self.b3 = Bateau.SousMarin(4, 2, False)  # Sous-Marin en plongée

        self.g1 = Grille(7, 9)

        # On ajoute 3 Bateaux...
        self.g1 += self.b1
        self.g1 += self.b2
        self.g1 += self.b3

    @with_setup(setup)
    def test_init(self):
        eq_(str(self.g1), 'Croiseur Escorteur Sous-marin ')

    @with_setup(setup)
    def test_est_touche(self):
        eq_(self.b1.est_touche(1, 1), 2)  # Première case touchée
        eq_(self.b1.est_touche(1, 1), 1)  # Case déjà touchée
        eq_(self.b1.est_touche(1, 2), 1)  # Croiseur déjà touché
        eq_(self.b1.est_touche(1, 3), 3)  # Croiseur coulé
        eq_(self.b3.est_touche(4, 2), 0)  # Sous-marin en plongée...

    @with_setup(setup)
    def test_coup(self):
        eq_(self.g1.coup(2, 5), 2)  # Première touche
        eq_(self.g1.coup(2, 5), 1)  # Déjà Touché
        eq_(self.g1.coup(3, 5), 3)  # Escorteur Coulé
        eq_(self.g1.coup(1, 4), 0)  # Dans l'eau
        eq_(str(self.g1), "Croiseur Sous-marin ")
示例#2
0
    def setup(self):
        self.b1 = Bateau.Croiseur(1, 1, True)
        self.b2 = Bateau.Escorteur(2, 5, False)
        self.b3 = Bateau.SousMarin(4, 2, False)  # Sous-Marin en plongée

        self.g1 = Grille(7, 9)

        # On ajoute 3 Bateaux...
        self.g1 += self.b1
        self.g1 += self.b2
        self.g1 += self.b3
示例#3
0
 def __init__(self, width, height):
     self.players = []
     self.width = width
     self.height = height
     self.grille = Grille(width, height)
     self.colors = [
         'red',
         'yellow',
         'green',
         'blue',
         'orange',
         'violet',
         'pink',
     ]
     self.turn = -1
示例#4
0
 def addGrille(self):
     if len(self.grillesToDraw) < 6:
         grille = Grille.Grille(9, 3, 0, 0, 300, 90, Loto_Case)
         LTO.Loto_Party.generateRandomContenuGrille(grille)
         self.grillesToDraw.append(grille)
     else:
         print("[ERROR] Cannot add another grille")
示例#5
0
 def handleDistribHtmlPage(self, htmlPage):
         euro7startRx = QRegExp("data-grid-id=\"(\\d*)\"")
         indexGrille = ""
         posi = 0
         while posi != -1 and indexGrille != self._gridList[self._indexGrille][0]:
             print "posi = %d" % posi
             print "indexGrille = %s" % indexGrille
             print "self._indexGrille = %s" % self._gridList[self._indexGrille][0]
             posi= euro7startRx.indexIn(htmlPage, posi+1)
             indexGrille = euro7startRx.cap(1)
         euro7TeamRx = QRegExp("<label for=\"[^\"]*\">([^<]*)<\/label>")
         self._grid = Grille()
         self._grid.setReturnRate(0.75)
         self._grid.setFirstRankRate(0.55)
         self._grid.setScndRankRate(0.45)
         jackpot = int(self._gridList[self._index][2])
         self._grid.setJackpot(jackpot)
         self._grid.setNbPlayers(jackpot)
         index_l = 0
         total = 0
         #size_l = 5
         i=0
         #try:
         if True:
             posi= euro7TeamRx.indexIn(htmlPage, posi)
             print "posi = %d" % posi
             while posi != -1 and i < self._gridSize:
                 i += 1
                 team1 = euro7TeamRx.cap(1)
                 print "team1 = %s" % team1
                 posi= euro7TeamRx.indexIn(htmlPage, posi+1)
                 posi= euro7TeamRx.indexIn(htmlPage, posi+1)
                 team2 = euro7TeamRx.cap(1)
                 print "indice %i" % i
                 print "team2 = %s" % team2
                 match = Match(team1 + " vs " + team2)
                 match.setTeam1(team1)
                 match.setTeam2(team2)
                 p1 = 0.33
                 pN = 0.33
                 p2 = 0.33
                 total = p1 + pN +p2
                 r1 = p1/total*100
                 r2 = p2/total*100
                 rN = pN/total*100
                 match.setRepartition(p1/total, pN/total, p2/total)
                 self._grid.addGame(match)
                 print "game added : %d" % i
                 posi= euro7TeamRx.indexIn(htmlPage, posi+1)
         #except:
                 #msg = QMessageBox()
                 #msg.setText("Loading page error")
                 #msg.exec_()
         #self.__workbook1.save(self.__outPutFileName)
         return
示例#6
0
class Jeu:

    def __init__(self):

        self.joueur1 = Joueur('Joueur')
        self.turn = True
        self.joueur2 = Joueur('Adversaire')
        self.grille = Grille()

    def start(self, listebateaux1, listebateau2):

        print('test')

        for i in range(len(listebateaux1)):

            self.joueur1.addbateau(listebateaux1[i])

        for i in range(len(listebateau2)):

            self.joueur2.addbateau(listebateau2[i])

        for i in range(len(self.joueur1.listeBateau) - 1):
            if (self.joueur1.listeBateau[i].getOrientation() == False):

                for j in range(self.joueur1.listeBateau[i].getLongueur()):

                    self.grille.set(Grille.UNDAMAGED_BOAT, int(self.joueur1.listeBateau[i].getCoordonneex() + j),
                                    int(self.joueur1.listeBateau[i].getCoordonneey()))

            elif(self.joueur1.listeBateau[i].getOrientation() == True):

                 for k in range(self.joueur1.listeBateau[i].getLongueur()):
                    self.grille.set(Grille.UNDAMAGED_BOAT, int(self.joueur1.listeBateau[i].getCoordonneex()),
                                    int(self.joueur1.listeBateau[i].getCoordonneey()) + k)


        print('fin start')
        self.play()

    def play(self):
        pass
示例#7
0
 def __init__(self):
         ReadLotoHandler.__init__(self)
         print "Loto 7"
         self._gridName = "Loto7"
         print "L7: %s" % str(self)
         self._bookUrl = QUrl("http://www.pronosoft.com/fr/concours/repartition_lotofoot_7.php")
         self._gridSize = 7
         self._grid = Grille()
         self._grid.setReturnRate(0.70)
         self._grid.setFirstRankRate(0.45)
         self._grid.setScndRankRate(0.55)
         self._grid.setThirdRankRate(0.00)
         return
 def handleDistribHtmlPage(self, htmlPage):
         self._grid = Grille()
         self._grid.setReturnRate(0.75)
         self._grid.setFirstRankRate(0.55)
         self._grid.setScndRankRate(0.45)
         jackpot = int(self._gridList[self._index][2]) / 0.75
         self._grid.setJackpot(jackpot)
         self._grid.setNbPlayers(jackpot)
         #print "handleDistribHtmlPage"
         #print htmlPage
         myParser = WSGridParser()
         myParser.html = filter(onlyascii, htmlPage)
         self.writeHtmlToFile(myParser.html)
         myParser.feed(myParser.html)
         index_l = 0
         total = 0
         size_l = 7
         print "!!!!!!!!!!!!!!!!!! End Of parsing !!!!!!!!!!!!!!!!!!!"
         try:
             print "Grille :"
             print "%s" % myParser.wsDataFormat.grille
             for i in range(0, size_l) :
                 print "indice %i" % i
                 team1 = myParser.wsDataFormat.grille['team1'][i]
                 team2 = myParser.wsDataFormat.grille['team2'][i]
                 match = Match(team1 + " vs " + team2)
                 match.setTeam1(team1)
                 match.setTeam2(team2)
                 p1 = myParser.wsDataFormat.grille['croix_1'][i]
                 pN = myParser.wsDataFormat.grille['croix_x'][i]
                 p2 = myParser.wsDataFormat.grille['croix_2'][i]
                 total = float(p1+pN+p2)
                 r1 = p1/total*100
                 r2 = p2/total*100
                 rN = pN/total*100
                 match.setRepartition(p1/total, pN/total, p2/total)
                 #print "{} vs {} \t{0:.3f}\t{0:.3f}\t{0:.3f}\n".format( WSDataFormat.grille['team1'][i], WSDataFormat.grille['team2'][i], r1, rN, r2)
                 #print "{} vs {}\t{:10.3f}\t{:10.3f}\t{:10.3f} ".format( myParser.wsDataFormat.grille['team1'][i].encode('utf-8'), myParser.wsDataFormat.grille['team2'][i].encode('utf-8'), r1,rN,r2)
                 self._grid.addGame(match)
             print "%d grilles" % total
         except:
                 msg = QMessageBox()
                 msg.setText("Loading page error")
                 msg.exec_()
         #self.__workbook1.save(self.__outPutFileName)
         return
示例#9
0
class ReadLoto7Handler(ReadLotoHandler):

        def __init__(self):
                ReadLotoHandler.__init__(self)
                print "Loto 7"
                self._gridName = "Loto7"
                print "L7: %s" % str(self)
                self._bookUrl = QUrl("http://www.pronosoft.com/fr/concours/repartition_lotofoot_7.php")
                self._gridSize = 7
                self._grid = Grille()
                self._grid.setReturnRate(0.70)
                self._grid.setFirstRankRate(0.45)
                self._grid.setScndRankRate(0.55)
                self._grid.setThirdRankRate(0.00)
                return

        def changeGrid(self, index):
                ReadLotoHandler.changeGrid(self, index)
                self._distributionUrl = "http://www.pronosoft.com/fr/concours/repartition_lotofoot.php?id7=%s" % self._gridList[index][0]
                print "distributionUrl=%s" % self._distributionUrl
                return
示例#10
0
 def reset(self):
     self.jeu.grille=Grille.genere_grille()
示例#11
0
 def victoire(self):#On va vider les cases lorsque l'on touche un bateau sur cette case ainsi on a juste besoin de verifier si la grille est vide ce qui est le cas pour une grille generée par defaut
     if(self.grille.grille == Grille().grille):
         return True
     return False
示例#12
0
class ReadWinamax12Handler(ReadGridHandler):

        def __init__(self):
                ReadGridHandler.__init__(self)
                print "Winamax 12"
                self._gridName = "Winamax12"
                print "W12: %s" % str(self)
                self._bookUrl = QUrl("https://www.winamax.fr/paris-sportifs-grilles/")
                self._gridSize = 12
                return

        def handleHtmlPage(self, htmlPage):
                tup = ()
                self._gridList = []
                wina12rx = QRegExp("\{\"pool_id\":12000(\\d+).*\"pool_end\":(\\d+).*\"guaranteed_amount\":(\\d+).*\}")
                posi = wina12rx.indexIn(str(htmlPage))
                ngrille = wina12rx.cap(1)
                print "ngrille=%s" % ngrille
                date = wina12rx.cap(2)
                print "date=%s" % date
                jackpot = wina12rx.cap(3)
                print "jackpot=%s" % jackpot
                tup = (ngrille, date, jackpot)
                self._gridList.append(tup)
                while posi != -1 :
                        posi = wina12rx.indexIn(str(htmlPage), posi+1)
                        ngrille = wina12rx.cap(1)
                        print "ngrille=%s" % ngrille
                        date = wina12rx.cap(2)
                        print "date=%s" % date
                        jackpot = wina12rx.cap(3)
                        print "jackpot=%s" % jackpot
                        tup = (ngrille, date, jackpot)
                        self._gridList.append(tup)
                print self._gridList

        def handleDistribHtmlPage(self, htmlPage):
                self._grid = Grille()
                self._grid.setReturnRate(0.75)
                self._grid.setFirstRankRate(0.40)
                self._grid.setScndRankRate(0.20)
                self._grid.setThirdRankRate(0.20)
                jackpot = int(self._gridList[self._index][2]) / 0.75
                self._grid.setJackpot(jackpot)
                self._grid.setNbPlayers(jackpot)
                #print "handleDistribHtmlPage"
                #print htmlPage
                myParser = WSGridParser()
                myParser.html = filter(onlyascii, htmlPage)
                myParser.feed(htmlPage)
                index_l = 0
                total = 0
                size_l = 12
                try:
                        for i in range(0, size_l) :
                                print "indice %i" % i
                                team1 = myParser.wsDataFormat.grille['team1'][i]
                                team2 = myParser.wsDataFormat.grille['team2'][i]
                                match = Match(team1 + " vs " + team2)
                                match.setTeam1(team1)
                                match.setTeam2(team2)
                                p1 = myParser.wsDataFormat.grille['croix_1'][i]
                                pN = myParser.wsDataFormat.grille['croix_x'][i]
                                p2 = myParser.wsDataFormat.grille['croix_2'][i]
                                total = float(p1+pN+p2)
                                r1 = p1/total*100
                                r2 = p2/total*100
                                rN = pN/total*100
                                match.setRepartition(p1/total, pN/total, p2/total)
                                #print "{} vs {} \t{0:.3f}\t{0:.3f}\t{0:.3f}\n".format( WSDataFormat.grille['team1'][i], WSDataFormat.grille['team2'][i], r1, rN, r2)
                                #print "{} vs {}\t{:10.3f}\t{:10.3f}\t{:10.3f} ".format( myParser.wsDataFormat.grille['team1'][i].encode('utf-8'), myParser.wsDataFormat.grille['team2'][i].encode('utf-8'), r1,rN,r2)
                                self._grid.addGame(match)
                        print "%d grilles" % total
                except:
                        msg = QMessageBox()
                        msg.setText("Loading page error")
                        msg.exec_()
                #self.__workbook1.save(self.__outPutFileName)
                return

        def generateInputGrid(self):
                return

        def changeGrid(self, index):
                ReadGridHandler.changeGrid(self, index)
                self._distributionUrl = "https://www.winamax.fr/paris-sportifs-grilles/grille12-%s/grilles-publiques" % self._gridList[index][0]
                print "distributionUrl=%s" % self._distributionUrl
                return
示例#13
0
from Grille import Grille
import Bateau

b1 = Bateau.Croiseur(1, 1, True)
b2 = Bateau.Escorteur(2, 5, False)
b3 = Bateau.SousMarin(4, 2, False)

g1 = Grille(7, 9)

g1 += b1
g1 += b2
g1 += b3
print(b1.est_touche(1, 1))
print(b1.est_touche(1, 2))
print(b1.est_touche(1, 2))
print(b1.est_touche(1, 3))
print(g1.coup(1, 4))
示例#14
0
    def __init__(self, data):
        self.data = data
        # Création des grilles
        self.grille_J1 = Grille.Grille(10, 10, 145, 100, 495, 450,
                                       Bataille_Navale_Case)
        self.grille_J2 = Grille.Grille(10, 10, 145, -450, 495, -100,
                                       Bataille_Navale_Case)
        # On indique que la grille du joueur 2 ne doit pas montrer les bateaux
        self.grille_J2.unshowShip()
        # Ajout des images des bateaux + redimension de ces images
        self.bateauStr = {
            "Porte-Avion": [
                pygame.transform.scale(
                    pygame.image.load(
                        os.path.join(
                            os.path.dirname(os.path.abspath(__file__)),
                            "../assets", "Bataille Navale/Porte-avions_1.png")
                    ).convert_alpha(), (35, 35)),
                pygame.transform.scale(
                    pygame.image.load(
                        os.path.join(
                            os.path.dirname(os.path.abspath(__file__)),
                            "../assets", "Bataille Navale/Porte-avions_2.png")
                    ).convert_alpha(), (35, 35)),
                pygame.transform.scale(
                    pygame.image.load(
                        os.path.join(
                            os.path.dirname(os.path.abspath(__file__)),
                            "../assets", "Bataille Navale/Porte-avions_3.png")
                    ).convert_alpha(), (35, 35)),
                pygame.transform.scale(
                    pygame.image.load(
                        os.path.join(
                            os.path.dirname(os.path.abspath(__file__)),
                            "../assets", "Bataille Navale/Porte-avions_4.png")
                    ).convert_alpha(), (35, 35)),
                pygame.transform.scale(
                    pygame.image.load(
                        os.path.join(
                            os.path.dirname(os.path.abspath(__file__)),
                            "../assets", "Bataille Navale/Porte-avions_5.png")
                    ).convert_alpha(), (35, 35))
            ],
            "Croiseur": [
                pygame.transform.scale(
                    pygame.image.load(
                        os.path.join(
                            os.path.dirname(os.path.abspath(__file__)),
                            "../assets",
                            "Bataille Navale/croiseur_1.png")).convert_alpha(),
                    (35, 35)),
                pygame.transform.scale(
                    pygame.image.load(
                        os.path.join(
                            os.path.dirname(os.path.abspath(__file__)),
                            "../assets",
                            "Bataille Navale/croiseur_2.png")).convert_alpha(),
                    (35, 35)),
                pygame.transform.scale(
                    pygame.image.load(
                        os.path.join(
                            os.path.dirname(os.path.abspath(__file__)),
                            "../assets",
                            "Bataille Navale/croiseur_3.png")).convert_alpha(),
                    (35, 35)),
                pygame.transform.scale(
                    pygame.image.load(
                        os.path.join(
                            os.path.dirname(os.path.abspath(__file__)),
                            "../assets",
                            "Bataille Navale/croiseur_4.png")).convert_alpha(),
                    (35, 35))
            ],
            "Contre-Torpilleur": [
                pygame.transform.scale(
                    pygame.image.load(
                        os.path.join(
                            os.path.dirname(os.path.abspath(__file__)),
                            "../assets",
                            "Bataille Navale/contre-torpilleur_1.png")).
                    convert_alpha(), (35, 35)),
                pygame.transform.scale(
                    pygame.image.load(
                        os.path.join(
                            os.path.dirname(os.path.abspath(__file__)),
                            "../assets",
                            "Bataille Navale/contre-torpilleur_2.png")).
                    convert_alpha(), (35, 35)),
                pygame.transform.scale(
                    pygame.image.load(
                        os.path.join(
                            os.path.dirname(os.path.abspath(__file__)),
                            "../assets",
                            "Bataille Navale/contre-torpilleur_3.png")).
                    convert_alpha(), (35, 35))
            ],
            "Sous-marin": [
                pygame.transform.scale(
                    pygame.image.load(
                        os.path.join(
                            os.path.dirname(os.path.abspath(__file__)),
                            "../assets", "Bataille Navale/sous-marin_1.png")).
                    convert_alpha(), (35, 35)),
                pygame.transform.scale(
                    pygame.image.load(
                        os.path.join(
                            os.path.dirname(os.path.abspath(__file__)),
                            "../assets", "Bataille Navale/sous-marin_2.png")).
                    convert_alpha(), (35, 35)),
                pygame.transform.scale(
                    pygame.image.load(
                        os.path.join(
                            os.path.dirname(os.path.abspath(__file__)),
                            "../assets", "Bataille Navale/sous-marin_3.png")).
                    convert_alpha(), (35, 35))
            ],
            "Torpilleur": [
                pygame.transform.scale(
                    pygame.image.load(
                        os.path.join(
                            os.path.dirname(os.path.abspath(__file__)),
                            "../assets", "Bataille Navale/torpilleur_1.png")).
                    convert_alpha(), (35, 35)),
                pygame.transform.scale(
                    pygame.image.load(
                        os.path.join(
                            os.path.dirname(os.path.abspath(__file__)),
                            "../assets", "Bataille Navale/torpilleur_2.png")).
                    convert_alpha(), (35, 35))
            ]
        }

        # Ajout des images des bateaux + redimension de ces images + rotation a 90 degrés des images
        # Sert pour l'affichage des bateau tournés
        self.bateauStr_H = {
            "Porte-Avion": [
                pygame.transform.rotate(self.bateauStr["Porte-Avion"][0], 90),
                pygame.transform.rotate(self.bateauStr["Porte-Avion"][1], 90),
                pygame.transform.rotate(self.bateauStr["Porte-Avion"][2], 90),
                pygame.transform.rotate(self.bateauStr["Porte-Avion"][3], 90),
                pygame.transform.rotate(self.bateauStr["Porte-Avion"][4], 90)
            ],
            "Croiseur": [
                pygame.transform.rotate(self.bateauStr["Croiseur"][0], 90),
                pygame.transform.rotate(self.bateauStr["Croiseur"][1], 90),
                pygame.transform.rotate(self.bateauStr["Croiseur"][2], 90),
                pygame.transform.rotate(self.bateauStr["Croiseur"][3], 90)
            ],
            "Contre-Torpilleur": [
                pygame.transform.rotate(self.bateauStr["Contre-Torpilleur"][0],
                                        90),
                pygame.transform.rotate(self.bateauStr["Contre-Torpilleur"][1],
                                        90),
                pygame.transform.rotate(self.bateauStr["Contre-Torpilleur"][2],
                                        90)
            ],
            "Sous-marin": [
                pygame.transform.rotate(self.bateauStr["Sous-marin"][0], 90),
                pygame.transform.rotate(self.bateauStr["Sous-marin"][1], 90),
                pygame.transform.rotate(self.bateauStr["Sous-marin"][2], 90)
            ],
            "Torpilleur": [
                pygame.transform.rotate(self.bateauStr["Torpilleur"][0], 90),
                pygame.transform.rotate(self.bateauStr["Torpilleur"][1], 90)
            ]
        }
        # Données de placements sous forme [(bx1, by1), (bx2, by2), (bx3, by3), (bx4, by4), (bx5, by5), grille du joueur n montrée, ID bateau sélectionné, [dirBateau1, dirBateau2, dirBateau3, dirBateau4, dirBateau5]]
        self.placeData = [
            (10, 150), (52, 150), (10, 330), (52, 330), (94, 280), 1, -1,
            ["Verticale", "Verticale", "Verticale", "Verticale", "Verticale"]
        ]
        # Données de jeu sous forme [tour du joueur n, grille du joueur n montrée]
        self.currentPlayData = [1, 1]
        # texture de l'animation de tir
        self.tirTexture = pygame.transform.scale(
            pygame.image.load(
                os.path.join(os.path.dirname(os.path.abspath(__file__)),
                             "../assets",
                             "Bataille Navale/tir.png")).convert_alpha(),
            (35, 35))
        self.tirData = [-1, -1]
        # Timer pour l'animation de tir
        self.tirTimer = 0
        # Variable indiquant le gagnant de la partie
        self.winner = 0

        # Variables dont ont se sert pour la précision
        self.tirTouche = [0, 0]
        self.tirCoule = [0, 0]
        self.tirs = [0, 0]
        self.time = 0
        # Variable contenant l'IA
        self.IA = None
示例#15
0
 def __init__(self, nom):
     self.listBateau = []
     self.initiationBateau()
     self.grille = Grille()
     self.nom = nom
示例#16
0
    def __init__(self):

        self.joueur1 = Joueur('Joueur')
        self.turn = True
        self.joueur2 = Joueur('Adversaire')
        self.grille = Grille()
示例#17
0
文件: Game.py 项目: Cassius-P/Sudoku
class Game(QWidget):
    def __init__(self, parent=None, size=int, load=[]):
        super().__init__(parent)
        # crée la grille et le bouton de verif

        self.table = QTableWidget(self)
        self.table.itemChanged.connect(self.changeValue)

        #Verification button
        verif = QPushButton("Verifier grille")
        verif.clicked.connect(self.verifButton)
        self.verif = verif

        #Save Game button
        save = QPushButton("Sauvegarder")
        save.clicked.connect(self.saveGame)
        self.save = save

        self.size = size
        self.table.setRowCount(self.size)
        self.table.setColumnCount(self.size)

        # Cache les entêtes horizontale et verticale
        self.table.horizontalHeader().hide()
        self.table.verticalHeader().hide()

        # Définit les cases carrées 50 pixels x 50 pixels
        for row in range(self.size):
            self.table.setRowHeight(row, 50)
            for col in range(self.size):
                self.table.setColumnWidth(col, 50)

        # remplit la grille avec des QTableWidgetItem
        for row in range(self.size):
            for col in range(self.size):
                tableItem = QTableWidgetItem()
                # val= self.testGrid[row][col]
                tableItem.setTextAlignment(QtCore.Qt.AlignHCenter
                                           | QtCore.Qt.AlignVCenter)
                # tableItem.setText(str(val))
                self.table.setItem(row, col, tableItem)

        # définit la police de caractère par défaut de la table
        font = QFont()
        font.setFamily(u"DejaVu Sans")
        font.setPointSize(16)
        self.table.setFont(font)

        # taille de la fenêtre
        self.setFixedSize(52 * self.size + 6, 53 * self.size + 55)

        # positionne la table dans la fenêtre
        posit = QGridLayout()
        posit.addWidget(self.table, 0, 0)
        #posit.addWidget(self.timer, 88 * self.size, 0)
        posit.addWidget(self.verif, 52 * self.size, 0)
        posit.addWidget(self.save, 75 * self.size, 0)

        self.setLayout(posit)

        # Grille test
        self.grilleTest = Grille(self.size)
        print("Load : ", load)

        #Chargement de la grille pour chargée et nouvelle partie
        if len(load) == 0:
            print("New game detected")
            self.full = self.grilleTest.getCompleteGrille()

            self.startMatrix = self.grilleTest.getGrille()
            self.matrix = self.startMatrix
        else:
            print("Loaded game detectd")
            self.full = load[1]
            self.grilleTest.setGrid(load)
            self.startMatrix = load[0]
            self.matrix = load[2]
            print("loaded")

        # intégre le delegate pour lignes en gras et les cases en couleur
        self.delegate = ItemDelegate(self.table)
        self.table.setItemDelegate(self.delegate)

        # redessine les lignes en gras et les cases de couleur
        self.delegate.grilleinit(self.matrix, self.size)

        # affiche la grille courante
        self.showGrille(self.matrix)

        # place le focus
        self.table.setFocus()
        self.table.setCurrentCell(0, 0)

    #Verification d'une grille
    def verifButton(self):
        for i in range(self.size):
            print(self.matrix[i])
        verif = VerifGrid(self.matrix, self.size)
        self.verif.setText(verif.getStatut())
        self.verif.setDisabled(True)

    #Enregistrement d'une partie
    def saveGame(self):
        infos = [self.startMatrix, self.full, self.matrix]
        print('\n' + self.formatNumbers(infos[0]))
        with open(str(time.time()) + ".sudoku", 'w') as file:
            print(file)
            file.write(self.formatNumbers(infos[0]) + "\n")
            file.write(self.formatNumbers(infos[1]) + "\n")
            file.write(self.formatNumbers(infos[2]) + "\n")
            file.close()

        self.save.setText("Sauvegardé !")
        self.save.setDisabled(True)

    #Formatage de la date pour l'enregistrement du fichier de sauvegarde
    def formatNumbers(self, array):
        sep = ''
        stringList = []
        for n1 in array:
            for n2 in n1:
                stringList.append(str(n2))
        return sep.join(stringList)

    #event quand une case de la grille change de valeur
    def changeValue(self):
        ac = self.table.currentItem()
        if (isinstance(ac, QTableWidgetItem)):
            row = ac.row()
            col = ac.column()
            try:
                indice = False
                if (keyboard.is_pressed('ctrl')):
                    indice = True
                if (self.size == 9):
                    val = int(ac.text())
                    if (val < self.size):
                        self.matrix[row][col] = val if indice != True else 0
                        self.setCouleur((row, col),
                                        QColor(255, 255, 255) if indice != True
                                        else QColor(51, 153, 255))
                        self.save.setText("Sauvegarder")
                        self.save.setDisabled(False)
                        self.verif.setText("Vérifier grille")
                        self.verif.setDisabled(False)
                    else:
                        self.table.item(row, col).setText('')
                else:
                    print("Grid of 16")

            except ValueError:
                print("pas un nombre")
                self.table.item(row, col).setText('')
                # self.setCouleur((row, col), QColor(240,0,0))

    #Affichage de la grille de départ avec remplssage des valeurs
    def showGrille(self, grille):
        for row in range(self.size):
            for col in range(self.size):
                #Si la valeur vaut 0, affichage casse vide
                if grille[row][col] == 0:
                    self.table.item(row, col).setText(u"")
                    self.table.item(row,
                                    col).setFlags(QtCore.Qt.ItemIsEnabled
                                                  | QtCore.Qt.ItemIsSelectable
                                                  | QtCore.Qt.ItemIsEditable)
                #Si valeur différente de 0 affichage valeur non modifiable par utilisateur
                else:
                    self.table.item(row, col).setText(str(grille[row][col]))
                    self.table.item(row,
                                    col).setFlags(QtCore.Qt.ItemIsEnabled
                                                  | QtCore.Qt.ItemIsSelectable)

                    #Mise en évidence des valeurs non modifiables
                    font = QFont()
                    font.setWeight(70)
                    self.table.item(row, col).setFont(font)

                    # Détruit le design (grille) donc commenté
                    # self.table.item(row, col).setBackground(QColor(228, 228, 228))

    #Changement de la couleur d'une case
    def setCouleur(self, coordinates, color):
        x, y = coordinates
        self.table.item(x, y).setBackground(color)
        return True

    #Bordure des cases avec 'bold' pour sépration des blocs
    def caseBorder(painter, option, ligne):
        r = option.rect
        x, y, w, h = r.x(), r.y(), r.width(), r.height()
        if ligne == 'h':
            x1, y1, x2, y2 = x, y, x + w, y
        elif ligne == 'd':
            x1, y1, x2, y2 = x + w, y, x + w, y + h
        elif ligne == 'b':
            x1, y1, x2, y2 = x + w, y + h, x, y + h
        elif ligne == 'g':
            x1, y1, x2, y2 = x, y + h, x, y
        else:
            return
        pen = QtGui.QPen()
        pen.setWidth(2)
        painter.setPen(pen)
        painter.drawLine(x1, y1, x2, y2)
示例#18
0
class Game:
    def __init__(self, width, height):
        self.players = []
        self.width = width
        self.height = height
        self.grille = Grille(width, height)
        self.colors = [
            'red',
            'yellow',
            'green',
            'blue',
            'orange',
            'violet',
            'pink',
        ]
        self.turn = -1

    def addPlayer(self, isHuman):
        playerid = len(self.players) + 1
        color = self.colors[playerid]
        if isHuman:
            self.players.append(Human(playerid, color))
        else:
            self.players.append(Ia(playerid, color))

    def Play(self, x):
        self.turn += 1
        print(self.turn)
        print(len(self.players))
        if self.turn >= len(self.players):
            self.turn = 0
        if self.turn == len(self.players) - 1:
            self.players[self.turn].play(self.grille, x, self)
        if self.turn < len(self.players) - 1:
            self.players[self.turn].play(self.grille, x, self)
        print("choupi!!")
        self.grille.print()

    def PlayR(self):
        self.turn += 1
        coups = self.grille.coupsPossibles()
        if len(coups) > 0:
            coup = coups[random.randrange(len(coups))]
            if self.turn >= len(self.players):
                self.turn = 0
            if self.turn == len(self.players) - 1:
                self.grille.posePion(coup, self.players[self.turn])
            if self.turn < len(self.players) - 1:
                self.grille.posePion(coup, self.players[self.turn])

        # print(self.turn)

    def Simule(
        self,
        id,
        x,
        nbSimulations,
    ):
        score = 0
        for i in range(nbSimulations):
            gameT = copy.deepcopy(self)
            thisPlayer = gameT.players[id - 1]
            gameT.grille.posePion(x, thisPlayer)
            won = False
            while len(gameT.grille.coupsPossibles()) > 3 and not won:

                # ######### ICI##########

                gameT.PlayR()
                for player in gameT.players:
                    if player.win():
                        if player.id == id:
                            score += 100
                            won = True
                            break
                        else:
                            score -= 50
                            won = True
                            break
        return score
示例#19
0
 def __init__(self):
     self.grille=Grille.genere_grille()
示例#20
0
class Joueur:
    #class qui represente le joueur, il possede ses bateau sa grille et tout
    def __init__(self, nom):
        self.listBateau = []
        self.initiationBateau()
        self.grille = Grille()
        self.nom = nom

    def getGrille(self):
        return self.grille

    #On initialise les bateau, comme mantionner dans la classe Bateau je pense qu'on peut enlever les tuple
    #qui representent les coordeonnees du bateau puisqu'il sont tous a 0
    def initiationBateau(self):
        self.listBateau = [Bateau('Contre-Torpilleur', 3, (0,0)),
                           Bateau('Torpilleur', 2, (0, 0)),
                           Bateau('Porte-Avions', 5, (0, 0)),
                           Bateau('Sous-Marin', 3, (0, 0)),
                           Bateau('Croiseur', 4, (0, 0))]

    #La fonction placeBateau demande 3 inputs, on doit changer ces inputs pour les attacher a l'interface graphique
    def placerBateau(self):
        #boucle pour chaque bateau dans la liste
        for b in self.listBateau:
            #tant que celui n'est pas placer sur la grille (le bateau est placer une fois que la position demander
            #est disponible
            while not b.estSurLaGrille():
                print('Placer votre : ' + b.nom)
                x = input('Position en X')
                y = input('Position en Y')
                o = input('Quel Orientation ? *4-Gauche, 8-Haut, 6-Droite, 2-Bas')

                #ici on regarde les inputs donner pour savoir si le bateau peut etre placer a cette endroit, si il peut
                #etre placer, on appel la fonction positionner de la class bateau, sinon on reprend de nouveaux inputs
                if (self.grille.isAvailable((x, y))):
                    if o == 4:
                        if y >= b.getLongueur:
                            for i in range(b.getLongueur):
                                if not(self.grille.isAvailable((x, y-i))):
                                    break
                            b.positionner((x, y), o)
                    elif o == 8:
                        if x >= b.getLongueur:
                            for i in range(b.getLongueur):
                                if not(self.grille.isAvailable((x-i, y))):
                                    break
                            b.positionner((x, y), o)
                    elif o == 6:
                        if y <= b.getLongueur:
                            for i in range(b.getLongueur):
                                if not(self.grille.isAvailable((x, y+i))):
                                    break
                            b.positionner((x, y), o)
                    elif o == 2:
                        if x <= b.getLongueurt:
                            for i in range(b.getLongueur):
                                if not(self.grille.isAvailable((x, y-i))):
                                    break
                            b.positionner((x, y), o)
                    else:
                        print('Le bateau ne peut pas etre positionner')


    #c'est la methode qui update tous les bateau sur la grille, en fait c'est cette methode qui change les valeurs de
    #la grille au point (x, y) pour mettre une reference vers le bateau
    def updateGrille(self):
        for b in self.listBateau:
            x = b.getCoord()[0]
            y = b.getCoord()[1]
            o = b.getOrientation()
            if o == 4:
                for i in range(b.getLongueur):
                    self.grille[x][y-i] = b
            if o == 8:
                for i in range(b.getLongueur):
                    self.grille[x-i][y] = b
            if o == 6:
                for i in range(b.getLongueur):
                    self.grille[x][y+i] = b
            if o == 2:
                for i in range(b.getLongueur):
                    self.grille[x+i][y] = b

    #La fonction attaquer prend une coordonnee a attaquer et un joueur a attaquer
    def attaquer(self, coord, joueur):
        if joueur.grille.isTouch(coord):
            joueur.getGrille().getBateau(coord).hit()
            if joueur.getGrille().getBateau(coord).getPv() <= 0:
                joueur.deleteBateau(joueur.getGrille().getBateau(coord))
            joueur.getGrille().setTableau2D(coord, -1)
        else:
            joueur.getGrille().setTableau2D(coord, -2)

    #un joueur est mort si il n'y a plus de bateau dans sa liste, un bateau est retirer de la liste lorsque celui-ci
    #est couler
    def isDead(self):
        if len(self.listBateau) == 0:
            return True
        else:
            return False
    #retire un bateau de la liste
    def deleteBateau(self, bateau):
        self.listBateau.remove(bateau)

    def __str__(self):
        string = ''
        string += self.nom
示例#21
0
文件: Game.py 项目: Cassius-P/Sudoku
    def __init__(self, parent=None, size=int, load=[]):
        super().__init__(parent)
        # crée la grille et le bouton de verif

        self.table = QTableWidget(self)
        self.table.itemChanged.connect(self.changeValue)

        #Verification button
        verif = QPushButton("Verifier grille")
        verif.clicked.connect(self.verifButton)
        self.verif = verif

        #Save Game button
        save = QPushButton("Sauvegarder")
        save.clicked.connect(self.saveGame)
        self.save = save

        self.size = size
        self.table.setRowCount(self.size)
        self.table.setColumnCount(self.size)

        # Cache les entêtes horizontale et verticale
        self.table.horizontalHeader().hide()
        self.table.verticalHeader().hide()

        # Définit les cases carrées 50 pixels x 50 pixels
        for row in range(self.size):
            self.table.setRowHeight(row, 50)
            for col in range(self.size):
                self.table.setColumnWidth(col, 50)

        # remplit la grille avec des QTableWidgetItem
        for row in range(self.size):
            for col in range(self.size):
                tableItem = QTableWidgetItem()
                # val= self.testGrid[row][col]
                tableItem.setTextAlignment(QtCore.Qt.AlignHCenter
                                           | QtCore.Qt.AlignVCenter)
                # tableItem.setText(str(val))
                self.table.setItem(row, col, tableItem)

        # définit la police de caractère par défaut de la table
        font = QFont()
        font.setFamily(u"DejaVu Sans")
        font.setPointSize(16)
        self.table.setFont(font)

        # taille de la fenêtre
        self.setFixedSize(52 * self.size + 6, 53 * self.size + 55)

        # positionne la table dans la fenêtre
        posit = QGridLayout()
        posit.addWidget(self.table, 0, 0)
        #posit.addWidget(self.timer, 88 * self.size, 0)
        posit.addWidget(self.verif, 52 * self.size, 0)
        posit.addWidget(self.save, 75 * self.size, 0)

        self.setLayout(posit)

        # Grille test
        self.grilleTest = Grille(self.size)
        print("Load : ", load)

        #Chargement de la grille pour chargée et nouvelle partie
        if len(load) == 0:
            print("New game detected")
            self.full = self.grilleTest.getCompleteGrille()

            self.startMatrix = self.grilleTest.getGrille()
            self.matrix = self.startMatrix
        else:
            print("Loaded game detectd")
            self.full = load[1]
            self.grilleTest.setGrid(load)
            self.startMatrix = load[0]
            self.matrix = load[2]
            print("loaded")

        # intégre le delegate pour lignes en gras et les cases en couleur
        self.delegate = ItemDelegate(self.table)
        self.table.setItemDelegate(self.delegate)

        # redessine les lignes en gras et les cases de couleur
        self.delegate.grilleinit(self.matrix, self.size)

        # affiche la grille courante
        self.showGrille(self.matrix)

        # place le focus
        self.table.setFocus()
        self.table.setCurrentCell(0, 0)
示例#22
0
class ReadPick8Handler(ReadGridHandler):

        def __init__(self):
                ReadGridHandler.__init__(self)
                print "Pick8"
                self._gridName = "Pick8"
                print "P8: %s" % str(self)
                self._gridSize = 8
                self._bookUrl = QUrl("")
                return

        def handleHtmlPage(self, htmlPage):
                tup = ()
                self._gridList = []
                htmlAscii = filter(onlyascii, str(htmlPage))
                #print "html = %s" % htmlAscii
                mini5NumGrillerx = QRegExp("<div class=\"grid grid-3\" data-grid-id=\"(\\d+)\" data-grid-type=\"3\">")
                mini5DateRx = QRegExp("<span\\s*class=\"date\">[\\s\\n\\r]*(\\w+)\\s*(\\d+)\\s*(\\w+)\\s*(\\d+)\\s*.{0,6}\\s*(\\d+):(\\d+)\\s*</span>")
                #mini5DateRx = QRegExp("<span\\s*class=\"date\">[\\s\\n\\r]*(\\w+)\\s*(\\d+)\\s*(\\w+)\\s*(\\d+)\\s*.+\\s*(\\d+):(\\d+)\\s*</span>")
                mini5JackpotRx = QRegExp("<p class=\"montant-jackpot\">Jackpot\\s*garanti\\s*<span>\\s*(\\d+)")
                posi = mini5NumGrillerx.indexIn(str(htmlAscii))
                ngrille = mini5NumGrillerx.cap(1)
                print "ngrille=%s" % ngrille
                posi = mini5DateRx.indexIn(str(htmlAscii), posi+1)
                jour = mini5DateRx.cap(1)
                numJour = mini5DateRx.cap(2)
                mois = mini5DateRx.cap(3)
                annee = mini5DateRx.cap(4)
                heure = mini5DateRx.cap(5)
                minute = mini5DateRx.cap(6)
                mois = filter(onlyascii, mois)
                print "jour=%s" % jour
                print "mois=%s" % mois
                print "annee=%s" % annee
                date = CombinoCalendar(int(numJour), mois, int(annee), int(heure), int(minute))
                epochDate = date.epochDate()/1000
                print "date=%s" % (jour + str(numJour) + mois + str(annee))
                print "epochDate=%d" % epochDate
                #self.gridList.append(mini5rx.cap(1))
                posi = mini5JackpotRx.indexIn(str(htmlAscii), posi+1)
                jackpot = mini5JackpotRx.cap(1)
                print "jackpot=%s" % jackpot
                tup = (ngrille, epochDate, jackpot)
                self._gridList.append(tup)
                posi = mini5NumGrillerx.indexIn(str(htmlAscii), posi+1)
                while posi != -1 :
                        ngrille = mini5NumGrillerx.cap(1)
                        print "ngrille=%s" % ngrille
                        posi = mini5DateRx.indexIn(str(htmlAscii), posi+1)
                        jour = mini5DateRx.cap(1)
                        numJour = mini5DateRx.cap(2)
                        mois = mini5DateRx.cap(3)
                        annee = mini5DateRx.cap(4)
                        mois = filter(onlyascii, mois)
                        heure = mini5DateRx.cap(5)
                        minute = mini5DateRx.cap(6)
                        print "date=%s" % (jour + str(numJour) + mois + str(annee))
                        date = CombinoCalendar(int(numJour), mois, int(annee), int(heure), int(minute))
                        epochDate = date.epochDate()/1000
                        print "epochDate=%d" % epochDate
                        posi = mini5JackpotRx.indexIn(str(htmlAscii), posi+1)
                        jackpot = mini5JackpotRx.cap(1)
                        print "jackpot=%s" % jackpot
                        tup = (ngrille, epochDate, jackpot)
                        self._gridList.append(tup)
                        posi = mini5NumGrillerx.indexIn(str(htmlAscii), posi+1)
                print self._gridList

        def handleDistribHtmlPage(self, htmlPage):
                mini5startRx = QRegExp("data-grid-id=\"(\\d*)\"")
                indexGrille = ""
                posi = 0
                while posi != -1 and indexGrille != self._gridList[self._indexGrille][0]:
                    print "posi = %d" % posi
                    print "indexGrille = %s" % indexGrille
                    print "self._indexGrille = %s" % self._gridList[self._indexGrille][0]
                    posi= mini5startRx.indexIn(htmlPage, posi+1)
                    indexGrille = mini5startRx.cap(1)
                mini5TeamRx = QRegExp("<label for=\"[^\"]*\">([^<]*)<\/label>")
                self._grid = Grille()
                self._grid.setReturnRate(0.70)
                self._grid.setFirstRankRate(0.75)
                self._grid.setScndRankRate(0.25)
                jackpot = int(self._gridList[self._index][2]) #/ 0.75
                self._grid.setJackpot(jackpot)
                self._grid.setNbPlayers(jackpot)
                index_l = 0
                total = 0
                i=0
                #try:
                if True:
                    posi= mini5TeamRx.indexIn(htmlPage, posi)
                    print "posi = %d" % posi
                    while posi != -1 and i < self._gridSize:
                        i += 1
                        team1 = mini5TeamRx.cap(1)
                        print "team1 = %s" % team1
                        posi= mini5TeamRx.indexIn(htmlPage, posi+1)
                        posi= mini5TeamRx.indexIn(htmlPage, posi+1)
                        team2 = mini5TeamRx.cap(1)
                        print "indice %i" % i
                        print "team2 = %s" % team2
                        match = Match(team1 + " vs " + team2)
                        match.setTeam1(team1)
                        match.setTeam2(team2)
                        p1 = 0.33
                        pN = 0.33
                        p2 = 0.33
                        total = p1 + pN +p2
                        r1 = p1/total*100
                        r2 = p2/total*100
                        rN = pN/total*100
                        match.setRepartition(p1/total, pN/total, p2/total)
                        self._grid.addGame(match)
                        print "game added : %d" % i
                        posi= mini5TeamRx.indexIn(htmlPage, posi+1)
                #except:
                        #msg = QMessageBox()
                        #msg.setText("Loading page error")
                        #msg.exec_()
                #self.__workbook1.save(self.__outPutFileName)
                return

        def generateInputGrid(self):
                return


        def changeGrid(self, index):
                ReadGridHandler.changeGrid(self, index)
                self._indexGrille = index
                self._distributionUrl = ""
                print "distributionUrl=%s" % self._distributionUrl
                return
示例#23
0
def main():

    animation = False
    couleur = False

    try:
        if(sys.argv[1] == '-animation'):
            animation = True

        elif(sys.argv[1] == '-couleur'):
            couleur = True
        
        else:
            nb_etapes = int(sys.argv[1])

    except IndexError:
        print("Veuillez entrer un argument avant l'exécution, fin du programme.")
        return

    # Pour les tests      
    #nb_etapes = int(open('arg.txt', 'r').read())

    config = open('config.txt', 'r').read().splitlines()
    regles = open('rules.txt', 'r').read().splitlines()

    hauteur = int(config[0].split(',')[0])
    largeur = int(config[0].split(',')[1])

    grille = Grille(hauteur, largeur)
    grille.initialiser(config)
    regle = Regles(regles)

    if(animation or couleur):
        while(True):
            grille.simulation(regle)
            grille.imprimer(couleur)
            input('\nAppuyez sur la touche <Enter> pour simuler une autre étape ...')
            print('\n\n\n\n\n')

    else:
        for sim in range(nb_etapes):
            grille.simulation(regle)
    
        grille.imprimer(couleur)