Foro de elhacker.net

Programación => Java => Mensaje iniciado por: IO4 en 15 Abril 2019, 14:42 pm



Título: Ayuda con código de Tres en Raya Java en Processing
Publicado por: IO4 en 15 Abril 2019, 14:42 pm
Tengo una tarea donde se me pide que

 -crear una función que determine cuando se gana el juego o no.
-a más de determinar quién gana el juego, se debe dibujar una línea en los elementos que
hicieron el 3 en raya.
-Esta función debe ser llamada cada vez que un jugador hace su movida.

Me parece relevante también decir que este código esta hecho en processing. Por favor ayuda no entiendo muy bien de Java


Código
  1.  
  2. //declarando variables
  3. char [][] tablero;
  4. final int fil = 3;
  5. final int col = 3;
  6. boolean player1;
  7. boolean player2;
  8.  
  9.  
  10. void setup () {
  11.  size (600, 600);
  12.  tablero = new char [fil][col];
  13.  for (int f = 0; f<fil; f++) {
  14.    for (int c = 0; c<col; c++) {
  15.      tablero [f][c]='v';
  16.    }
  17.  }
  18. }
  19.  
  20. void draw () {
  21.  background(0);
  22.  stroke (255);
  23.  
  24. //dibujando el tablero
  25.  line (0, height/3, width, height/3);
  26.  line (0, height/3*2, width, height/3*2);
  27.  line (width/3, 0, width/3, height);
  28.  line (width/3*2, 0, width/3*2, height);
  29.  
  30.  
  31.  for (int f = 0; f < fil; f++) {
  32.    for (int c = 0; c < col; c++) {
  33.      if (tablero [f][c] == 'x') {
  34.  
  35. // dibujando la 'o'
  36.        rectMode (CENTER);
  37.        noFill();
  38.        ellipse ((100 +200*c)-5, (100 +200*f)-5, 100, 100);
  39.      }
  40.  
  41. // dibujando la 'x'
  42.      if (tablero [f][c] == 'o') {
  43.        rectMode (CENTER);
  44.        line((100 +200*c)-50, (100 +200*f)-50, (100 +200*c)+50, (100 +200*f)+50);
  45.        line((100 +200*c)+50, (100 +200*f)-50, (100 +200*c)-50, (100 +200*f)+50);
  46.      }
  47.    }
  48.  }
  49. }
  50.  
  51. // cada vez que los jugadores den click se posiciona una 'x' o un 'o'
  52.  
  53. void mouseClicked() {
  54.  
  55.  int fclic = (int) mouseY/200;
  56.  int cclic = (int) mouseX/200;
  57.  if (tablero[fclic][cclic] == 'v') {
  58.    if (player1) {
  59.      tablero [fclic][cclic] = 'o';
  60.      player1 = false;
  61.    } else {
  62.      tablero [fclic][cclic] = 'x';
  63.      player1 = true;
  64.    }
  65.  }
  66.  
  67. // ubicar donde se está dando el click
  68.  for (int f = 0; f < fil; f++) {
  69.    for (int c = 0; c < col; c++) {
  70.      print (tablero [f][c] + " ");
  71.    }
  72.    println ();
  73.  }
  74.  
  75.  println ("fila es:" + (int) mouseY/200);
  76.  println ("columna es:" + (int) mouseX/200);
  77. }
  78.  
  79.  


Título: Re: Ayuda con código de Tres en Raya Java en Processing
Publicado por: srWhiteSkull en 16 Abril 2019, 15:39 pm
Processing es similar a Java, no entiendo el problema.

Si sabes Processing simplemente debes olvidar el concepto de funciones y pensar que todo son objetos o estructuras. Entonces lo que tienes que aprender es POO. Yo creo que es imposible enseñarte con una respuesta que no supere más de 100 líneas que es la POO.

Aprende Java y deja el Processing, céntrate en un lenguaje de momento.

https://docs.oracle.com/javase/tutorial/

Luego para afrontar el problema de la función es tan sencillo como lo que muestras en el código. Simplemente debes comprobar las casillas de la tabla en horizontal, vertical y diagonal, fin. Y además, es qu eni necesitas ayuda porque en el código muestras que sabes recorrer una tabla de un lado a otro, con un bucle anidado en otro bucle, y la comprobación diagonal es la más sencilla ya que sólo requiere un bucle X=Y por lo tanto tablero[f][f] o tablero[c][c] (me imagino que f será de fila y c de columna).

Mientras compruebas la verticalmente, horizontalmente y diagonal a cada jugador usa una bandera que indique de momento que tresEnRaya=true, y si en el recorrido el caso es que es diferente el valor de la casilla a la anterior o simplemente entendemos que si compruebas si el jugador X tiene tres en raya y encuentras O entonces tresEnRaya=false. Al final comprueba la bandera y si el tresEnRaya continúa true es que gana, así de sencillo.


Título: Re: Ayuda con código de Tres en Raya Java en Processing
Publicado por: rub'n en 17 Abril 2019, 11:11 am
Nada fácil para empezar dog, descárgate el IDE de processing  https://www.processing.org/download/ (https://www.processing.org/download/) para que vallas haciendo, el código funciona, y dibuja tanto las x como o, el método líne() que esta en dentro del método draw() ver línea 25, es el que deberás usar para hacer la ralla completa en la matriz.

Yo me imagino que no sabes nada de programación  :-\ , mínimo debes de saber arrays y bi arrays para imprimir las filas columnas y diagonales, la diagonal principal es fácil la segunda no tanto  :xD y métodos al menos para resolver esto.



Título: Re: Ayuda con código de Tres en Raya Java en Processing
Publicado por: CalgaryCorpus en 17 Abril 2019, 15:59 pm
Si mantienes algo de memoria adicional, es posible saber si uno de los jugadores gano' sin hacer recorridos, ni ciclos.

Mientras se juega hay que actualizar esa memoria adicional, lo que tampoco requiere hacer recorridos ni ciclos.

La idea es asignar 2 valores opuestos a cada jugador, por ejemplo 1 y -1. Si un jugador ha ganado, la suma de esa fila, columna o diagonal sera 3 (o -3). Cualquier valor distinto a eso, no hay ganador.