vilfilou
Messages postés27Date d'inscriptionsamedi 24 mars 2007StatutMembreDernière intervention30 avril 2007
-
11 avril 2007 à 00:57
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 2013
-
13 avril 2007 à 18:36
Bonjour..
Je suis entrain de réaliser un jeu de bataille navale en réseau..
J'ai choisis dopèrer avec un Serveur qui initialise toutes les cases et un Client qui ne sait rien et qui doit donc demander au serveur!
A chaque coup, le serveur doit envoyer un message contenant l'état des 200 cases.. comment puis-je faire? le coder? Besoin d'idée et de code source..
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 11 avril 2007 à 11:41
Salut:
Pourquoi ne pas envoyer une tableau d'entier ou chaque entier correspond à une constante bien déterminée.
exemple par hazzard:
public static final int MUR = 1; // symboliser une portion d'un mur
// ..
________________________________________________________________________________
A.B. :
"Qui croit connaître tout ne sait rien"
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 12 avril 2007 à 00:03
Salut:
Normalement dans le cas dex jeux 2D la scéne est représentée par un tableau à deux dimensions (matrice), qui à chaque case fait correspondre une constante symbolique pour chaque acteur du jeu.
Pour envoyer cette matrice via un réseau, il suffit de l'envoyer en tantque tableau unidimentionnel (vecteur).
X X X X X X X X X X
X X X X X --- envoyer ---> X X X X X ... X X X X X X X X X X X
X X X X X
<-------> Largeur
chaque element de la matrice (i, j) sera representé dans le vecteur par l'indice (Largeur * i + j).
________________________________________________________________________________
A.B. :
"Dieu nous donne des mains, mais il ne bâtit pas les ponts"
Vous n’avez pas trouvé la réponse que vous recherchez ?
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 12 avril 2007 à 00:04
Salut:
Le reste revient à manipuler des objets de type InputStream et OutputStream.
________________________________________________________________________________
A.B. :
"Dieu nous donne des mains, mais il ne bâtit pas les ponts"
vilfilou
Messages postés27Date d'inscriptionsamedi 24 mars 2007StatutMembreDernière intervention30 avril 2007 12 avril 2007 à 00:27
Oui..
Mais, comment faire?
J'ai un tab de 10*10
Pour l'envoi, le serveur envoi 10 lignes de 1 vecteur sous la forme {x,x,x,x,x,x,x,x,x,x} ? Ce sera un string.. pas un vecteur?
Pouvez-vous me donner un façon et surtout un exemple concret pour écrire ce message et l'interprêter correctement?
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 12 avril 2007 à 00:37
Salut:
Une matrice 10x10 sera envoyée en tantque vecteur de 10 * 10 = 100 éléments.
Il vaut mieux/ Il faut les envoyer tous en même temps.
Si tu code tes constantes sur 8 bits tu peux utiliser un byte [] ça te permet d'économiser beaucoup sur la bande passante car avec un objet String chaque symbole sera cod sur 16 bits qui est le double d'un byte et ça peut nuir aux performances de ton jeu.
________________________________________________________________________________
A.B. :
"Dieu nous donne des mains, mais il ne bâtit pas les ponts"
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 12 avril 2007 à 00:44
Salut:
Il y a la méthode OutputStream.write (byte [] array, int pos, int length)
et InputStream.read (byte [] array, int pos, int length)
________________________________________________________________________________
A.B. :
"Dieu nous donne des mains, mais il ne bâtit pas les ponts"
//InetAddress serveur = InetAddress.getByAdress ("127.0.0.1");
socket = new Socket(serveur, port);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintStream out = new PrintStream(socket.getOutputStream());
out.println(" SAluttt");
System.out.println(in.readLine());
} catch (Exception e) {e.printStackTrace();}
}
}
Comment faire pour envoyer ce tableau et le l'interprêter correctement?
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 13 avril 2007 à 00:58
Salut:
Pour envoyer le tableau du serveur au client on peut procéder ainsi
// Prog Serveur:
import java.net.*;
import java.io.*;
public class IEServeur {
final static int port = 9630;
public static void main(String[] args) {
try {
ServerSocket socketServeur = new ServerSocket(port);
System.out.println("Lancement du serveur");
while (true) {
Socket socketClient = socketServeur.accept();
String message = "";
System.out.println("Connexion avec : "+socketClient.getInetAddress());
BufferedReader in = new BufferedReader(
new InputStreamReader(socketClient.getInputStream()));
PrintStream out = new PrintStream(socketClient.getOutputStream());
// Envoyer un tableau de byte
byte [] array = new byte [100];
for (int i = 0; i < 100; ++i)
array [i] = (byte)1;
out.write (array, 0, 100);
socketClient.close();
}
} catch (Exception e) {e.printStackTrace();}
}
}
et le prog Client :
import java.net.*;
import java.io.*;
public class TestClientTCP {
final static int port = 9630;
static final String serveur = "127.0.0.1";
public static void main(String[] args) {
Socket socket;
DataInputStream userInput;
PrintStream theOutputStream;
try {
//InetAddress serveur = InetAddress.getByAdress ("127.0.0.1");
socket = new Socket(serveur, port);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 13 avril 2007 à 01:03
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 13 avril 2007 à 18:36
Salut:
J'ai pensé que le message était juste pour faire un test.
Bon, je pense qu'il faut lire les données dans l'ordre de leurs émission en respectant le type envoyé:
(si tu envoie un byte du seveur alors tu lis un byte coté client, ... de même pour String et les autres types)
serveur:
envoyer message sous fome de String
envoyer tableau sous forme de byte []
client:
lire message sous fome de String
lire tableau sous forme de byte []
________________________________________________________________________________
A.B. :
"Dieu nous donne des mains, mais il ne bâtit pas les ponts"