Picross (Nonogram)

Résolu/Fermé
yenku Messages postés 11 Date d'inscription dimanche 4 novembre 2012 Statut Membre Dernière intervention 22 mars 2013 - 10 nov. 2012 à 14:59
yenku Messages postés 11 Date d'inscription dimanche 4 novembre 2012 Statut Membre Dernière intervention 22 mars 2013 - 10 nov. 2012 à 16:52
Bonjour,
Je doit faire un picross en java.
Mon problème est le suivant dans les fichiers nng
En voici un exemple:

NB_LINES = 3
NB_COLUMNS = 5
BEGIN_CONTENT
3
2 3 4
3
END_CONTENT

J'ai donc ente "BEGIN_CONTENT" et "END_CONTENT" les cases qui doivent être noircie par ligne je ne possède donc pas les indices a affiché au joueur.

Si quelqu'un pouvait m'aider sa serais sympas.

Cordialement Yenku.

1 réponse

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
10 nov. 2012 à 15:24
Dans ce sens là c'est assez simple, il suffit de compter le nombres de cases adjacentes, par exemple ici ce serait :

  0 1 3 1 0
1
3
1

Il faudrait par exemple utiliser une matrice de booléen, tu peux la remplir car tu connais toutes les cases qui sont à true (les autre sont à false), il faut ensuite déterminer pour chaque ligne et chaque colonne, la taille des groupes de true qui se suivent, et c'est gagné !

En fait la plus grosse difficulté c'est de s'assurer que le dessin est effectivement faisable, car il y a surement des grilles impossibles.
1
yenku Messages postés 11 Date d'inscription dimanche 4 novembre 2012 Statut Membre Dernière intervention 22 mars 2013 3
10 nov. 2012 à 15:39
Merci de ta réponse mais étant a la base un administrateur réseau et non un développeur.
Je débute donc en java et je ne voit pas comment faire la matrice en lisant les informations dans le fichier et donc je ne sais pas non plus comment faire pour déterminer la taille des groupes de true
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
10 nov. 2012 à 15:52
Pour lire les informations dans le fichier, tu devrais utiliser la classe Scanner, et parcourir le fichier ligne par ligne, il ne s'agit alors plus que d'un simple traitement des String (substring et split), la matrice est alors immédiate à créer et à remplir. Le traitement des groupes est à peine plus compliqué, il faut lire chaque ligne et colonne pour déterminer quand on passe de false à true (début de groupe) et de true à false (fin de groupe) puis d'ajouter la taille du groupe à une liste (LinkedList par exemple) différente pour chaque ligne/colonne.

Il n'y a vraiment rien de compliqué dans tout ça, les connaissances de base du Java suffisent largement, et si tu ne les connais pas, il faut les apprendre car elles sont essentielles !
0
yenku Messages postés 11 Date d'inscription dimanche 4 novembre 2012 Statut Membre Dernière intervention 22 mars 2013 3
10 nov. 2012 à 16:03
Alors j'ai fait sa mais sa n'a pas l'air de fonctionner
 boolean tab[]= new boolean [nb_l*nb_c];
		 
		 for(int k=0;k<(nb_l*nb_c);k++)
		 {
			 //System.out.println(tab[k]);
			 	File f4 = new File (completeFileName);
			    Scanner scanner4 = new Scanner (f4);
			//  System.out.println(completeFileName);
			    String x;
			    String y;
			    int cases= 0;
			    
			 
			    //System.out.println(cases);
			        try
			        {
			        	for (int i=4;i<nb_l;i++)
			        	{
			        	System.out.println(i);
			            t3 = scanner4.nextLine();
			            t4 = scanner4.nextLine();
			            t3 = scanner4.nextLine();
			            cases = scanner4.nextInt();
			 
			            System.out.println ("nombre de col"+" "+ cases);
			        	}
			            
			        }
			        catch (NoSuchElementException exception)
			        {
			           
			        }
			  
			 
			    scanner.close();
			 
			 if(cases!=0)
			 {
			  tab[k] = true;
			 System.out.println(tab[k]);
			 System.out.println(k);  
			 }
			 else{
				 tab[k]=false;
			 }
		 }
		    
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
10 nov. 2012 à 16:12
boolean tab[]= new boolean [nb_l*nb_c];
Ce que tu fais ici c'est un tableau, pas une matrice.

boolean[][] matrice= new boolean [nb_l][nb_c];
Remarque : en Java, on met plutôt les [] après le type et pas après le nom de la variable (ce ne sont pas des pointeurs comme en C, mais des objets de type Array)

De plus, tu ne connais pas normalement nb_l et nb_c au départ, tu ne les connais qu'une fois que tu les as lu dans le fichier, donc l'initialisation de la matrice ne peut pas être faite avant la lecture du fichier, pas plus que la boucle for, qui au passage ne se met pas ici car là tu vas lire autant de fois le fichier que tu n'as de cases (dont tu ne connais pas encore le nombre).

La structure du programme doit suivre celle du format de fichier :
1) ouverture du fichier (création du Scanner)
2) lecture du nombre de ligne et du nombre de colonnes
3) boucle sur chaque ligne pour initialise la matrice
0
yenku Messages postés 11 Date d'inscription dimanche 4 novembre 2012 Statut Membre Dernière intervention 22 mars 2013 3
10 nov. 2012 à 16:52
D'accord merci de ton aide sa fonctionne maintenant
0