Mastermind

Soyez le premier à donner votre avis sur cette source.

Vue 16 007 fois - Téléchargée 1 858 fois

Description

Jeu de mastermind avec ajout de resolution, base sur un code original de Nightman150 publié en 2004: http://www.javafr.com/codes/JEU-MASTERMIND-COMPLET-AVEC-GRAPHIQUES_22777.aspx.

Source / Exemple :


import java.*;
import java.lang.*;
import java.io.FileOutputStream;
import java.io.*;

class SEssai {
   public int nNbNoirs;
   public int nNbBlancs;
   public int[] couleurs=new int[50];
}

class mastermind
{
  public int rd(int nb_couleurs)
  {
  int result=(int)(Math.random()*10);
    if(result<nb_couleurs&&result>=0)
    {
    return result;
    }
  return rd(nb_couleurs);
  }
    
  public int random(int nb_couleurs)
  {
  int i=new mastermind().rd(nb_couleurs);
  return i;
  }
  
  public int evaluation(int []pEssai,int []pCombinaison,int nb_pions,int nb_couleurs)
  {
    int[][] couleur=new int[50][2];
    int c;
    int nResultat;
    for(c=0;c<nb_couleurs;c++)
    {
    couleur[c][0]=couleur[c][1]=0;
    }
    for(c=0;c<nb_pions;c++)
    {
    couleur[pEssai[c]][0]++;
    couleur[pCombinaison[c]][1]++;
    }
    nResultat=0;
    for(c=0;c<nb_couleurs;c++)
    {
     nResultat+=couleur[c][(couleur[c][0]>couleur[c][1] ? 1 : 0)];
    }
    for(c=0;c<nb_pions;c++)
    {
     nResultat+=(pEssai[c]==pCombinaison[c] ? 1 : 0)*100;
    }
    return nResultat-nResultat/100;
  }
  
  public int recherche(int []couleurs,int profondeur,int[][]essais,int nNbEssais,int []pCombinaison,int nb_pions,int nb_couleurs)
  {
    int essai;
    int nNbBlancs,nNbNoirs;
    int c;
	
	if(profondeur==nb_pions)
	{
		for(essai=0;essai<nNbEssais;essai++)
		{
		nNbNoirs=new mastermind().evaluation(couleurs,essais[essai],nb_pions,nb_couleurs);
		nNbBlancs=nNbNoirs%100;
		nNbNoirs/=100;
   
			if(!(nNbBlancs==evaluation(essais[essai],pCombinaison,nb_pions,nb_couleurs)%100 &&  nNbNoirs==evaluation(essais[essai],pCombinaison,nb_pions,nb_couleurs)/100)) 
			{
			break;
			}
		}
	return(essai<nNbEssais ? 0 : 1);
	}
	
	for(c=0;c<nb_couleurs;c++)
	{
	couleurs[profondeur]=c;
		if(new mastermind().recherche(couleurs,profondeur+1,essais,nNbEssais,pCombinaison,nb_pions,nb_couleurs)==1) 
		{
		return 1;	
		}
    }
    return 0;
  }
  
  public String convertn2c(int number)
  {
  String str="";
  switch (number) {
            case 0:  str="Rouge"; break;
            case 1:  str="Vert"; break;
            case 2:  str="Jaune"; break;
            case 3:  str="Orange"; break;
            case 4:  str="Bleu"; break;
            case 5:  str="Violet"; break;
            
            default: System.out.println("Invalid color");break;
        }
return str;
  }
  
  public int[][] solve(int colors,int pieces,int []solution)
  {
  int [][]result=new int[10][4];
    try
    {
      /*if (args.length <3 || args.length >3)
      {
      System.err.println("Usage: java mastermind couleurs pions experiences");
      System.exit(1);
      }

  • /
//k: nombre d'experiences //System.out.print(colors+" couleurs " +pieces+" pions \r\n\r\n"); //for(int k=0;k<pieces;k++) //{ //int[] solution=new int[pieces]; //System.out.print("Combinaison No " + k + ": "); //j: nombre de pions for(int j=0;j<pieces;j++) { //solution[j]= new mastermind().random(colors); //System.out.print(solution[j]+ " "); //System.out.print(new mastermind().convertn2c(solution[j])+ " "); } //System.out.println("\r\n"); int bFini=0; int nNbEssais=0; int i; SEssai pCour=new SEssai(); int [][]pEssais=new int[100][pieces]; for(i=0;i<pieces;i++) { pEssais[0][i]=0; } while(bFini==0) { pCour.couleurs=pEssais[nNbEssais]; nNbEssais++; new mastermind().recherche(pCour.couleurs,0,pEssais,nNbEssais-1,solution,pieces,colors); pCour.nNbNoirs=new mastermind().evaluation(pCour.couleurs,solution,pieces,colors); pCour.nNbBlancs=pCour.nNbNoirs%100; pCour.nNbNoirs/=100; for(int c=0;c<pieces;c++) { //System.out.print(pCour.couleurs[c]); //System.out.print(new mastermind().convertn2c(pCour.couleurs[c])+" "); result[nNbEssais][c]=pCour.couleurs[c]; } //System.out.print(" Noirs: "+pCour.nNbNoirs+" Blancs: "+pCour.nNbBlancs+"\r\n"); //System.out.print("\r\n"); bFini=(pCour.nNbNoirs==pieces ? 1 : 0); } System.out.print("Mastermind resolu en "+ nNbEssais+" coups\n\n"); //System.out.println(new mastermind().convertn2c(1999)); //} } catch(Exception e) { e.printStackTrace(); } return result; } }

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
19 décembre 2016
23
Salut,

J'abonde dans le sens du commentaire précédent pour ce qui est de la qualité du code.
Encore une fois, par pitié, surveillez les évènements MouseReleased ou bien MouseClicked + MouseDragged plutôt que seulement MouseClicked. 1 fois sur 2 mon "clic" n'est pas pris en compte...
La résolution qui tu as ajoutée fonctionne, mais il y a un petit problème au niveau de l'affichage. Si j'ai fait 6 essais, et qu'elle trouve une solution en 5 essais, mon 6è essai reste visible.
La méthode de résolution que tu as ajoutée n'est pas très efficace, un algo "intelligent" ne dépasse pas les 5 essais. -> 5-guess de Knuth (un Dieu de l'algorithmique).
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
306
Le produit final est convenable mais le coté conception n'est pas formidable, tu aurais pu isoler une partie métier (même petite) et créer tes pions en étendant JPanel.

Sinon, tu ne respectes pas les normes d'écriture en Java et tes noms de fonction ne sont pas assez explicites comme cette fonction rd qui retourne un int, sans javadoc...

De plus les parties de code commentées donnent un coté non terminé à ton code.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (bothan)