Sokoban java
Fermé
Utilisateur anonyme
-
Modifié par antoriche le 11/08/2011 à 18:00
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 11 août 2011 à 20:56
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 11 août 2011 à 20:56
A voir également:
- Jeu sokoban gratuit télécharger
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Java décompiler - Télécharger - Langages
- Java runtime - Télécharger - Langages
1 réponse
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
Modifié par KX le 11/08/2011 à 19:00
Modifié par KX le 11/08/2011 à 19:00
Et... qu'est-ce que c'est censé faire ?
Ta boucle dans PaintComponent est absolument horrible !!!
Comme tu as fais setX(0) avant, on sait que getX()==0 d'où i==0
La condition i==Xmax ne sera donc jamais vraie !
Du coup avant même le premier appel, on quitte la boucle. Il n'y a donc aucun appel à drawImage... Il te faudrait plutôt une condition du genre i<Xmax.
Et pour en venir au setX(posX+50) tu peux directement faire posX+=50
En effet tes fonctions setX et getX ne servent pas à grand chose d'autant qu'elles ne se correspondent pas (à cause de ton *50) !
Bref, voici ce que je te propose (en espérant avoir compris ce que tu voulais) :
La confiance n'exclut pas le contrôle
Ta boucle dans PaintComponent est absolument horrible !!!
for(int i=getX();i==Xmax;setX(posX+50))
Comme tu as fais setX(0) avant, on sait que getX()==0 d'où i==0
La condition i==Xmax ne sera donc jamais vraie !
Du coup avant même le premier appel, on quitte la boucle. Il n'y a donc aucun appel à drawImage... Il te faudrait plutôt une condition du genre i<Xmax.
Et pour en venir au setX(posX+50) tu peux directement faire posX+=50
En effet tes fonctions setX et getX ne servent pas à grand chose d'autant qu'elles ne se correspondent pas (à cause de ton *50) !
Bref, voici ce que je te propose (en espérant avoir compris ce que tu voulais) :
import java.awt.Graphics; import java.awt.Image; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.JPanel; public class Terrain extends JPanel { private static final long serialVersionUID = 1L; private int Xmax, Ymax; private Image img; public Terrain() throws IOException { img = ImageIO.read(new File("D:\\rien.png")); Xdim=img.getWidth(null); Ydim=img.getHeight(null); } @Override public void paintComponent(Graphics g) { int Xmax=getWidth(); int Ymax=getHeight(); for (int x=0; x<Xmax; x+=Xdim) for (int y=0; y<Ymax; y+=Ydim) g.drawImage(img,x,y,this); } } import javax.swing.JFrame; public class Sokoban extends JFrame { private static final long serialVersionUID = 1L; public static final int Xmax=500, Ymax=400; public Sokoban() throws IOException { setTitle("Sokoban"); setSize(Xmax,Ymax); setLocationByPlatform(true); setDefaultCloseOperation(EXIT_ON_CLOSE); //setResizable(false); setContentPane(new Terrain()); setVisible(true); } public static void main(String...args) throws IOException { new Sokoban(); } }
La confiance n'exclut pas le contrôle
11 août 2011 à 20:46
Modifié par KX le 12/08/2011 à 01:19
En fait ça ne sert pas à grand chose ici, mais Terrain hérite de JPanel, et Sokoban de JFrame, donc ils implémentent Serializable, c'est pour ça qu'il faut leur définir cette valeur, sinon le compilateur génére un avertissement (car ça peut provoquer des erreurs ultérieurement si tu sérialises tes composants)
Tu peux regarder une explication ici : "serializable class has no definition of serialVersionUID"