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 ")
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
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 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")
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
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
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
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
def reset(self): self.jeu.grille=Grille.genere_grille()
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
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
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))
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
def __init__(self, nom): self.listBateau = [] self.initiationBateau() self.grille = Grille() self.nom = nom
def __init__(self): self.joueur1 = Joueur('Joueur') self.turn = True self.joueur2 = Joueur('Adversaire') self.grille = Grille()
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)
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
def __init__(self): self.grille=Grille.genere_grille()
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
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)
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
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)