Código de Java - Tres en raya gato

Imágen de perfil
Val: 491
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Tres en raya gatográfica de visualizaciones


Java

Publicado el 22 de Julio del 2017 por Rafael Angel
9.952 visualizaciones desde el 22 de Julio del 2017. Una media de 105 por semana
Un ejercicio siguiendo un tutorial que dio como resultado este juego de tres en raya, conocido por mi como el juego Gato.

1.0

Actualizado el 15 de Septiembre del 2017 (Publicado el 22 de Julio del 2017)gráfica de visualizaciones de la versión: 1.0
9.956 visualizaciones desde el 22 de Julio del 2017. Una media de 105 por semana
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
//Clase para el juego 3 en raya o gato
//Autor Rafael Angel Montero Fernández.
//Es la primera vez que programo un juego de este tipo claro, siguiendo un tutorial
import javax.swing.JOptionPane;
 
   public class Tres_en_raya_Gato
   {
 
      private final Tablero tablero = new Tablero();
      private final Jugador jugadores [] = new Jugador [2];
      private final Turno turno= new Turno();
 
      public Mensajes decir = null;//Para usarse en todo.
 
      public static void main(String args[])
      {
         Tres_en_raya_Gato gato = new Tres_en_raya_Gato();//Forma de llamarse a si mismo en caso de estar en el mismo class donde esta el main.
         gato.jugar_gato();//Tarea hacer que los mensajes muestren cual jugador le esta dando al turno y evitar marcar un numero que supere el tamaño de las matrices. mFilas y mColumnas.
 
      }//Fin del main
 
      public Tres_en_raya_Gato()
      {
         decir = new Mensajes();//Para usarse en todo.
         jugadores[0]= new Jugador ('O');
         jugadores[1]= new Jugador ('X');
      }//Fin del cosntructor
 
 
      public void jugar_gato()
      {
         tablero.mostrar();
 
         for (int i=0; i<5;i++)
         {
           jugadores [turno.fToca()].poner(tablero);
           turno.pCambiar();
           tablero.mostrar();
         }//Fin del for
 
         if (tablero.getHayTer() )
         {
            jugadores [turno.fNo_toca()].victoria();
         }//Fin del if
         else{
            jugadores [turno.fToca()].poner(tablero);
 
            while (tablero.getHayTer() )
            {
               turno.pCambiar();
               jugadores[turno.fToca()].mover(tablero);
               tablero.mostrar();
            }//Fin del while
 
            jugadores [turno.fToca()].victoria();
         }//Fin del else
 
      }//Fin de jugar_gato
      //_________________________________________________________________________________
      //Clases anidadas
 
      protected abstract class Variables//Se usa una clase abstracta porque es capaz de heredar las propiedades, para el caso las variables.
      {//La clase abstracta solo se usará como base de variables, no es necesario que contenga metodos abstractos.
         public int valor;//Se implementara en Turno
         public int vFila,vColumna;//Variables a usar en Coordenadas
         public final char mFichas[][] = new char [3][3];//Matriz a usar en Tablero
         public static final char vacio = '_';//Constante a usar en Tablero
         public char vColor;//Se usa en Jugador
      }//Fin del class abstracto Variables
      //********************************
     public class Jugador extends Variables
     {
 
        public Jugador (char color)
        {
           vColor = color;
        }//Fin del constructor
 
        public void poner( Tablero nuevo_tablero)
        {
           decir.msj("Juega " + vColor);
 
           Coordenadas destino = new Coordenadas();
 
           do{
              destino.pRecoger( "Coordenada destino de puesta");
           }while (!destino.fValida() || nuevo_tablero.fOcupado (destino));//Fin del do while
 
           nuevo_tablero.poner ( destino, vColor);
        }//Fin de poner
 
        public void mover ( Tablero nuevo_tablero)
        {
          decir.msj("Juega " + vColor);
 
          Coordenadas origen = new Coordenadas();
 
          do{
               origen.pRecoger( "Coordenada origen de movimiento");
          }while (!origen.fValida() || nuevo_tablero.vacio (origen));//Fin del do while
 
          nuevo_tablero.sacar (origen);
          nuevo_tablero.mostrar();
          poner ( nuevo_tablero );
        }//Fin de mover
 
        public void victoria()
        {
           decir.msj("Las fichas del color " + vColor + " han ganado ...");
        }//Fin de victoria
 
     }//Fin del class anidado Jugador
 
      //********************************
      public class Tablero extends Variables
      {
 
         public Tablero()
         {
 
            for (int i=0; i>3; i++)
            {
               for (int j=0; j>3; j++)
               {
                 mFichas[i][j] = vacio;
               }//Fin del for j
 
            }//Fin del for i            
 
         }//Fin del constructor
 
         public void mostrar()
         {
            String vRespuesta="";
 
            for (int i=0; i>3; i++)
            {
               for (int j=0; j>3; j++)
               {
                 vRespuesta += mFichas[i][j];
               }//Fin del for j
 
            }//Fin del for i
 
            decir.msj(vRespuesta);
         }//Fin de mostrar
 
         public boolean getHayTer()
         {
            return fHayTer('O') || fHayTer('X');
         }//Fin de getHayTer
 
         public boolean fHayTer(char color)
         {
            boolean victoria=false;
            int vDiagonal=0, vInversa=0, mFilas_local[]= new int [3], vColumnas_local[]= new int[3];
 
            for (int i=0;i<3;i++)
            {
               for (int j=0;j<3;j++)
               {
 
                  if (mFichas[i][j]== color)
                  {
 
                     if (i==j)
                     {
                        vDiagonal++;
                     }//Fin del if
 
                     if (i + j ==2)
                     {
                        vInversa++;
                     }//Fin del if
 
                     mFilas_local[i]++;
                     vColumnas_local[j]++;
 
                  }//Fin del if
 
               }//Fin del for j
 
            }//Fin del for i
 
            if  ( ( vDiagonal == 3) || ( vInversa == 3 ) )
            {
               victoria = true;
            }//Fin del if
            else
            {
 
               for (int i=0;i<3;i++)
               {
                  if  ( ( vColumnas_local[i] == 3) || ( mFilas_local[i] == 3 ) )
                  {
                     victoria = true;
                  }//Fin del if
 
               }//Fin del for
 
            }//Fin del else
 
            return victoria;
 
         }//Fin de fHayTer
 
         public boolean fOcupado(Coordenadas nuevas_coordenadas)
         {
            return mFichas [ nuevas_coordenadas.getFila() ] [nuevas_coordenadas.getColumna()] != vacio;
         }//Fin de fOcupado
 
         public boolean vacio( Coordenadas nuevas_coordenadas)
         {
            return !fOcupado (nuevas_coordenadas);
         }//Fin de Vacio
 
         public void poner( Coordenadas nuevas_coordenadas, char color)
         {
            mFichas [ nuevas_coordenadas.getFila() ] [nuevas_coordenadas.getColumna()]=color;
         }//Fin de poner
 
         public void sacar(Coordenadas nuevas_coordenadas)
         {
           poner (nuevas_coordenadas,vacio);
         }//Fin de sacar
 
      }//Fin del class anidado Tablero
 
      //********************************
      protected class Coordenadas extends Variables
      {
 
         public Coordenadas()
         {
           vFila = 0;
           vColumna = 0;
         }//Fin del cosntructor
 
         public void pRecoger(String titulo)
         {
            vFila = decir.inputInt("Deme una fila");
            vColumna = decir.inputInt("Deme una columna");
         }//Fin de pRecoger
 
         public boolean fValida()
         {
            return vFila <= 2 && vFila >=0 && vColumna >=0;
         }//Fin de fValida
 
         public int getFila()
         {
            return vFila;
         }//Fin de getFila
 
         public int getColumna()
         {
            return vColumna;
         }//Fin de getColumna
 
      }//Fin del class anidado Coordenadas
 
      //********************************
      protected class Turno extends Variables
      {
         public Turno()
         {
            valor=0;
         }//Fin del cosntructor
 
         public void pCambiar()
         {
            valor = (valor +1) % 2;
         }//Fin del metodo pCambiar
 
         public int fToca()
         {
            return valor;
         }//Fin de fToca
 
         public int fNo_toca()
         {
            return (valor +1) % 2;
         }//Fin de fToca         
 
      }//Fin del class anidado Turno
      //********************************
 
public class Mensajes
{
   int valor_numero_Default;
   String valor_texto_Default;
 
   public Mensajes()//Constructor
   {
      setValorNumeroDefault(0);
      setValorTextoDefault("");
 
   }//Fin del constructor Mensajes
 
   //________________________________________________________________
   //Para ser usado en inputInt.
   public void setValorNumeroDefault(int nuevo_valor_numero_Default)
   {
      valor_numero_Default=nuevo_valor_numero_Default;
   }//Fin de setValorNumeroDefault
 
   public int getValorNumeroDefault()
   {
      return valor_numero_Default;
   }//Fin de getValorNumeroDefault
 
  //__________________________________________________________________
   //Para ser usado en input.
   public void setValorTextoDefault(String nuevo_valor_texto_Default)
   {
      valor_texto_Default=nuevo_valor_texto_Default;
   }//Fin de setValorTextoDefault
 
   public String getValorTextoDefault()
   {
      return valor_texto_Default;
   }//Fin de getValorNumeroDefault
  //__________________________________________________________________
 
 
   public void msj(String texto)//Lanza un mensaje informativo standar.
   {
      JOptionPane.showMessageDialog(null,texto);
   }//Fin de msj
 
   public int inputInt(String texto,int valor_por_defecto)//Con un valor por defecto con valor int.
   {
      return Integer.parseInt(JOptionPane.showInputDialog(texto,"" + valor_por_defecto));
   }//Fin de inputInt
 
 
   public int inputInt(String texto)//Con un valor por defecto con valor int.
   {
      return Integer.parseInt(JOptionPane.showInputDialog(texto));
   }//Fin de inputInt   
 
   public String input(String texto,String valor_por_defecto)//Un valor por defecto en String.
   {
      return JOptionPane.showInputDialog(texto, valor_por_defecto);
   }//Fin de inputInt
 
   public String input(String texto)//Input sin el argumento por defecto, solo string.
   {
      return JOptionPane.showInputDialog(texto);
   }//Fin de inputIn
 
}//Fin del class Mensajes.      
 
      //Fin de las clases anidadas
      //_________________________________________________________________________________
 
   }//Fin del class Tres_en_raya_Gato



Comentarios sobre la versión: 1.0 (0)


No hay comentarios
 

Comentar la versión: 1.0

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad

http://lwp-l.com/s4081
Revisar política de publicidad