Partage
  • Partager sur Facebook
  • Partager sur Twitter

Jeu Stratégie en 2D

Juste en utilisant Eclipse

Sujet résolu
    30 mai 2016 à 13:54:51

    Après avoir continuer le code et lu ton message j'ai plusieurs question :

    Pour le tableau, en utilisant : 

    public final static int BOARD_SIZE = 20;

    Je ne crée pas mon tableau en lui donnant 20 lignes et 20 colonnes avec les méthodes ?

    Vous me conseillez quoi entre une création aléatoire de la carte ou utiliser un carte fixe à mon niveau ?

    Ta classe Virtual, c'est ton application ? Nous avons déjà une application qui contient un main(), donc faut-il que je mette à la suite ce que tu m'as donné ?

    public class GeoStrat {
    	
    	public static void main(String[] args) {
    		
    		/* Read and register a player name */
    		
    		Scanner sc = new Scanner(System.in);
            System.out.println("Veuillez saisir votre nom :");
            String namescan = sc.nextLine();
            Joueur joueur1;
            joueur1 = new Joueur(namescan);
    		System.out.println(" ");
    		System.out.println("Bonjour " + joueur1.getName()+ " et bienvenue !");
    		System.out.println(" ");
    		System.out.println("Une partie de GeoStrat a été créée. Regarde la fenêtre qui a été créée ! ");
    		System.out.println(" ");
            Joueur Joueur = new Joueur(joueur1, sc);
            
    		InterfaceUtilisateur win = new InterfaceUtilisateur();
    		Audio son = new Audio(null);
    
    	}

    Je n'ai pas réussi à faire fonctionner le System.out.println que tu m'as passé en 1er methode :

    System.out.print(cases[i][j].getClass().toString() + " " + cases[i][j].displayVitesse() + "\t");

    J'ai eu une erreur du type : The operation + is undefined for the argument type(s) String, void.



    • Partager sur Facebook
    • Partager sur Twitter
      30 mai 2016 à 14:08:55

      1/ Si tu crée ton tableau, sauf que toute ses cases sont null car non instanciée. (pas de = new ForestCase())

      2/ Tu peux très bien faire une Carte fixe pour le moment au moins tu sais quel résultat attendre.

      3/ Oui Virtual c'est juste une petite classe pour tester l'heritage sur ton projet et te montrer comment cela marche (si tu copie colle mon code dans une classe Vitual, elle va marcher)

      4/ Pas oblige de mettre mon code en brut dans ton main, tu peux passer par encore d'autres objets pour les instanciation et mecanique de jeu (ce qu'il te faudra faire)

      5/ Case.displayXXX affiche un truc j'avais pas fait gaffe... utilise Case.getVitesse() du coup

      -
      Edité par BabC 30 mai 2016 à 14:10:10

      • Partager sur Facebook
      • Partager sur Twitter
        30 mai 2016 à 14:33:24

        D'accord, merci pour les explications :)

        Je me retrouve avec VirtualCarte qui est mon application, Carte qui est celle où va etre le tableau avec un affichage, ensuite j'ai Case qui est une classe abstraite, et ses dérivés Foret, Montagne, Plaine, Ville.

        Pour afficher mon tableau fixe comme je fais ? Je voudrais qu'il fasse du 20x20, pour le moment j'ai du mal sans affichage à tout bien cerné je pense...

        • Partager sur Facebook
        • Partager sur Twitter
          30 mai 2016 à 16:05:44

          Commence par faire une fonction initCarte() dans Carte qui sera appelée en début de programme pour générer ta Carte. tu peux l'appeler dans le constructeur de Carte par exemple.

          Elle aura cette tete la :

          void initCarte (){
           for (int i = 0 ; i < SIZE ; i++){
            for (int j = 0 ; j < SIZE ; j++){
             cases[i][j] = new ForestCases();
            }
           }
          }

          A mettre dans

          void Carte() {
           // ...
           initCarte();
           //...
          }



          Tu te retrouve avec cases[][] initialisé avec du SIZE*SIZE de case de foret.

          Pour l'affichage il te faut une méthode (inspire toi de mon System.out.println de toute a l'heure) qui se trouve dans Carte et qui va parser le tableau 2D cases.

          Dans ton application il te faudra créer une Carte. Son appel a son constructeur ( = new Carte()) va appeler la fonction initCarte(). Une fois creer tu pourra l'afficher avec carte.displayCarte();

          Ce qui te donne dans le genre :

          public class VirtualCarte {
          
           public static void main (String[] arg){
            Carte carte = new Carte(); // appel constructeur qui va initialiser la carte via initCarte()
            carte.displayCarte(); // affiche en console toute les cases : Type(Vitesse)
           }
          }



          • Partager sur Facebook
          • Partager sur Twitter
            30 mai 2016 à 18:32:10

            Ca fait plusieurs fois que tu utilise le mot "parser" est ce une faute de frappe ou ça veut dire quelque chose ? Parce que dans ce cas là je ne sais pas ce que ça veut dire :)

            J'ai une erreur du type :

            Exception in thread "main" java.lang.NullPointerException
            
            	at fr.iutvalence.info.dut.m2107.Carte.<init>(Carte.java:16) //Il me selectionne la ligne cases[i][j] = new CaseForet(); que j'ai mis dans le constructeur Carte()
            
            	at fr.iutvalence.info.dut.m2107.VirtualCarte.main(VirtualCarte.java:29)  // Il me selectionne la ligne : Carte carte = new Carte(); dans mon application.
            

            Tu me dis que la methode initCarte va dans le constructeur de Carte(); mais dans ce cas là, il faut que je crée une classe initCarte non ?

            • Partager sur Facebook
            • Partager sur Twitter
              31 mai 2016 à 9:19:04

              Parser (de l'anglais) c'est pour dire que tu va analyser/regarder toute les donnees d'une entite. Dans ton cas tu vas parser un tableau => tu va parcourir tous les indices

              Non non initCarte est juste une méthode qui va dans ta classe Carte pour instancier ton tableau.

              Fais voir ton code, car tu dois mal faire des instanciations ;)

              • Partager sur Facebook
              • Partager sur Twitter
                31 mai 2016 à 11:18:43

                public class VirtualCarte {
                
                	/**
                	 * @param args
                	 */
                	public static void main(String[] args) 
                	{
                		Case c0 = new CaseForet();
                        Case c1 = new CasePlaine();
                        Case c2 = new CaseVille();
                        Case c3 = new CaseMontagne();
                 
                        Case[] cases = { c0, c1, c2, c3 };
                        for (int i = 0; i < cases.length; i++) 
                        {
                	            cases[i].displayVitesse();
                	            cases[i].displayDefense();
                        }
                        
                        Carte carte = new Carte(); // appel constructeur qui va initialiser la carte via initCarte()
                        carte.afficherMap(); // affiche en console toute les cases : Type(Vitesse)
                    }
                }
                
                public class Carte {
                	
                	public final static int SIZE = 20;
                	
                	protected Case[][] cases;
                	/**
                	 * @param cases
                	 */
                	public Carte() 
                	{
                		for (int i = 0 ; i < SIZE ; i++){
                			for (int j = 0 ; j < SIZE ; j++)
                			{
                				cases[i][j] = new CaseForet();
                			}
                		 }
                	}
                
                
                	private Case[][] genererCarte()
                	{
                		Case[][] cases = new Case[SIZE][SIZE];
                		return cases;
                	}
                	
                	
                	public Case[][] getCases() 
                	{
                		return cases;
                	}
                
                	
                	public void setCases(Case[][] cases) 
                	{
                		this.cases = cases;
                	}
                
                	public void afficherMap() 
                	{
                	       for(int i = 0 ; i < cases.length ; i++)
                	       {
                		        for(int j = 0 ; j < cases.length ; j++)
                		        {
                		        	System.out.print(cases[i][j].getClass().toString() + " " + cases[i][j].getVitesse() + "\t");
                		        }
                	        System.out.println();
                	       }
                	}
                }
                
                abstract class Case 
                {
                
                	public abstract int getVitesse();
                	
                	public abstract int getDefense();
                	
                	public void displayVitesse()
                	{
                		System.out.println("Vitesse de deplacement : " + getVitesse() + "%");
                	}
                
                	public void displayDefense()
                	{
                		System.out.println("Bonus de défense : " + getDefense() + "%");
                	}	
                }
                
                class CaseForet extends Case{
                	
                	public int getVitesse(){
                		return 50;
                	}
                
                	public int getDefense() {
                		return 50;
                	}
                }
                Ah d'accord merci, je comprends mieux maintenant :) Tu peux imbriquée deux classes non ?
                • Partager sur Facebook
                • Partager sur Twitter
                  31 mai 2016 à 11:31:16

                  Maintenant ton main devrait ressembler a cela plutot :

                     public static void main(String[] args)
                      {
                                  
                          Carte carte = new Carte(); // appel constructeur qui va initialiser la carte via initCarte()
                          carte.afficherMap(); // affiche en console toute les cases : Type(Vitesse)
                      }


                  On peut imbriquer deux classes mais je pense que c'est loin de ton niveau... Je pense que tu veux dire autre chose du coup mais je ne vois pas quoi ^^

                  Tu dois avoir une erreur avec ton code car tu n'appelle jamais genererCarte(). Inutile d'ailleurs de retourner le tableau de Cases.

                  public class Carte {
                       
                      public final static int SIZE = 20;
                       
                      protected Case[][] cases= new Case[SIZE][SIZE];
                      /**
                       * @param cases
                       */
                      public Carte()
                      {
                          for (int i = 0 ; i < SIZE ; i++){
                              for (int j = 0 ; j < SIZE ; j++)
                              {
                                  cases[i][j] = new CaseForet();
                              }
                           }
                      }
                       
                      public Case[][] getCases()
                      {
                          return cases;
                      }
                  
                  //...



                  • Partager sur Facebook
                  • Partager sur Twitter
                    31 mai 2016 à 11:38:39

                    Oui, je m'en doutais, j'ai lu ça dans un bouquin de formation au Java, restons sur des choses pas trop compliqué :)

                    Oui j'avais créé genererCarte() au debut, je l'ai maintenant supprimer.

                    Plus d'erreur merci pour ta correction, seulement je me retrouve face à un autre soucis.

                    Toute mes classes font partie d'un même package, et lorsque je demande l'affichage de mon table j'ai :

                    Vitesse de deplacement : 50%

                    Bonus de défense : 50%

                    Vitesse de deplacement : 100%

                    Bonus de défense : 10%

                    Vitesse de deplacement : 50%

                    Bonus de défense : 75%

                    Vitesse de deplacement : 25%

                    Bonus de défense : 75%

                    class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50class fr.iutvalence.info.dut.m2107.CaseForet 50...(et il y en a pas mal encore après)...

                    Le soucis, c'est que "class fr.iutvalence.info.dut.m2107.CaseForet 50" est sur une même ligne :/

                    -
                    Edité par Vick.F 31 mai 2016 à 11:39:17

                    • Partager sur Facebook
                    • Partager sur Twitter
                      31 mai 2016 à 11:52:31

                      Tu te retrouve avec 20*20 lignes du coup ^^

                      Tu peux rajouter une ligne dans Case : abstract String getType(); et dans chaque classe fille String getType(){return"Forest"//ou Plain, ou City...}

                      Dans ta boucle tu fera case[i][j].getType plutot que le getClass.toString ;)

                      Petite coquille dans ta methode afficherCarte :

                                      for(int j = 0 ; j < cases[].length ; j++)

                      Ça ne gêne pas car ton tableau 2D est carre t'as de la chance ^^

                      • Partager sur Facebook
                      • Partager sur Twitter
                        31 mai 2016 à 12:08:58

                        Merci ! :)

                        Ca s'affiche de mieux en mieux !

                        Seulement pour ma petite coquille si je la corrige il me dis qu'il peut pas utiliser l'opérande < si après je met cases[] il est non défini pour le type d'argument de cases[], une erreur de syntaxe,  et cases cannot be resolved to a type..

                        Mais si ça ne gène pas mon affichage si je garde mon écriture d'avant, je peux donc la garder ?

                        Et je me retrouve avec qu'une seule ligne enfaite...j'ai pas les colonne et j'ai uniquement un affichage de Forêt 50, ce qui est déjà super :D Mais j'aimerais bien qu'il y ai les autres aussi.

                        • Partager sur Facebook
                        • Partager sur Twitter
                          31 mai 2016 à 12:15:06

                          cases[i] désolé x)

                          La 1ere boucle for permet de parser la 1ere dimension de ton tableau. La deuxieme permet de lire chaque tableau (cases[i] du coup) de la 1ere dimension pour pouvoir faire cases[i][j]. Il te faut donc bien utiliser cases[i] pour dire "Je veux la longueur de la 1ere dimension" ^^

                          Bizarre que tu ai tout sur une ligne... Fait voir ton code mis a jour !

                          • Partager sur Facebook
                          • Partager sur Twitter
                            31 mai 2016 à 13:13:12

                            package fr.iutvalence.info.dut.m2107;
                            
                            public class VirtualCarte {
                            
                            	/**
                            	 * @param args
                            	 */
                            	public static void main(String[] args) 
                            	{
                            		Case c0 = new CaseForet();
                                    Case c1 = new CasePlaine();
                                    Case c2 = new CaseVille();
                                    Case c3 = new CaseMontagne();
                             
                                    Case[] cases = { c0, c1, c2, c3 };
                                    for (int i = 0; i < cases.length; i++) 
                                    {
                            	            cases[i].displayVitesse();
                            	            cases[i].displayDefense();
                                    }
                                           
                                   
                                    Carte carte = new Carte(); // appel constructeur qui va initialiser la carte via initCarte()
                                    carte.afficherMap(); // affiche en console toute les cases : Type(Vitesse)
                                }
                            }
                            
                            package fr.iutvalence.info.dut.m2107;
                            
                            public class Carte {
                            	
                            	public final static int SIZE = 20;
                                
                                protected Case[][] cases= new Case[SIZE][SIZE];
                            	/**
                            	 * @param cases
                            	 */
                            	public Carte() 
                            	{
                            		for (int i = 0 ; i < SIZE ; i++){
                            			for (int j = 0 ; j < SIZE ; j++)
                            			{
                            				cases[i][j] = new CaseForet();
                            			}
                            		 }
                            	}
                            	
                            	public Case[][] getCases() 
                            	{
                            		return cases;
                            	}
                            
                            	
                            	public void setCases(Case[][] cases) 
                            	{
                            		this.cases = cases;
                            	}
                            
                            	public void afficherMap() 
                            	{
                            	       for(int i = 0 ; i < cases.length ; i++)
                            	       {
                            		        for(int j = 0 ; j < cases[i].length ; j++)
                            		        {
                            		        	System.out.print(cases[i][j].getType() + " " + cases[i][j].getVitesse() + "\t");
                            		        }
                            	       }
                            	}
                            }
                            
                            package fr.iutvalence.info.dut.m2107;
                            
                            abstract class Case 
                            {
                            
                            	public abstract int getVitesse();
                            	
                            	public abstract int getDefense();
                            	
                            	abstract String getType(); 
                            	
                            	public void displayVitesse()
                            	{
                            		System.out.println("Vitesse de deplacement : " + getVitesse() + "%");
                            	}
                            
                            	public void displayDefense()
                            	{
                            		System.out.println("Bonus de défense : " + getDefense() + "%");
                            	}	
                            }
                            
                            package fr.iutvalence.info.dut.m2107;
                            
                            class CaseForet extends Case{
                            	
                            
                            	public int getVitesse(){
                            		return 50;
                            	}
                            
                            	public int getDefense() {
                            		return 50;
                            	}
                            	
                            	String getType()
                            	{
                            		return "Foret";
                            	}
                            }
                            
                            package fr.iutvalence.info.dut.m2107;
                            
                            public class CaseMontagne extends Case{
                            
                            	@Override
                            	public int getVitesse() {
                            		return 25;
                            	}
                            
                            	@Override
                            	public int getDefense() {
                            		return 75;
                            	}
                            	
                            	String getType()
                            	{
                            		return "Montagne";
                            	}
                            }
                            • Partager sur Facebook
                            • Partager sur Twitter
                              31 mai 2016 à 13:47:18

                              Oui du coup il te manque un saut de ligne a la fin des 20 cases ^^

                              Dans afficherMap() :

                                         for(int i = 0 ; i < cases.length ; i++)
                                         {
                                              for(int j = 0 ; j < cases[i].length ; j++)
                                              {
                                                  System.out.print(cases[i][j].getType() + " " + cases[i][j].getVitesse() + "\t");
                                              }
                               System.out.println(); // Des que l'on a fait une ligne, on saute une ligne
                                         }

                              Quelques conseils :

                              • Soit coherent au niveau de tes noms : essaie le plus possible de tout mettre en anglais et ne mélanges pas les deux (afficherMap() pour la classe Carte ...).
                              • Tu as des getter et setter pour cases[][] donc passe le en private et non en protected. (meme private final).
                              • Enleve dans ton main les premiere lignes, elles te sont inutiles maintenant ;) Tu peux les regrouper dans une fonction test(); si tu veux pour les tester plus tard pour verifier si cela marche toujours.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                31 mai 2016 à 14:12:11

                                Ah oui bien vu ! :)

                                C'est vrai tu as raison pour l'anglais, je pense qu'on va renommer nos classes et méthodes. Si je passe mes getter et setter en private il me met un Attention, les valeurs ne sont pas utilisées localement, je sais que ça ne craint rien un attention c'est juste préventif, mais je les utilise uniquement ailleurs.

                                Oui il faut qu'on réalise un jeu de test, merci pour le tips :)

                                Comment je fais pour avoir des cases différentes de forêt qui s'affiche ?

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  31 mai 2016 à 14:37:41

                                  Les getters et setters sont a mettre en public ;)

                                  Ils sont utiles lorsque la variable est en private justement

                                  Lors de ton initialisation, tu fais caes[i][j] = new ForestCase();. Donc il suffit de faire new PlainCase() et tu aura que des plaine etc... soit tu genere aleatoirement, soit tu dis que les contour de map sont de la forest (i, j == 0 ou == cases[i].length-1), l'interieur est fait de moitie plaine, moitie montagne ou autre... A toi de jouer avec des if et des modulo pour remplir correctement ton tableau =)

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    31 mai 2016 à 14:49:03

                                    Ca marche, et bien je ne vais pas plus t'embeter !

                                    Merci beaucoup pour toute l'aide que tu m'as apporté et merci pour le temps que tu as pu y consacrer ! :)

                                    Merci pour tes explications, je vais mettre ce topic en résolu !

                                    A une prochaine fois, bonne après-midi ! :)

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      31 mai 2016 à 14:58:52

                                      Pas de soucis bon courage pour la suite ;)
                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      Jeu Stratégie en 2D

                                      × 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