def __init__(self): super().__init__() #les noirs commencent self.couleur_active = 'N' # Configuration de l'interface utilisateur. self.ui = Ui_principale_ihm() self.ui.setupUi(self) # Liens entre boutons et fonctions self.ui.bouton_simuler.clicked.connect(self.partie) self.ui.bouton_reset.clicked.connect(self.generer) self.ui.mode_jeu.currentIndexChanged.connect(self.change_mode) # IA de base self.ia = p.IAalea # Image de fond dans le widget principal palette = QtGui.QPalette() pixmap = QtGui.QPixmap("fond.png") palette.setBrush(QtGui.QPalette.Background, QtGui.QBrush(pixmap)) self.ui.conteneur.lower() self.ui.conteneur.stackUnder(self) self.ui.conteneur.setAutoFillBackground(True) self.ui.conteneur.setPalette(palette) # Objet peintre pour les pions self.painter = QtGui.QPainter() # Mise à jour du widget principal self.ui.conteneur.paintEvent = self.drawPlateau self.generer()
def __init__(self): super().__init__() # Configuration de l'interface utilisateur. # self.ui= uic.chargement ('fotrefichier,ui',self) self.ui = Ui_principale_ihm() self.ui.setupUi(self) # TO DO pixmap = QtGui.QPixmap("arrierPlan.png") pal = QtGui.QPalette() pal.setBrush(QtGui.QPalette.Background, QtGui.QBrush(pixmap)) self.ui.conteneur.lower() self.ui.conteneur.stackUnder(self) self.ui.conteneur.setAutoFillBackground(True) self.ui.conteneur.setPalette(pal) self.painter = QtGui.QPainter() self.ui.conteneur.paintEvent = self.drawEcosysteme1 y = self.ui.conteneur.height() x = self.ui.conteneur.width() self.ecosys = None #Ecosysteme(60,150,x*y//200, x,y) # Connexion entre lles boutons et les méthodes self.ui.bouton_pas.clicked.connect(self.un_pas) self.ui.bouton_gen.clicked.connect(self.generer) self.ui.bouton_sim.clicked.connect(self.simuler) self.timer = QtCore.QTimer() self.timer.timeout.connect(self.un_pas) self.generer()
def __init__(self): super().__init__() # Configuration de l'interface utilisateur. # Q4 self.ui = Ui_principale_ihm() self.ui.setupUi(self) # ---------- # Q9 : ajout de l'arriere Plan pal = QtGui.QPalette() pixmap = QtGui.QPixmap("arrierPlan.png") pal.setBrush(QtGui.QPalette.Background, QtGui.QBrush(pixmap)) self.ui.conteneur.lower() self.ui.conteneur.stackUnder(self) self.ui.conteneur.setAutoFillBackground(True) self.ui.conteneur.setPalette(pal) self.painter = QtGui.QPainter(self) # ---------------------------------------- #----------------Q5 y = self.ui.conteneur.height() x = self.ui.conteneur.width() self.ecosys = Ecosysteme(300, 150, 60, x, y) # Q6 : Connexion entre lles boutons et les méthodes # self.ui.bouton_pas.clicked.connect(self.un_pas) self.ui.bouton_gen.clicked.connect(self.generer) self.ui.bouton_sim.clicked.connect(self.simuler)
def __init__(self): super().__init__() # Configuration de l'interface utilisateur. self.ui = Ui_principale_ihm() self.ui.setupUi(self) # TO DO # palette = QtGui.QPalette() # pixmap = QtGui.QPixmap("arrierPlan.png") # palette.setBrush(QtGui.QPalette.Background,QtGui.QBrush(pixmap)) # self.setPalette(palette) self.painter= QtGui.QPainter() self.ui.conteneur.paintEvent=self.drawEcosysteme pal = QtGui.QPalette() pixmap = QtGui.QPixmap("arrierPlan.png") pal.setBrush(QtGui.QPalette.Background,QtGui.QBrush(pixmap)) self.ui.conteneur.lower() self.ui.conteneur.stackUnder(self) self.ui.conteneur.setAutoFillBackground(True) self.ui.conteneur.setPalette(pal) # modification de la taille de ta fenetre # self.ui.conteneur.resize(500,400) # label = QtGui.QLabel(self) # # affichage de l'objet image dans le label # pixmap = QtGui.QPixmap("arrierPlan.png") # label.setPixmap(pixmap) # # # affichage du label au centre de la fenêtre # self.ui.conteneur. # y = self.ui.conteneur.height() x= self.ui.conteneur.width() self.ecosys = Ecosysteme(60,150,x*y//20, x,y) # Connexion entre lles boutons et les méthodes self.ui.bouton_pas.clicked.connect(self.un_pas) self.ui.bouton_gen.clicked.connect(self.generer) self.ui.bouton_sim.clicked.connect(self.simuler) self.timer = QtCore.QTimer() self.timer.timeout.connect(self.un_pas)
class MonAppli(QtWidgets.QMainWindow): def __init__(self): super().__init__() #les noirs commencent self.couleur_active = 'N' # Configuration de l'interface utilisateur. self.ui = Ui_principale_ihm() self.ui.setupUi(self) # Liens entre boutons et fonctions self.ui.bouton_simuler.clicked.connect(self.partie) self.ui.bouton_reset.clicked.connect(self.generer) self.ui.mode_jeu.currentIndexChanged.connect(self.change_mode) # IA de base self.ia = p.IAalea # Image de fond dans le widget principal palette = QtGui.QPalette() pixmap = QtGui.QPixmap("fond.png") palette.setBrush(QtGui.QPalette.Background, QtGui.QBrush(pixmap)) self.ui.conteneur.lower() self.ui.conteneur.stackUnder(self) self.ui.conteneur.setAutoFillBackground(True) self.ui.conteneur.setPalette(palette) # Objet peintre pour les pions self.painter = QtGui.QPainter() # Mise à jour du widget principal self.ui.conteneur.paintEvent = self.drawPlateau self.generer() # def generer(self, mode): # if mode == 'partie simple': # #option pour jouer une partie simple # self.plateau_jeu = p.plateau() # self.joueurN = p.humain('N', self.plateau_jeu) # self.joueurB = p.IAalea('B', self.plateau_jeu) # self.ui.centralwidget.repaint() # else : # #option pour jouer en mode statistiques # dict_scores = {'joueurBlanc':0, 'joueurNoir':0, 'Egalite': 0} # # num_jeux = 10 #doit pouvoir etre choisi par l'utilisateur # for _ in range(num_jeux): # # self.joueurN = p.IAmax('N', self.plateau_jeu) # self.joueurB = p.IAalea('B', self.plateau_jeu) # self.partie() # scores = self.gagnant() # # if scores['B'] > scores['N']: # dict_scores['joueurBlanc'] += 1 # elif scores['N'] > scores['B']: # dict_scores['joueurNoir'] += 1 # else: dict_scores['Egalite'] += 1 # # return dict_scores def generer(self): '''Génère le plateau et les joueurs selon le choix du mode de jeu. Entrées ------- mode (int) : 0 -> IA vs IA 1 -> Joueur vs IA 2 -> Joueur vs Joueur ''' # On remet à zéro le fond car il est changé # quand on change le mode de jeu self.ui.bouton_reset.setStyleSheet("background-color: None") self.plateau_jeu = p.plateau() mode = self.ui.mode_jeu.currentIndex() # Choix du niveau des ia qui s'affronteront niveau_ia1 = self.ui.niveau_ia1.currentIndex() niveau_ia2 = self.ui.niveau_ia2.currentIndex() if niveau_ia1 == 0: self.ia = p.IAalea elif niveau_ia1 == 1: self.ia = p.IAmax elif niveau_ia1 == 2: self.ia = p.IAminmax else: self.ia = p.IAminmax2 if niveau_ia2 == 0: self.ia = p.IAalea elif niveau_ia2 == 1: self.ia = p.IAmax elif niveau_ia1 == 2: self.ia = p.IAminmax else: self.ia = p.IAminmax2 if mode == 0: self.ui.conteneur.mousePressEvent = lambda x: None self.joueurN = self.ia('N', self.plateau_jeu) self.joueurB = self.ia('B', self.plateau_jeu) elif mode == 1: self.ui.conteneur.mousePressEvent = self.clic self.joueurN = p.humain_graphique('N', self.plateau_jeu) self.joueurB = self.ia('B', self.plateau_jeu) else: self.ui.conteneur.mousePressEvent = self.clic_switch self.joueurN = p.humain_graphique('N', self.plateau_jeu) self.joueurB = p.humain_graphique('B', self.plateau_jeu) self.couleur_active = 'N' # Les noirs commencent self.ui.conteneur.repaint() def change_mode(self): # Pour indiquer qu'il faut appuyer sur le bouton # après avoir changé le mode de jeu self.ui.bouton_reset.setStyleSheet("background-color : green") if self.ui.mode_jeu.currentIndex() == 0: self.ui.bouton_simuler.setEnabled(True) self.ui.niveau_ia1.setEnabled(True) self.ui.niveau_ia2.setEnabled(True) elif self.ui.mode_jeu.currentIndex() == 1: self.ui.bouton_simuler.setEnabled(False) self.ui.niveau_ia1.setEnabled(False) self.ui.niveau_ia2.setEnabled(True) else: self.ui.bouton_simuler.setEnabled(False) self.ui.niveau_ia1.setEnabled(False) self.ui.niveau_ia2.setEnabled(False) def drawPlateau(self, qpainter): # pour tracer dans le widget self.painter.begin(self.ui.conteneur) qp = self.painter # Tracage des pions noirs for position in self.plateau_jeu: if self.plateau_jeu[position].couleur == 'N': # Pen dessine les contours # Brush remplit l'intérieur qp.setPen(QtCore.Qt.black) qp.setBrush(QtCore.Qt.black) qp.drawEllipse(position[1] * 50 + 5, position[0] * 50 + 4, 40, 40) # Tracage des pions blancs else: qp.setPen(QtCore.Qt.white) qp.setBrush(QtCore.Qt.white) qp.drawEllipse(position[1] * 50 + 5, position[0] * 50 + 4, 40, 40) # Tracage des positions où on peut placer un pion for position in self.plateau_jeu.listeValide(self.couleur_active): qp.setPen(QtCore.Qt.green) qp.setBrush(QtCore.Qt.green) qp.drawEllipse(position[1] * 50 + 20, position[0] * 50 + 19, 10, 10) self.painter.end() def clic(self, event): pos = (event.pos().y() // 50, event.pos().x() // 50) # Si le coup est valide, on accepte le clic if self.plateau_jeu.coupValide(pos, self.joueurN.couleur)[0]: self.tour_humainVSia(self.plateau_jeu, self.joueurN, self.joueurB, pos) def clic_switch(self, event): pos = (event.pos().y() // 50, event.pos().x() // 50) # Si le coup est valide, on accepte le clic if self.plateau_jeu.coupValide(pos, self.couleur_active)[0]: self.tour_humainVShumain(self.plateau_jeu, self.joueurN, self.joueurB, pos) def tour_iaVSia(self, plateau, j1, j2): '''Fonction qui fait avancer le jeu d'un tour, affiche l'état actuel du jeu dans le terminal et qui renvoie True s'il faut arrêter le jeu et False sinon. Entrées ------- plateau (objet plateau) : plateau sur lequel le jeu se déroule j1 (objet joueur) : premier joueur j2 (objet joueur) : second joueur Sortie ------ booléen : True s'il faut continuer le jeu, False sinon''' jouable1, jouable2 = True, True #Si le joueur peut jouer, il joue if plateau.jouable(j1.couleur): flag1 = True while flag1: try: j1.jouer() flag1 = False except ValueError: print("Veuillez jouer dans une case valide") else: jouable1 = False self.couleur_active = j2.couleur self.ui.conteneur.repaint() #Si le joueur peut jouer, il joue if plateau.jouable(j2.couleur): flag2 = True while flag2: try: j2.jouer() flag2 = False except ValueError: print("Veuillez jouer dans une case valide") else: jouable2 = False self.couleur_active = j1.couleur self.ui.conteneur.repaint() if jouable1 == False and jouable2 == False: return False #Arrêter le jeu else: return True #Continuer le jeu def tour_humainVSia(self, plateau, j1, j2, pos_humain): '''Fonction qui fait avancer le jeu d'un tour, affiche l'état actuel du jeu dans le terminal et qui renvoie True s'il faut arrêter le jeu et False sinon. Entrées ------- plateau (objet plateau) : plateau sur lequel le jeu se déroule j1 (objet joueur) : premier joueur j2 (objet joueur) : second joueur Sortie ------ booléen : True s'il faut continuer le jeu, False sinon''' jouable1, jouable2 = True, True #Si le joueur peut jouer, il joue if plateau.jouable(j1.couleur): flag1 = True while flag1: try: j1.jouer(pos_humain) flag1 = False except ValueError: print("Veuillez jouer dans une case valide") else: jouable1 = False self.couleur_active = j2.couleur self.ui.conteneur.repaint() time.sleep(0.5) #Si le joueur peut jouer, il joue if plateau.jouable(j2.couleur): flag2 = True while flag2: try: j2.jouer() flag2 = False except ValueError: print("Veuillez jouer dans une case valide") else: jouable2 = False self.couleur_active = j1.couleur self.ui.conteneur.repaint() if jouable1 == False and jouable2 == False: return False #Arrêter le jeu else: return True #Continuer le jeu def tour_humainVShumain(self, plateau, j1, j2, pos_humain): '''Fonction qui fait avancer le jeu d'un tour, affiche l'état actuel du jeu dans le terminal et qui renvoie True s'il faut arrêter le jeu et False sinon. Entrées ------- plateau (objet plateau) : plateau sur lequel le jeu se déroule j1 (objet joueur) : premier joueur j2 (objet joueur) : second joueur Sortie ------ booléen : True s'il faut continuer le jeu, False sinon''' jouable1, jouable2 = True, True if self.couleur_active == j1.couleur: #Si le joueur peut jouer, il joue if plateau.jouable(j1.couleur): flag1 = True while flag1: try: j1.jouer(pos_humain) flag1 = False except ValueError: print("Veuillez jouer dans une case valide") else: jouable1 = False self.couleur_active = j2.couleur self.ui.conteneur.repaint() time.sleep(0.5) else: #Si le joueur peut jouer, il joue if plateau.jouable(j2.couleur): flag2 = True while flag2: try: j2.jouer(pos_humain) flag2 = False except ValueError: print("Veuillez jouer dans une case valide") else: jouable2 = False self.couleur_active = j1.couleur self.ui.conteneur.repaint() if jouable1 == False and jouable2 == False: return False #Arrêter le jeu else: return True #Continuer le jeu def partie(self): flag = True while flag: flag = self.tour_iaVSia(self.plateau_jeu, self.joueurN, self.joueurB) def gagnant(self): score_b = 0 score_n = 0 for pion in list(self.plateau_jeu.values()): if p.pion.couleur == 'B': score_b += 1 else: score_n += 1 return {'B': score_b, 'N': score_n}
class MonAppli(QtWidgets.QMainWindow): def __init__(self): super().__init__() # Configuration de l'interface utilisateur. # self.ui= uic.chargement ('fotrefichier,ui',self) self.ui = Ui_principale_ihm() self.ui.setupUi(self) # TO DO self.painter = QtGui.QPainter(self.ui.conteneur) pixmap = QtGui.QPixmap("arrierPlan.png") scene =QtWidgets.QGraphicsScene() scene.setSceneRect(self.ui.conteneur.pos(), 0, pixmap.width(), pixmap.height()) scene.addPixmap(pixmap) self.setScene(scene) # pal = QtGui.QPalette() # pal.setBrush(QtGui.QPalette.Background,QtGui.QBrush(pixmap)) # self.ui.conteneur.lower() # self.ui.conteneur.stackUnder(self) # self.ui.conteneur.setAutoFillBackground(True) # self.ui.conteneur.setPalette(pal) # self.ui.conteneur.paintEvent = self.drawEcosysteme1 y = self.ui.conteneur.height() x= self.ui.conteneur.width() self.ecosys = None #Ecosysteme(60,150,x*y//200, x,y) # Connexion entre lles boutons et les méthodes self.ui.bouton_pas.clicked.connect(self.un_pas) self.ui.bouton_gen.clicked.connect(self.generer) self.ui.bouton_sim.clicked.connect(self.simuler) self.ecosys = Ecosysteme(60, 50, 100, self.ui.conteneur.width(), self.ui.conteneur.height()) self.timer = QtCore.QTimer() self.timer.timeout.connect(self.un_pas) # self.generer() def un_pas(self) : # print("un pas") # self.ecosys.unTour() # self.ui.centralwidget.update() if self.ecosys.nbtour > 0: print("Tourné") self.ecosys.unTour() self.ecosys.nbtour -= 1 self.ui.conteneur.update() # nécessaire pour la MAJ de l’IHM else: self.timer.stop() print("Fini") def generer(self) : print("Genérer") self.ecosys=Ecosysteme(60,50,100, self.ui.conteneur.width(),self.ui.conteneur.height()) self.ui.conteneur.update() # def simuler(self): # print("Simuler") # self.ecosys.simuler() # self.ui.centralwidget.update() def simuler(self): self.timer.start(100) def paintEvent(self, e): print('coucou') qp=self.painter qp.begin(self.ui.conteneur) self.drawEcosysteme(qp) # self.drawEcosysteme1(qp) qp.end() def drawEcosysteme(self,qp): # qp =self.painter # qp.setPen(QtCore.Qt.red) for ins in self.ecosys: # qp.drawEllipse(ins.x,ins.y, 10,5) if ins.car() == 'F' : qp.setPen(QtCore.Qt.green) qp.drawRect(ins.x,ins.y, 10,5) else: qp.setPen(QtCore.Qt.red) qp.drawEllipse(ins.x,ins.y, 10,5) def drawEcosysteme1(self,qp): qp = self.painter qp.begin(self.ui.conteneur) for ins in self.ecosys: # ins.dessin(qp) ins.dessinimage(qp) nour = self.nouriture() for n in nour : qp.setPen(QtCore.Qt.red) qp.drawEllipse(n[0],n[1], 1,1) qp.end() # affichage de la nouriture def nouriture(self): lstN=[] (x,y) =self.ecosys.dims for i in range(x) : for j in range (y) : if self.ecosys.case(i,j)==1: lstN.append((i,j)) return lstN
class MonAppli(QtWidgets.QMainWindow): # Q 3 def __init__(self): super().__init__() # Configuration de l'interface utilisateur. # Q4 self.ui = Ui_principale_ihm() self.ui.setupUi(self) # ---------- # Q9 : ajout de l'arriere Plan pal = QtGui.QPalette() pixmap = QtGui.QPixmap("arrierPlan.png") pal.setBrush(QtGui.QPalette.Background, QtGui.QBrush(pixmap)) self.ui.conteneur.lower() self.ui.conteneur.stackUnder(self) self.ui.conteneur.setAutoFillBackground(True) self.ui.conteneur.setPalette(pal) self.painter = QtGui.QPainter(self) # ---------------------------------------- #----------------Q5 y = self.ui.conteneur.height() x = self.ui.conteneur.width() self.ecosys = Ecosysteme(300, 150, 60, x, y) # Q6 : Connexion entre lles boutons et les méthodes # self.ui.bouton_pas.clicked.connect(self.un_pas) self.ui.bouton_gen.clicked.connect(self.generer) self.ui.bouton_sim.clicked.connect(self.simuler) def un_pas(self): print("un pas") # Q8 ----------------------------------------------- self.ecosys.unTour() self.ui.centralwidget.update() def generer(self): print("Genérer") # Q7 ----------------------------------------------- self.ecosys = Ecosysteme(60, 50, 100, self.ui.conteneur.width(), self.ui.conteneur.height()) self.ui.centralwidget.update() def simuler(self): print("Simuler") # Q8 ----------------------------------------------- self.ecosys.simuler() self.ui.centralwidget.update() # Question Partie II.1 ---------------------- def paintEvent(self, e): qp = self.painter qp.begin(self) self.drawEcosysteme(qp) qp.end() # -------------------------------------------- def drawEcosysteme(self, qp): qp.setPen(QtCore.Qt.red) for ins in self.ecosys: # qp.drawEllipse(ins.x,ins.y, 10,5) if ins.car() == 'F': qp.setPen(QtCore.Qt.green) qp.drawRect(ins.x, ins.y, 10, 5) else: qp.setPen(QtCore.Qt.red) qp.drawEllipse(ins.x, ins.y, 10, 5)
class MonAppli(QtWidgets.QMainWindow): def __init__(self): super().__init__() # Configuration de l'interface utilisateur. self.ui = Ui_principale_ihm() self.ui.setupUi(self) # TO DO # palette = QtGui.QPalette() # pixmap = QtGui.QPixmap("arrierPlan.png") # palette.setBrush(QtGui.QPalette.Background,QtGui.QBrush(pixmap)) # self.setPalette(palette) self.painter= QtGui.QPainter() self.ui.conteneur.paintEvent=self.drawEcosysteme pal = QtGui.QPalette() pixmap = QtGui.QPixmap("arrierPlan.png") pal.setBrush(QtGui.QPalette.Background,QtGui.QBrush(pixmap)) self.ui.conteneur.lower() self.ui.conteneur.stackUnder(self) self.ui.conteneur.setAutoFillBackground(True) self.ui.conteneur.setPalette(pal) # modification de la taille de ta fenetre # self.ui.conteneur.resize(500,400) # label = QtGui.QLabel(self) # # affichage de l'objet image dans le label # pixmap = QtGui.QPixmap("arrierPlan.png") # label.setPixmap(pixmap) # # # affichage du label au centre de la fenêtre # self.ui.conteneur. # y = self.ui.conteneur.height() x= self.ui.conteneur.width() self.ecosys = Ecosysteme(60,150,x*y//20, x,y) # Connexion entre lles boutons et les méthodes self.ui.bouton_pas.clicked.connect(self.un_pas) self.ui.bouton_gen.clicked.connect(self.generer) self.ui.bouton_sim.clicked.connect(self.simuler) self.timer = QtCore.QTimer() self.timer.timeout.connect(self.un_pas) def un_pas(self) : # print("un pas") # self.ecosys.unTour() # self.ui.centralwidget.update() if self.ecosys.nbtour > 0: print("Tourné") self.ecosys.unTour() self.ecosys.nbtour -= 1 # self.ui.conteneur.update() # nécessaire pour la MAJ de l’IHM else: if self.timer.isActive : self.timer.stop() QtWidgets.QMessageBox.question(self, 'Attention !', 'Le nombre de tours est épuisé', QtWidgets.QMessageBox.Ok) def generer(self) : print("Genérer") self.ecosys=Ecosysteme(60,50,100, self.ui.conteneur.width(),self.ui.conteneur.height()) # self.ui.conteneur.update() # def simuler(self): # print("Simuler") # self.ecosys.simuler() # self.ui.centralwidget.update() def simuler(self): self.timer.start(100) # def paintEvent(self, *args): # # qp = self.painter # qp.begin(self.ui.conteneur) # ## self.drawEcosysteme1(qp) # self.drawEcosysteme1(qp) # qp.end() # def drawEcosysteme(self,*arg): qp = self.painter qp.begin(self.ui.conteneur) # qp.setPen(QtCore.Qt.red) for ins in self.ecosys: # qp.drawEllipse(ins.x,ins.y, 10,5) if ins.car() == 'F' : qp.setPen(QtCore.Qt.green) qp.drawRect(ins.x,ins.y, 10,5) else: qp.setPen(QtCore.Qt.red) qp.drawEllipse(ins.x,ins.y, 10,5) qp.end() def drawEcosysteme1(self, qp): for ins in self.ecosys: # ins.dessin(qp) # self.ui.conteneur.setFocus(True) ins.dessinimage(qp) def drawEcosysteme2(self, qp): qp = self.painter qp.begin(self.ui.conteneur) for ins in self.ecosys: # ins.dessin(qp) # self.ui.conteneur.setFocus(True) ins.dessinimage(qp) qp.end()