Java: mon MMORPG ne marche pas
Utilisateur anonyme
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
Bonjour, je crée un MMORPG en java qui ne marche pas. je fais tout mon possible mais je ne comprend pas le problème: mon personnage ne veut pas se déplacer et l'updater ne marche pas(j'ai créer un fichier "fichier.txt"). voici le code ( deso si il est un peu crad):
Fen.java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Toolkit;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class Fen extends JFrame{
public Fen(){
setTitle("MMORPG");
setSize(700,500);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setContentPane(new Map());
}
public static void main(String[] args) {
Updater mise_a_jour = new Updater();
Fen f = new Fen();
f.setVisible(true);
Map m = new Map();
}
}
Map.java:
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
public class Map extends JPanel{
int coorX = 50;
int coorY = 50;
Graphics g;
public Map(){
addMouseListener(new Action());
}
public void paintComponent(Graphics g){
Image img;
Image img_perso;
try {
img = ImageIO.read(new File( "map.jpg"));
g.drawImage(img,0,0,getWidth(),getHeight(),this);
img_perso = ImageIO.read(new File("pinguin.png"));
g.drawImage(img_perso,coorX,coorY,this);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void deplacement(int MX,int MY){
while(coorX != MX && coorY != MY){
System.out.println("bonjour");
if (coorX < MX){
coorX++;
}
else if(coorX > MX){
coorX--;
}
if (coorY < MY){
coorY++;
}
else if(coorY > MY){
coorY--;
}
try{
Thread.sleep(6);
}catch (Exception e1){
e1.printStackTrace();
}
repaint();
}
}
public class Action implements MouseListener{
public void mouseRelased(MouseEvent e) {
int MX = e.getX();
int MY = e.getY();
deplacement(MX,MY);
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
}
}
updater.java:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
public class Updater {
File code_source = new File("src/Fen.java");
File fichier = new File("fichier.txt");
PrintWriter ecrire;
String chaine ="";
String chaine2 ="";
public Updater(){
try {
InputStream is2 = new FileInputStream(code_source);
InputStreamReader ipsr2=new InputStreamReader(is2);
BufferedReader br2 =new BufferedReader(ipsr2);
String ligne;
while ((ligne=br2.readLine())!=null){
chaine+=ligne+"\n";
}
br2.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
InputStream f = new FileInputStream(fichier);
InputStreamReader ipsr=new InputStreamReader(f);
BufferedReader br=new BufferedReader(ipsr);
String ligne;
while ((ligne=br.readLine())!=null){
chaine2+=ligne+"\n";
}
br.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (chaine == chaine2){
System.out.println("oui");
}else{
try {
ecrire = new PrintWriter(new BufferedWriter
(new FileWriter(fichier)));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ecrire.print(chaine);
ecrire.close();
System.out.println("non");
}
}
}
Si vous trouvez le probleme dites le moi SVP.
Fen.java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Toolkit;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class Fen extends JFrame{
public Fen(){
setTitle("MMORPG");
setSize(700,500);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setContentPane(new Map());
}
public static void main(String[] args) {
Updater mise_a_jour = new Updater();
Fen f = new Fen();
f.setVisible(true);
Map m = new Map();
}
}
Map.java:
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
public class Map extends JPanel{
int coorX = 50;
int coorY = 50;
Graphics g;
public Map(){
addMouseListener(new Action());
}
public void paintComponent(Graphics g){
Image img;
Image img_perso;
try {
img = ImageIO.read(new File( "map.jpg"));
g.drawImage(img,0,0,getWidth(),getHeight(),this);
img_perso = ImageIO.read(new File("pinguin.png"));
g.drawImage(img_perso,coorX,coorY,this);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void deplacement(int MX,int MY){
while(coorX != MX && coorY != MY){
System.out.println("bonjour");
if (coorX < MX){
coorX++;
}
else if(coorX > MX){
coorX--;
}
if (coorY < MY){
coorY++;
}
else if(coorY > MY){
coorY--;
}
try{
Thread.sleep(6);
}catch (Exception e1){
e1.printStackTrace();
}
repaint();
}
}
public class Action implements MouseListener{
public void mouseRelased(MouseEvent e) {
int MX = e.getX();
int MY = e.getY();
deplacement(MX,MY);
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
}
}
updater.java:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
public class Updater {
File code_source = new File("src/Fen.java");
File fichier = new File("fichier.txt");
PrintWriter ecrire;
String chaine ="";
String chaine2 ="";
public Updater(){
try {
InputStream is2 = new FileInputStream(code_source);
InputStreamReader ipsr2=new InputStreamReader(is2);
BufferedReader br2 =new BufferedReader(ipsr2);
String ligne;
while ((ligne=br2.readLine())!=null){
chaine+=ligne+"\n";
}
br2.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
InputStream f = new FileInputStream(fichier);
InputStreamReader ipsr=new InputStreamReader(f);
BufferedReader br=new BufferedReader(ipsr);
String ligne;
while ((ligne=br.readLine())!=null){
chaine2+=ligne+"\n";
}
br.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (chaine == chaine2){
System.out.println("oui");
}else{
try {
ecrire = new PrintWriter(new BufferedWriter
(new FileWriter(fichier)));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ecrire.print(chaine);
ecrire.close();
System.out.println("non");
}
}
}
Si vous trouvez le probleme dites le moi SVP.
A voir également:
- Java: mon MMORPG ne marche pas
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Waptrick java voiture - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Eclipse java - Télécharger - Langages
3 réponses
J'ai jeté un coup d'oeil rapide à ton code, et j'ai trouvé une erreur "évidente", dans la classe Action, ta méthode mouseRelased devrait en fait être la méthode @Override MouseReleased
Au moment de l'exécution, j'ai un problème avec les ImageIO.read qui ne trouve pas les images en relatif, donc je les ai mises en absolues, mais tu n'as peut-être pas ce problème chez toi.
Remarque :
Plutôt que de charger l'image dans paintComponent (et donc de la recharger à chaque fois), il serait bien mieux de la charger une fois pour toute à l'initialisation...
Et ton System.out.println("bonjour") ne sert à rien...
Pour ton updater, explique mieux ce que tu veux faire...
Au moment de l'exécution, j'ai un problème avec les ImageIO.read qui ne trouve pas les images en relatif, donc je les ai mises en absolues, mais tu n'as peut-être pas ce problème chez toi.
Remarque :
Plutôt que de charger l'image dans paintComponent (et donc de la recharger à chaque fois), il serait bien mieux de la charger une fois pour toute à l'initialisation...
Et ton System.out.println("bonjour") ne sert à rien...
private Image img, img_perso;
public Map()
{
try
{
img = ImageIO.read(new File("D:\\map.png"));
img_perso = ImageIO.read(new File("D:\\pinguin.png"));
}
catch (IOException e)
{
e.printStackTrace();
}
addMouseListener(new Action());
}
public void paintComponent(Graphics g)
{
g.drawImage(img,0,0,getWidth(),getHeight(),this);
g.drawImage(img_perso,coorX,coorY,this);
}
// ...
@Override
public void mouseReleased(MouseEvent e) {
deplacement(e.getX(),e.getY());
}
Pour ton updater, explique mieux ce que tu veux faire...
Merci mais n'y a-t-il pas moyen que le pinguin se déplace jusqu'au centre de l'image car si je click a un endroit , c'est le coin de l'image de mon pinguin qui se déplace en position cliquée, et pas le centre de l'image (le pinguin). En gros il y a toujour un décalage entre le pinguin et la position du clique de la souris.
Aussi , malgré le Thread.sleep(6); mon pinguin attend 6 sec (et non 6/1000) puis se déplace instentanément jusqu'au clique.
Et pour l'updater je voudrait que mon programme vérifie si le fichier.txt est a jour, donc qu'il est égale au fichier Fen.java (se trouvant dans le dossier src).
Aussi , malgré le Thread.sleep(6); mon pinguin attend 6 sec (et non 6/1000) puis se déplace instentanément jusqu'au clique.
Et pour l'updater je voudrait que mon programme vérifie si le fichier.txt est a jour, donc qu'il est égale au fichier Fen.java (se trouvant dans le dossier src).
Thread.sleep est bien en millisecondes (voir même en nanosecondes), mais effectivement le déplacement est instantané comme je l'ai signalé tout à l'heure, je pense que cela est du au fait que la méthode de déplacement est appelée par l'évènement mouseReleased, et que celui-ci bloque le repaint qui ne peut être appelé qu'une fois l'évènement terminé (lorsque coorX==MX && coorY==MY)
Pour centrer ton pinguin, il suffit de décaler ton MX (respectivement ton MY) de la moitié de la largeur (resp. de la hauteur) de l'img_perso lors de l'appel à redessiner :
Pour centrer ton pinguin, il suffit de décaler ton MX (respectivement ton MY) de la moitié de la largeur (resp. de la hauteur) de l'img_perso lors de l'appel à redessiner :
redessiner(e.getX()-8,e.getY()-8); // chez moi img_perso est un carré 16x16
J'ai continué mon projet mais il y a une erreur que je ne comprend pas. Voici le code:
(dans le fichier mot_de_passe.txt j'ai écris 27021997)
(le socket ne marche pas encore)
(et le nom d'utilisateur non plus)
//Connexion.java
public class Connexion extends JFrame{
File acces = new File("mot_de_passe.txt");
JTabbedPane onglet = new JTabbedPane();
JButton inscription = new JButton("s\'inscrire");
String ligne="";
JTextField nomUtilisateur = new JTextField("antoriche",10);
JPasswordField mp = new JPasswordField("27021997",10);
JButton ok = new JButton("Connexion");
Socket soc;
JPanel pan = new JPanel();
JLabel incorrecte = new JLabel("Votre Pseudo ou votre mot de passe est incorrecte");
public Connexion(){
incorrecte.setVisible(false);
try{
soc = new Socket("localhost",1111);
}catch(IOException e){
e.printStackTrace();
}
setTitle("Connexion");
setSize(345,160);
setResizable(false);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
add(pan);
pan.add(new JLabel("nom d\'utilisateur:"));
pan.add(nomUtilisateur);
pan.add(new JLabel(" mot de passe:"));
pan.add(mp);
pan.add(ok);
pan.add(inscription);
pan.add(incorrecte);
ok.addActionListener(new Action());
inscription.addActionListener(new Action());
setVisible(true);
}
public class Action implements ActionListener{
@SuppressWarnings("deprecation")
public void actionPerformed(ActionEvent e) {
if(e.getSource()==ok){
try {
InputStream is2 = new FileInputStream(acces);
InputStreamReader ipsr2=new InputStreamReader(is2);
BufferedReader br2 =new BufferedReader(ipsr2);
ligne=br2.readLine();
br2.close();
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
if(ligne == mp.getText()){
Fen f =new Fen();
f.setVisible(true);
}else{
/*j'ai essayer de régler le probleme mais la console m'affiche ceci:
true
27021997
27021997
false
false
*/
System.out.println(acces.canRead());
incorrecte.setVisible(true);
System.out.println(ligne+"\n"+mp.getText());
System.out.println(ligne=="27021997");
System.out.println(mp.getText()=="27021997");
}
}
if(e.getSource()==inscription){
pan.add(new Inscription());
}
}
}
}
(dans le fichier mot_de_passe.txt j'ai écris 27021997)
(le socket ne marche pas encore)
(et le nom d'utilisateur non plus)
//Connexion.java
public class Connexion extends JFrame{
File acces = new File("mot_de_passe.txt");
JTabbedPane onglet = new JTabbedPane();
JButton inscription = new JButton("s\'inscrire");
String ligne="";
JTextField nomUtilisateur = new JTextField("antoriche",10);
JPasswordField mp = new JPasswordField("27021997",10);
JButton ok = new JButton("Connexion");
Socket soc;
JPanel pan = new JPanel();
JLabel incorrecte = new JLabel("Votre Pseudo ou votre mot de passe est incorrecte");
public Connexion(){
incorrecte.setVisible(false);
try{
soc = new Socket("localhost",1111);
}catch(IOException e){
e.printStackTrace();
}
setTitle("Connexion");
setSize(345,160);
setResizable(false);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
add(pan);
pan.add(new JLabel("nom d\'utilisateur:"));
pan.add(nomUtilisateur);
pan.add(new JLabel(" mot de passe:"));
pan.add(mp);
pan.add(ok);
pan.add(inscription);
pan.add(incorrecte);
ok.addActionListener(new Action());
inscription.addActionListener(new Action());
setVisible(true);
}
public class Action implements ActionListener{
@SuppressWarnings("deprecation")
public void actionPerformed(ActionEvent e) {
if(e.getSource()==ok){
try {
InputStream is2 = new FileInputStream(acces);
InputStreamReader ipsr2=new InputStreamReader(is2);
BufferedReader br2 =new BufferedReader(ipsr2);
ligne=br2.readLine();
br2.close();
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
if(ligne == mp.getText()){
Fen f =new Fen();
f.setVisible(true);
}else{
/*j'ai essayer de régler le probleme mais la console m'affiche ceci:
true
27021997
27021997
false
false
*/
System.out.println(acces.canRead());
incorrecte.setVisible(true);
System.out.println(ligne+"\n"+mp.getText());
System.out.println(ligne=="27021997");
System.out.println(mp.getText()=="27021997");
}
}
if(e.getSource()==inscription){
pan.add(new Inscription());
}
}
}
}
Il serait bien que tu explique ce que tu veux faire... en particulier pourquoi ce que ça donne ne correspond pas à ce que tu attends ! Personnellement chez moi ça ne donne rien, vu qu'il n'y a pas de méthode main à lancer !
Ton problème peut venir d'ici : il ne faut jamais comparer deux objets avec == (comparaison physique sur les références), il faut utiliser la méthode equals qui compare le contenu de deux objets !
De plus getText() est déprécié il vaut donc mieux le remplacer par getPassword()
Il y a encore plein d'autre choses à dire sur ton code, en particulier sur toutes les initialisations qui se font en dehors d'une méthode, cela ne doit se faire que pour les champs static, dans le cas général tu dois faire ces initialisations à l'intérieur du constructeur !
Ton problème peut venir d'ici : il ne faut jamais comparer deux objets avec == (comparaison physique sur les références), il faut utiliser la méthode equals qui compare le contenu de deux objets !
De plus getText() est déprécié il vaut donc mieux le remplacer par getPassword()
public void actionPerformed(ActionEvent e)
{
if(e.getSource().equals(ok))
{
try
{
Scanner sc = new Scanner(acces);
if (sc.hasNextLine())
ligne = sc.nextLine();
sc.close();
}
catch (FileNotFoundException fnfe)
{
fnfe.printStackTrace();
}
String pw = new String(mp.getPassword());
if (ligne.equals(pw))
{
new Fen().setVisible(true);
}
else
{
System.out.println(acces.canRead());
incorrecte.setVisible(true);
System.out.println(ligne+"\n"+pw);
System.out.println(ligne.equals("27021997"));
System.out.println(pw.equals("27021997"));
}
}
if (e.getSource().equals(inscription))
{
pan.add(new Inscription());
}
}
Il y a encore plein d'autre choses à dire sur ton code, en particulier sur toutes les initialisations qui se font en dehors d'une méthode, cela ne doit se faire que pour les champs static, dans le cas général tu dois faire ces initialisations à l'intérieur du constructeur !
public void deplacement(int MX,int MY) { while(coorX != MX || coorY != MY) { System.out.println("("+coorX+","+coorY+") --> ("+MX+","+MY+")"); if (coorX < MX) coorX++; else if(coorX > MX) coorX--; if (coorY < MY) coorY++; else if(coorY > MY) coorY--; try { Thread.sleep(6); } catch (InterruptedException e) { } repaint(); } }Mais tout cela est inutile car le repaint attendra la fin de la boucle pour redessiner...
Tu peux donc directement faire ceci :
@Override public void mouseReleased(MouseEvent e) { coorX=e.getX(); coorY=e.getY(); repaint(); }@Override public void mouseReleased(MouseEvent e) { new Thread() { private MouseEvent ev; @Override public void run() { deplacement(ev.getX()-8,ev.getY()-8); } public Thread set(MouseEvent e) { ev=e; return this; } }.set(e).start(); }Remarque : c'était du à un accès conccurentiel des threads, celui-ci va toujours exister (ce qui va modifier la vitesse du pingouin) mais cela va permettre de modifier la trajectoire du pingouin en cours de déplacement, plutôt que de le figer (je ne sais pas si c'est ce que tu veux pour autant :p)
public static int MX, MY; // dans la classe Map public void deplacement() { // idem qu'avant, mais MX et MY ne sont plus paramètres mais désormais static } @Override public void mouseReleased(MouseEvent e) { new Thread() { @Override public void run() { deplacement(); } public Thread set(MouseEvent e) { MX=e.getX()-8; MY=e.getY()-8; return this; } }.set(e).start(); }private int MX, MY; private boolean bouge = false; public void deplacement() { while(coorX != MX || coorY != MY) { if (coorX < MX) coorX++; else if(coorX > MX) coorX--; if (coorY < MY) coorY++; else if(coorY > MY) coorY--; repaint(); try { Thread.sleep(10); } catch (InterruptedException e) {} } bouge = false; } @Override public void mouseReleased(MouseEvent e) { MX=e.getX()-8; // 8=largeur/2 du pingouin MY=e.getY()-8; // 8=hauteur/2 du pingouin if (!bouge) { bouge = true; new Thread() { @Override public void run() { deplacement(); } }.start(); } }