24.8 Juego de Tres en raya (Gato) tipo cliente/servidor, utilizando un servidor con subprocesamiento...  

1031

168    

}

// fin de la clase interna

169   

);

// fin de la llamada a SwingUtilities.invokeLater

170

}

// fin del método mostrarMensaje

171

 172 

 

 

// método utilitario para establecer una marca en el tablero, en el subproceso 
despachador de eventos

173

private void

 establecerMarca( 

final

 Cuadro cuadroAMarcar, 

final

 String marca )

 174 

 

{

 175 

 

 

SwingUtilities.invokeLater(

 176 

 

 

 

new

 Runnable() 

 177 

 

 

 

{

 178 

 

 

 

      

public void

 run()

 179 

 

 

 

      

{

 180 

 

 

 

              

cuadroAMarcar.establecerMarca( marca ); 

// establece la marca en el 

cuadro

181 

 

 

 

      

}

// fin del método run

182    

}

// fin de la clase interna anónima

183   

);

 // fin de la llamada a SwingUtilities.invokeLater

184

}

// fin del método establecerMarca

185

 186 

 

// envía un mensaje al servidor, indicando el cuadro en el que se hizo clic

187

public void

 enviarCuadroClic( 

int

 ubicacion )

 188 

 

{

 189 

 

 

// si es mi turno

190   

if

 ( miTurno ) 

 191 

 

 

{

 192 

 

 

 

salida.format(

"%d\n"

, ubicacion ); 

// envía la ubicación al servidor

193    

salida.flush();

 194 

 

 

 

miTurno = 

false

;

// ya no es mi turno

195   

}

// fin de if

196

}

// fin del método enviarCuadroClic

197

 198 

 

// establece el cuadro actual

199

public void

 establecerCuadroActual( Cuadro cuadro )

 200 

 

{

 201 

 

 

cuadroActual = cuadro; 

// asigna el argumento al cuadro actual

202

}

// fin del método establecerCuadroActual

203

 204 

 

// clase interna privada para los cuadros en el tablero

205

private class

 Cuadro 

extends

 JPanel 

 206 

 

{

 207 

 

 

private

 String marca; 

// marca a dibujar en este cuadro

208   

private int

 ubicacion; 

// ubicacion del cuadro

209

 210 

 

 

public

 Cuadro( String marcaCuadro, 

int

 ubicacionCuadro )

 211 

 

 

{

 212 

 

 

 

marca = marcaCuadro; 

// establece la marca para este cuadro

213    

ubicacion = ubicacionCuadro; 

// establece la ubicación de este cuadro

214

 215 

 

 

 

addMouseListener(

 216 

 

 

 

      

new

 MouseAdapter() 

 217 

 

 

 

      

{

 218 

 

 

 

             

public void

 mouseReleased( MouseEvent e )

 219 

 

 

 

             

{

 

220     

 

 

 

 

establecerCuadroActual( Cuadro.

this

 );

 // establece el cuadro actual

221

 222 

 

 

 

 

     

// envía la ubicación de este cuadro

223 

 

 

 

 

    

enviarCuadroClic( obtenerUbicacionCuadro() );

 224 

 

 

 

             

}

// fin del método mouseReleased

Figura 24.15

  |  Lado cliente del programa Tres en raya cliente/servidor. (Parte 4 de 5).

24_MAQ_CAP_24_Deiltel.indd1031

4/19/081:35:04AM