Alors voilà. Je veux réaliser un applet faisant appel à plusieurs classes.
Mon but est de faire une map.
J'ai une première classe nommée AppletJeu dans laquelle il y a un init(). Elle fait appel à la classe carte.class. Et c'est justement avec celle ci que j'ai des problemes. Je voudrais faire une connexion à mysql, récuperer une valeur pour l'attribut "M", et selon qu'il vaut 1 ou 2, afficher deux map différentes. Mais voilà, si je mets un init() dans cette classe, l'applet m'affiche un carré blanc, comme si il n'avait pas attribué de valeur à mon cases[][] qui defini ma map. Et quand j'enlève ce init(), impossible de me connecter à la BDD... Je vous mets mon code, si quelqu'un peut m'aider, ça serait gentil... Merci O dieux du java...
import java.sql.*;
import java.awt.Image;
/**
* Cette classe représente la carte de jeu
*/
public class Carte {
private int cases [][];
public void init(){
try {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/testi","root","");
Statement st = connection.createStatement();
ResultSet rs = st.executeQuery(
"SELECT * FROM perso WHERE pseudo =\"edin\""
);
if (rs.getInt("M")==1){
int cases[][] = {
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,2,0,0,0,0,0},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{1,0,0,1,1,2,1,0,1,0,1,1,1,0,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,1,0,2,1,1,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,1,0,2,1,0,1,0,1,1,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,1,1,2,1,0,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1,1,0,0,0,2,0,0,0,0,0},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0}};
this.cases = cases;
}
if (rs.getInt("M")==2){
int cases [][] ={
{2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,1,1,1,0,0,1,0,0,0,0,2,0,2,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,2,1,0,0,1,0,1,0,2,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,1,0,2,1,1,1,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,2,0,1,0,2,0,0,0,2,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,2,0,0,0,0,0},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{1,0,0,1,1,2,1,0,1,0,1,1,1,0,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,1,0,2,1,1,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,1,0,2,1,0,1,0,1,1,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,1,1,2,1,0,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,2,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,2,0,0,0,0,2,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1,1,0,0,0,2,0,0,0,0,0},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0}};
this.cases = cases;}
else{
int cases [][] ={
{2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,1,1,1,0,0,1,0,0,0,0,2,0,2,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,2,1,0,0,1,0,1,0,2,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,1,0,2,1,1,1,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,2,0,1,0,2,0,0,0,2,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,2,0,0,0,0,0},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,2,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{1,0,0,1,2,2,1,0,1,0,1,1,1,0,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,1,2,2,1,1,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,1,2,2,1,0,1,0,1,1,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,1,2,2,1,0,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,2,2,0,0,0,0,0,2,0,0,0,0,2,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,2,2,0,0,0,0,2,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,1,1,1,2,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0},
{1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1,1,0,0,0,2,0,0,0,0,0},
{1,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,1,2,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0}};
this.cases = cases;}
rs.close(); // Fermeture
st.close();
connection.close();
} catch(Exception e) {
System.out.println("Erreur au chargement du driver : " + e.toString());
}
}
// Cette variable définit la carte de jeu : elle indique le type de chacune des 20x20 cases.
// Dans notre programme, le type 0 correspond à un carré d'herbe, et le type 1 correspond à un rocher
// ce tableau indique que les cases de type 0 sont praticables, et pas celles de type 1
private boolean terrainsPratiquables[] = {true, false, true};
// ce tableau contiendra les images rattachées aux types de case 0 et 1
private Image imagesTerrains[] = new Image[3];
/* Constructeur */
public Carte(Image terrain0, Image terrain1, Image terrain2) {
imagesTerrains[0] = terrain0; // pour les cases de type 0, on affichera l'image terrain0 (herbe)
imagesTerrains[1] = terrain1;
imagesTerrains[2] = terrain2;// pour les cases de type 1, on affichera l'image terrain1 (rocher)
}
/* Sert à vérifier que la case dont les coordonnées sont en paramètres, est accessible */
public boolean casePratiquable(int caseX, int caseY) {
// on vérifie que l'emplacement n'est pas en dehors des limites de la carte
if (caseX < 0 || caseX >=30 || caseY < 0 || caseY >=30) {
return false;
// puis on regarde dans le modèle si l'emplacement est pratiquable ou non
} else if(!terrainsPratiquables[cases[caseY][caseX]]) {
return false; // s'il ne l'est pas, on retourne false
// si c'est OK, on retourne true
} else {
return true;
}
}
/* Methodes get et set */
public int[][] getCases() {
return cases;
}
public boolean[] getTerrainsPratiquables() {
return terrainsPratiquables;
}
public Image[] getImagesTerrains() {
return imagesTerrains;
}
public void setcases(int[][] _cases) {
cases = _cases;
}
public void setTerrainsPratiquables(boolean[] _terrainsPratiquables) {
terrainsPratiquables = _terrainsPratiquables;
}
public void setImagesTerrains (Image[] _imagesTerrains) {
imagesTerrains = _imagesTerrains;
}
}
Jusque là ça semble correct :)
Pourquoi pas. Mais que veut dire exactement "faire appel" ?
Pourquoi mettre une méthode init() dans la classe carte ?
Pas de raison
Le nom init semble indiquer que tu n'as pas bien compris comment est constituée une applet.
Et pourquoi ça ?
Bon tu veux faire une applet. C'est à dire une classe qui étend Applet ou JApplet. C'est cette classe, AppletJeu si j'ai bien compris, qui doit avoir une méthode init. Pas les autres classes.
Tu n'as aucune raison de mettre une méthode init dans Carte. Simplement dans cette classe tu écris une méthode sous un nom quelconque, par exemple getMap et dans la méthode init de AppletJeu, tu instancie ta classe Carte et tu appelles la méthode gteMap
dans AppletJeu:
Tu as bien raison, Java est odieux :lol:
j'ai mis init() dans ma classe carte car sans ça, il me mettait des erreur à la compilation. quand je disais fait appel à, je voulais dire, utilise le constructeur, enfin c t une facon de dire que je savais qu'il ne fallait pas de init() mais je ne savais pas trop comment faire differemment... je vais essayer avec ton getMap... je te tien u courant... merci
Bon, tu vas surement dire que je comprend rien, mais voila, j'avais deja crré une map dans AppletJeu, donc g mis le getMap jsute apres... Il me met "non static method getMap() canot be referenced from a static context". Mais que diable veut dire cete phrase? ... voila le code de AppletJeu si ca peut vous aider a comprendre, et donc m'aider moi...
import java.awt.Color;
import java.awt.Image;
import java.awt.Container;
import java.awt.MediaTracker;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import javax.swing.*;
import java.net.URL;
import java.awt.*;
import java.applet.*;
/**
* Cette classe est l'applet, c'est le point d'entrée du jeu. C'est elle qui prend
* en compte les actions du joueur : selon les touches sur lesquelles il appuie,
* cette classe appelle des méthodes du Modèle (classe ModelJeu).
* Cette classe est le Contrôleur dans l'architecture MVC (Modèle-Vue-Contrôleur)
*/
public class AppletJeu extends JApplet implements MouseListener {
// déclaration des variables de classe
private AffichageJeu affichage; // gèrera l'affichage du jeu
private ModeleJeu modele; // gèrera les données et traitements du jeu
private MediaTracker surveillantImages; // servira à vérifier que toutes les images ont bien été chargées par l'applet
int XSouris,YSouris;
private int deplacementX, deplacementY;
/* Initialise l'applet. Cette fonction est automatiquement appelée lors du chargement de l'applet */
public void init() {
surveillantImages = new MediaTracker(this);
// instanciation du modèle
modele = new ModeleJeu();
// on rajoute le joueur dans le modèle
Image joueurImage = getImage(getCodeBase(), "Images/tete.gif");
// getCodeBase() renvoie le chemin du dossier contenant les classes
surveillantImages.addImage(joueurImage, 0);
modele.setJoueur(new Joueur(9,9, joueurImage));
// on rajoute la carte dans le modèle
Image herbeImage = getImage(getCodeBase(), "Images/herbe.gif");
Image rocherImage = getImage(getCodeBase(), "Images/rocher.gif");
Image routedroite = getImage(getCodeBase(), "Images/routedroite.gif");
surveillantImages.addImage(herbeImage, 1);
surveillantImages.addImage(rocherImage, 2);
surveillantImages.addImage(routedroite,3);
modele.setCarte(new Carte(herbeImage, rocherImage, routedroite));
Carte.getMap();
// instanciation de l'affichage
affichage = new AffichageJeu(modele);
modele.setAffichage(affichage);
getContentPane().add(affichage);// on rajoute l'objet "affichage" au conteneur de composants graphiques de l'applet.
// on attend que toutes les images aient bien été chargées avant de continuer
//getContentPane().add(salut);
try {
surveillantImages.waitForAll();
} catch (InterruptedException e) {
return;
}
//ajout d'un écouteur de souris
addMouseListener(this);
}
public void mouseClicked(MouseEvent e)
{
//salut.setText("bnjouterr");
XSouris = e.getX(); //obtient la coordonnée en X
YSouris = e.getY(); // obtient celle en Y
//deplacementX = 20*XSouris;
//deplacementY = 20*YSouris;
modele.deplacerJoueur(XSouris/20, YSouris/20); //transmet les coordonnées à deplacerJoueur dans ModeleJeu.
}
public void mousePressed(MouseEvent evt){}
public void mouseReleased(MouseEvent evt){}
public void mouseEntered(MouseEvent evt){}
public void mouseExited(MouseEvent evt){}
/* Cette fonction se déclenche lorsqu'une touche du clavier est enfoncée. */
}
Oui...
Non :!: :!:
Que tu ne comprends rien et surtout (c'est là que c'est grave) que tu ne fais pas ce qu'on te dit.
Je t'ai dit:
Carte carte = new Carte();
carte.getMap()
Tu le faisais et ça marchait au lieu de cela tu fais:
Là tu crées certes une carte MAIS la référence sur l'objet créé n'est pas conservée et tu ne peux pas t'en servir. La carte que tu crées ne sert qu'à la classe modèle qui reçoit la référence. Cette référence est invisible dans le code qui suit la ligne.
Et là Carte n'est pas une référence (forcément, y en a pas, de référence) mais un nom de classe. En Java une classe n'est pas un objet. Si tu appelles une méthode d'une classe, cette méthode doit *obligatoirement* être static, et le compilateur a raison de te jeter. Tiens même que moi à sa place, je t'aurais collé mille balles d'amende :)
Donc si tu avais fait comme je t'ai dit (en adaptant pour ton cas), cela donnait
Note bien carte.getMap() et non Carte.getMap()
Parce que là carte est une référence sur un *objet* créé par new.
Classe et objet ce n'est pas synonyme.
Ben en vrai, j'y arrive pas vraiment. Un ami m'a dit que ça venat du fait qu'il fallait que je definisse cases dynamiquement avec une boucle imbriquée et une methode qui lirait dans un fichier... Ca serait l'ideal c vrai mais bon... je crois que j'ai encore pass mal de progres à faire...
Qu'est-ce que tu racontes la ??
Pour le problème que tu as posé, tu as la solution. Sûr et certain.
La question c'était d'acc'der à une méthode de ta classe Carte.
Maintenant tu sembles dire que ta carte ne se crée pas aussi bien que tu le souhaites. Ton ami a sans doute raison, mais c'est une autre question ça.
Pour une autre question, merci de poser ... une autre question.
Pour éviter que la discussion ne soit incompréhensible à ceux qui ne l'ont pas suivi dès le début.