cs_nacimovitch
Messages postés2Date d'inscriptiondimanche 25 décembre 2011StatutMembreDernière intervention30 décembre 2011
-
30 déc. 2011 à 12:39
cs_burnit4mosta
Messages postés1Date d'inscriptionmardi 20 janvier 2009StatutMembreDernière intervention14 janvier 2012
-
14 janv. 2012 à 23:02
Bonjour Voilà j'ai telechargé ce code Java qui permet d'implémenter le Jeu Tic-Tac-Toe en réseau Cependant j'ai un soucis je n'ai pas su quoi ajouter pour determiner le vainqueur si vous pouviez m'aider s'il vous plait sa serais sympa a vous :
// Cette classe administre le jeu de Morpion (tic tac toe)
// pour deux applets clientes.
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
import javax.swing.*;
public class ServeurMorpion extends JFrame {
private byte plateau[];
private boolean mouvementX;
private JTextArea sortie;
private Joueur joueurs[];
private ServerSocket serveur;
private int joueurCourant;
public ServeurMorpion()
{
super( "Serveur de Morpion" );
plateau = new byte[ 9 ];
mouvementX = true;
joueurs = new Joueur[ 2 ];
joueurCourant = 0;
// Définir le ServerSocket.
try {
serveur = new ServerSocket( 5000, 2 );
}
catch( IOException e ) {
e.printStackTrace();
System.exit( 1 );
}
sortie = new JTextArea();
getContentPane().add( sortie, BorderLayout.CENTER );
sortie.setText( "Le serveur attend les connexions\n" );
setSize( 300, 300 );
show();
}
// Attendre deux connexions pour que le jeu puisse commencer.
public void executer()
{
for ( int i = 0; i < joueurs.length; i++ ) {
try {
joueurs[ i ] =
new Joueur( serveur.accept(), this, i );
joueurs[ i ].start();
}
catch( IOException e ) {
e.printStackTrace();
System.exit( 1 );
}
}
// Le joueur X est mis en attente jusqu'à connexion du joueur O.
// Reprise du joueur X ensuite.
synchronized ( joueurs[ 0 ] ) {
joueurs[ 0 ].threadSuspendu = false;
joueurs[ 0 ].notify();
}
}
public void affichage( String s )
{
sortie.append( s + "\n" );
}
// Déterminer si un mouvement est valable.
// Cette méthode est synchronisée parce qu'un seul
// mouvement est autorisé à la fois.
public synchronized boolean mouvementValable( int empl,
int joueur )
{
boolean mouvementFait = false;
while ( joueur != joueurCourant ) {
try {
wait();
}
catch( InterruptedException e ) {
e.printStackTrace();
}
}
if ( !estOccupe( empl ) ) {
plateau[ empl ] =
(byte) ( joueurCourant == 0 ? 'X' : 'O' );
joueurCourant = ( joueurCourant + 1 ) % 2;
joueurs[ joueurCourant ].autreJoueurAJoue( empl );
notify(); // dire au joueur en attente de poursuivre.
return true;
}
else
return false;
}
public boolean estOccupe( int empl )
{
if ( plateau[ empl ] == 'X' || plateau [ empl ] == 'O' )
return true;
else
return false;
}
public boolean partieFinie()
{
// Placer du code ici pour tester un gagnant de la partie.
return false;
}
public static void main( String args[] )
{
ServeurMorpion jeu = new ServeurMorpion();
jeu.addWindowListener( new WindowAdapter() {
public void windowClosing( WindowEvent e )
{
System.exit( 0 );
}
}
);
jeu.executer();
}
}
// Classe Joueur destinée à gérer chaque Joueur comme un thread.
class Joueur extends Thread {
private Socket connexion;
private DataInputStream entree;
private DataOutputStream sortie;
private ServeurMorpion controle;
private int nombre;
private char marque;
protected boolean threadSuspendu = true;
public Joueur( Socket s, ServeurMorpion t, int num )
{
marque ( num 0 ? 'X' : 'O' );
connexion = s;
try {
entree = new DataInputStream(
connexion.getInputStream() );
sortie = new DataOutputStream(
connexion.getOutputStream() );
}
catch( IOException e ) {
e.printStackTrace();
System.exit( 1 );
}
controle = t;
nombre = num;
}
public void autreJoueurAJoue( int empl )
{
try {
sortie.writeUTF( "L'adversaire a joué" );
sortie.writeInt( empl );
}
catch ( IOException e ) { e.printStackTrace(); }
}
// Client du jeux de Morpion (tic tac to).
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
import javax.swing.*;
// La classe Client permet à un utilisateur de jouer au Morpion
// avec un autre utilisateur par le biais d'un réseau.
public class ClientMorpion extends JApplet
implements Runnable {
private JTextField id;
private JTextArea affichage;
private JPanel panneauPlateau, panneau2;
private Carre plateau[][], caseCourante;
private Socket connexion;
private DataInputStream entree;
private DataOutputStream sortie;
private Thread threadSortie;
private char maMarque;
private boolean monTour;
// Définir l'interface utilisateur et le plateau.
public void init()
{
affichage = new JTextArea( 4, 30 );
affichage.setEditable( false );
getContentPane().add( new JScrollPane( affichage ),
BorderLayout.SOUTH );
panneauPlateau = new JPanel();
GridLayout layout = new GridLayout( 3, 3, 0, 0 );
panneauPlateau.setLayout( layout );
plateau = new Carre[ 3 ][ 3 ];
// À la création d'un Carre, l'argument d'emplacement
// du constructeur est une valeur de 0 à 8, indiquant
// la position du Carré sur le plateau. Les valeurs 0, 1 et 2
// forment la 1re ligne, les valeurs 3, 4 et 5 la deuxième
// ligne et les valeurs 6, 7 et 8 la troisième ligne.
for ( int ligne = 0; ligne < plateau.length; ligne++ )
{
for ( int col = 0;
col < plateau[ ligne ].length; col++ ) {
plateau[ ligne ][ col ] =
new Carre( ' ', ligne * 3 + col );
plateau[ ligne ][ col ].addMouseListener(
new EcouteurCarre(
this, plateau[ ligne ][ col ] ) );
panneauPlateau.add( plateau[ ligne ][ col ] );
}
}
// Établir la connexion au serveur et prendre les flux associés.
// Démarrer un thread séparé pour permettre à cette applet de
// mettre à jour en continu sa sortie dans la zone de texte affichée.
public void start()
{
try {
connexion = new Socket(
InetAddress.getByName( "127.0.0.1" ), 5000 );
entree = new DataInputStream(
connexion.getInputStream() );
sortie = new DataOutputStream(
connexion.getOutputStream() );
}
catch ( IOException e ) {
e.printStackTrace();
}
threadSortie = new Thread( this );
threadSortie.start();
}
// Tread de contrôle qui permet une mise à jour permanente
// de l'affichage de la zone de texte.
public void run()
{
// Tout d'abord détecter la marque du joueur (X ou O).
try {
maMarque = entree.readChar();
id.setText( "Vous êtes le joueur "" + maMarque + """ );
monTour ( maMarque 'X' ? true : false );
}
catch ( IOException e ) {
e.printStackTrace();
}
// Recevoir les messages envoyés au client.
while ( true ) {
try {
String s = entree.readUTF();
traiterMessage( s );
}
catch ( IOException e ) {
e.printStackTrace();
}
}
}
// Traiter les messages envoyés au client.
public void traiterMessage( String s )
{
if ( s.equals( "Mouvement valable." ) ) {
affichage.append( "Mouvement valable, veuillez patienter.\n" );
caseCourante.setMarque( maMarque );
caseCourante.repaint();
}
else if ( s.equals( "Mouvement interdit, réessayez." ) ) {
affichage.append( s + "\n" );
monTour = true;
}
else if ( s.equals( "L'adversaire a joué" ) ) {
try {
int empl = entree.readInt();