Partage
  • Partager sur Facebook
  • Partager sur Twitter

Condition de victoire/Puissance 4

    13 janvier 2011 à 8:57:56

    Bonjour,

    Pour un projet personnel, je code un Puissance4, étant débutant en java (1ère année de BTS IRIS) et ayant un temps limité, je ne cherche pas à faire une oeuvre (je me sens obligé de justifier l'horreur :D).

    Je coince sur la condition de victoire, j'ai crée une succession de carrés pour le "quadrillage", et de simple cercle pour les jetons, je cherche maintenant à coder le "y en a 4 d'aligner, t'as gagné" x).

    Ah oui, j'utilise une bibliothèque (ACM).

    import java.awt.Color;
    import java.awt.event.MouseEvent;
    
    import acm.graphics.*;
    import acm.program.GraphicsProgram;
    
    
    public class PlayPuissance4 extends GraphicsProgram{
    
    	public static int COLONNE = 7;
    	public static int LIGNE = 6;
    	public int y1, y2, y3,y4 ,y5 ,y6 ,y7;
    	public double l_Jeton, h_Jeton;
    	public double l_Carre, h_Carre;
    	public double largeurFenetre, hauteurFenetre;
    	public int compteur;
    
    	/**
    	 * methodes qui reçoivent les coordonnées x et y et qui retourne un 
    	 * cercle de couleur correspondant au jeton de centre x et y, leur taille est d'environ la fenêtre/7
    	 */
    	public GOval creerJetonJ(double x, double y){
    
    		//définition de la largeur et de la hauteur des jeton
    		l_Jeton = (largeurFenetre)/COLONNE;
    		h_Jeton = (hauteurFenetre)/LIGNE;
    
    		//dimension de la fenêtre
    		hauteurFenetre = getHeight();
    		largeurFenetre = getWidth();
    
    		//création du jeton jaune
    		GOval jeton = new GOval (x, y, l_Jeton, h_Jeton);
    		jeton.setFilled(true);
    		jeton.setColor(Color.BLACK);
    		jeton.setFillColor(Color.YELLOW);
    		return(jeton);
    
    	}
    	public GOval creerJetonR(double x, double y){
    
    		//définition de la largeur et de la hauteur des jeton
    		l_Jeton = (largeurFenetre)/COLONNE;
    		h_Jeton = (hauteurFenetre)/LIGNE;
    
    		//dimension de la fenêtre
    		hauteurFenetre = getHeight();
    		largeurFenetre = getWidth();
    
    		//création du jeton rouge
    		GOval jeton = new GOval (x, y, l_Jeton, h_Jeton);
    		jeton.setFilled(true);
    		jeton.setColor(Color.BLACK);
    		jeton.setFillColor(Color.RED);
    		return(jeton);
    	}
    
    
    	public void run(){
    
    
    		//initialisation du compteur qui déterminera si le jeton est rouge ou jaune (paire/impaire)
    		compteur = 0;
    
    		//initialisation des compteurs de jeton/colonne
    		y1=y2=y3=y4=y5=y6=y7=6;
    
    		//dimension de la fenêtre
    		largeurFenetre = getWidth();
    		hauteurFenetre = getHeight();
    
    		//définition de la largeur et de la hauteur des "carrés" du quadrillage
    		l_Carre = (largeurFenetre)/COLONNE;
    		h_Carre = (hauteurFenetre)/LIGNE;
    
    		//déclarationd des variables de position de chaques "carrés" du quadrillage
    		double posX = 0;
    		double posY = 0; 
    
    		//création du quadrillage à partir de GRect
    		for(int x=0 ; x < LIGNE ;x++){
    
    			for(int y=0 ; y < COLONNE ; y++){
    
    				GRect carre = new GRect (posX,posY,l_Carre,h_Carre);
    
    				add(carre);
    
    				posX = posX + l_Carre; 
    
    			}
    
    			posY = posY + h_Carre;
    
    			posX = 0;
    
    		}
    		//écouteurs souris
    		addMouseListeners();
    	}
    
    	public void mousePressed(MouseEvent e){
    
    		//dimension de la fenêtre
    		largeurFenetre = getWidth();
    		hauteurFenetre = getHeight();
    
    		//définition de la largeur et de la hauteur des "carrés" du quadrillage
    		l_Carre = (largeurFenetre)/COLONNE;
    		h_Carre = (hauteurFenetre)/LIGNE;
    
    
    		//enregistrement de la position du clique
    		double pos_X = e.getX();
    		double pos_Y = e.getY();
    
    		//si le compteur est paire le jeton sera rouge
    		if(compteur%2==0){
    			//si le clic dans la 1 colonne
    			if(pos_X>0&&pos_X<l_Carre&&y1>=0){
    				add(creerJetonR(0, (h_Carre*y1)));
    				y1--;
    				compteur++;
    			}
    			//si le clic est dans la 2 colonne
    			if(pos_X>l_Carre&&pos_X<l_Carre*2&&y2>=0){
    				add(creerJetonR(l_Carre, (h_Carre*y2)));
    				y2--;
    				compteur++;
    			}
    
    			//si le clic est dans la 3 colonne
    			if(pos_X>l_Carre*2&&pos_X<l_Carre*3&&y3>=0){
    				add(creerJetonR(l_Carre*2, (h_Carre*y3)));
    				y3--;
    				compteur++;
    			}
    			//si le clic est dans la 4 colonne
    			if(pos_X>l_Carre*3&&pos_X<l_Carre*4&&y4>=0){
    				add(creerJetonR(l_Carre*3, (h_Carre*y4)));
    				y4--;
    				compteur++;
    			}
    			//si le clic est dans la 5 colonne
    			if(pos_X>l_Carre*4&&pos_X<l_Carre*5&&y5>=0){
    				add(creerJetonR(l_Carre*4, (h_Carre*y5)));
    				y5--;
    				compteur++;
    			}
    			//si le clic est dans la 6 colonne
    			if(pos_X>l_Carre*5&&pos_X<l_Carre*6&&y6>=0){
    				add(creerJetonR(l_Carre*5, (h_Carre*y6)));
    				y6--;
    				compteur++;
    			}
    			//si le clic est dans la 7 colonne
    			if(pos_X>l_Carre*6&&pos_X<l_Carre*7&&y7>=0){
    				add(creerJetonR(l_Carre*6, (h_Carre*y7)));
    				y7--;
    				compteur++;
    			}
    		}
    		//impaire = jeton jaune
    		else {
    			//si le clic est dans la 1 colonne
    			if(pos_X>0&&pos_X<l_Carre&&y1>=0){
    				add(creerJetonJ(0, (h_Carre*y1)));
    				y1--;
    				compteur++;
    			}
    			//si le clic est dans la 2 colonne
    			if(pos_X>l_Carre&&pos_X<l_Carre*2&&y2>=0){
    				add(creerJetonJ(l_Carre, (h_Carre*y2)));
    				y2--;
    				compteur++;
    			}
    
    			//si le clic est dans la 3 colonne
    			if(pos_X>l_Carre*2&&pos_X<l_Carre*3&&y3>=0){
    				add(creerJetonJ(l_Carre*2, h_Carre*y3));
    				y3--;
    				compteur++;
    			}
    			//si le clic est dans la 4 colonne
    			if(pos_X>l_Carre*3&&pos_X<l_Carre*4&&y4>=0){
    				add(creerJetonJ(l_Carre*3, (h_Carre*y4)));
    				y4--;
    				compteur++;
    			}
    			//si le clic est dans la 5 colonne
    			if(pos_X>l_Carre*4&&pos_X<l_Carre*5&&y5>=0){
    				add(creerJetonJ(l_Carre*4, (h_Carre*y5)));
    				y5--;
    				compteur++;
    			}
    			//si le clic est dans la 6 colonne
    			if(pos_X>l_Carre*5&&pos_X<l_Carre*6&&y6>=0){
    				add(creerJetonJ(l_Carre*5, (h_Carre*y6)));
    				y6--;
    				compteur++;
    			}
    			//si le clic est dans la 7 colonne
    			if(pos_X>l_Carre*6&&pos_X<l_Carre*7&&y7>=0){
    				add(creerJetonJ(l_Carre*6, (h_Carre*y7)));
    				y7--;
    				compteur++;
    			}
    		}
    	}
    }
    


    En vous remerciant d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
      13 janvier 2011 à 12:10:30

      Le plus simple c'est de faire une fonction que tu appelles à chaque fois qu'un joueur joue un coup valide.
      La fonction doit contenir 3 boucles : une qui vérifie les lignes horizontales, une qui vérifie les lignes verticales et la dernière (et la plus dure) qui vérifie les diagonales.
      • Partager sur Facebook
      • Partager sur Twitter
        15 janvier 2011 à 0:58:45

        Honnetement je ne vois pas autrement qu'avec un tableau :

        imagine un puissance 4 avec 10 lignes, 10 colonnes

        je ferais int[10][10] tableau;
        avec 0 pour les cases vide 1 pour les cases jaune 2 pour rouges.
        le tout est de récuperer les coordonnée de la souris et de remplir ton tableau correctement.

        Ensuite, comme la dit Volodim :

        function verifie_ligne()
        function verifie_colonne()
        function verifie_diagonale()
        • Partager sur Facebook
        • Partager sur Twitter
          15 janvier 2011 à 21:53:27

          Merci à tous les deux, je vais y réfléchir.
          Bonne continuation.
          • Partager sur Facebook
          • Partager sur Twitter

          Condition de victoire/Puissance 4

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown