Programmatino tetris en java

Fermé
velocity Messages postés 204 Date d'inscription lundi 8 juin 2009 Statut Membre Dernière intervention 16 octobre 2014 - 8 févr. 2010 à 11:36
velocity Messages postés 204 Date d'inscription lundi 8 juin 2009 Statut Membre Dernière intervention 16 octobre 2014 - 8 févr. 2010 à 22:26
Bonjour à tous,
comme je l'ai déjà postez sur un autre poste, je suis en train de programmer un jeu tetris en java et la je rencontre quelques problème dans la réalisation d'un joueur artificiel . En fait je ne sese d'avoir ce message d'erreur :

Exception in thread "Thread-0" java.lang.StackOverflowError
at sun.nio.cs.SingleByteEncoder.encodeArrayLoop(Unknown Source)
at sun.nio.cs.SingleByteEncoder.encodeLoop(Unknown Source)
at java.nio.charset.CharsetEncoder.encode(Unknown Source)
at sun.nio.cs.StreamEncoder.implWrite(Unknown Source)
at sun.nio.cs.StreamEncoder.write(Unknown Source)
at java.io.OutputStreamWriter.write(Unknown Source)
at java.io.BufferedWriter.flushBuffer(Unknown Source)
at java.io.PrintStream.write(Unknown Source)
at java.io.PrintStream.print(Unknown Source)
at java.io.PrintStream.println(Unknown Source)
at ElementDeJeux.AIPlayer.evaluer(AIPlayer.java:46)
at ElementDeJeux.AIPlayer.evaluer(AIPlayer.java:74)
at ElementDeJeux.AIPlayer.evaluer(AIPlayer.java:60)
at ElementDeJeux.AIPlayer.evaluer(AIPlayer.java:74)
at ElementDeJeux.AIPlayer.evaluer(AIPlayer.java:60)
at ElementDeJeux.AIPlayer.evaluer(AIPlayer.java:74)
at ElementDeJeux.AIPlayer.evaluer(AIPlayer.java:60)
....

pouvez vous m'expliquez le pb ? et merci d'avance
A voir également:

4 réponses

Utilisateur anonyme
8 févr. 2010 à 12:44
salut
ta fonction ElementDeJeux.AIPlayer.evaluer() est récursive et s'appelle elle meme de maniere infinie.
0
velocity Messages postés 204 Date d'inscription lundi 8 juin 2009 Statut Membre Dernière intervention 16 octobre 2014 6
8 févr. 2010 à 13:01
Bonjour progjv et merci pour votre réponse rapide,
En effet c'est une methode récurise que j'essaie d'ecrire ,elle me permet de trouver la meilleur positionpour la pieceEnJeu . elle doit essayer toutes les possibilités de deplacement et de rotation pour enfin ne retourner qu'une seule position. mais j'ai du mal à la réaliser.
voici ce que j'ai fait jusqu'à maintenant :

	public ModeleGrille evaluer(ModeleGrille mg,int enableRotation){
		try{
			System.out.println("xpos: "+mg.pieceEnJeu.xpos + "ypos: " + mg.pieceEnJeu.ypos);
			if(enableRotation == 1){
				//essayer les rotations possibles
				ModeleGrille mgClone = (ModeleGrille)mg.clone();
				int i =0;
				do{
					System.out.println("tourner");
					if(mg.pieceEnJeu.tourner()){
						mgClone.transitions.add(1);
						//calculer le score de la grille;
						mgClone.getScore();
						//essayer les transitions possibles vers la gauche
						evaluerGauche(mg);
						//essayer les transitions possibles vers la droite
						evaluerDroite(mg);
						//essayer les transitions possibles vers la droite
						evaluerBas(mg);
					}else{
						break;
					}
					i++;
				}while(i<4);
			}
			
			//retourner le modele qui donne le meilleur score à terminer

		}catch(CloneNotSupportedException cnse){
			cnse.printStackTrace();
		}
		return null;
	}
	
	public ModeleGrille evaluerGauche(ModeleGrille mg){
		try{
			if(mg.pieceEnJeu.gaucheVide()){		
				ModeleGrille mgClone = (ModeleGrille)mg.clone();
				System.out.println("gauche");
				mgClone.pieceEnJeu.deplacer_gauche();
				mgClone.transitions.add(2);
				//calculer le score de la grille;
				mgClone.getScore();
				return evaluer(mgClone,1);
			}
		}catch(CloneNotSupportedException cnse){
			cnse.printStackTrace();
		}
		return null;
	}
	
	public ModeleGrille evaluerDroite(ModeleGrille mg){
		try{
			if(mg.pieceEnJeu.droiteVide()){		
				ModeleGrille mgClone = (ModeleGrille)mg.clone();
				System.out.println("droite");
				mgClone.pieceEnJeu.deplacer_droite();
				mgClone.transitions.add(2);
				//calculer le score de la grille;
				mgClone.getScore();
				return evaluer(mgClone,1);
			}
		}catch(CloneNotSupportedException cnse){
			cnse.printStackTrace();
		}
		return null;
	}
	
	public ModeleGrille evaluerBas(ModeleGrille mg){
		try{
			if(mg.pieceEnJeu.gaucheVide()){		
				ModeleGrille mgClone = (ModeleGrille)mg.clone();
				System.out.println("gauche");
				mgClone.pieceEnJeu.deplacer_gauche();
				mgClone.transitions.add(2);
				//calculer le score de la grille;
				mgClone.getScore();
				return evaluer(mgClone,1);
			}else{
				//supprimer les lignes completes
				mg.clean();
				//calculer le score de la grille;
				mg.getScore(); 
				return mg;
			}
		}catch(CloneNotSupportedException cnse){
			cnse.printStackTrace();
		}
		return null;
	}


à l'affichage dana la console je remarque que la piece ne fait que tourner et ce deplacer à gauche à l'infinie .
je ne sais pas comment regler ce pb .
0
Utilisateur anonyme
8 févr. 2010 à 20:21
dur dur de débugger comme ca.
il va falloir chercher, ca fait partie intégrante du développement :)

at ElementDeJeux.AIPlayer.evaluer(AIPlayer.java:74)
at ElementDeJeux.AIPlayer.evaluer(AIPlayer.java:60)

Ici se trouve la solution. Bon courage =)
0
velocity Messages postés 204 Date d'inscription lundi 8 juin 2009 Statut Membre Dernière intervention 16 octobre 2014 6
8 févr. 2010 à 22:26
j'essaye...merci comme meme pour votre aide
0