Ayuda con código de Tres en Raya Java en Processing

Iniciado por IO4, 15 Abril 2019, 14:42 PM

0 Miembros y 1 Visitante están viendo este tema.

IO4

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 (javascript) [Seleccionar]


//declarando variables
char [][] tablero;
final int fil = 3;
final int col = 3;
boolean player1;
boolean player2;


void setup () {
 size (600, 600);
 tablero = new char [fil][col];
 for (int f = 0; f<fil; f++) {
   for (int c = 0; c<col; c++) {
     tablero [f][c]='v';
   }
 }
}

void draw () {
 background(0);
 stroke (255);

//dibujando el tablero
 line (0, height/3, width, height/3);
 line (0, height/3*2, width, height/3*2);
 line (width/3, 0, width/3, height);
 line (width/3*2, 0, width/3*2, height);


 for (int f = 0; f < fil; f++) {
   for (int c = 0; c < col; c++) {
     if (tablero [f][c] == 'x') {

// dibujando la 'o'
       rectMode (CENTER);
       noFill();
       ellipse ((100 +200*c)-5, (100 +200*f)-5, 100, 100);
     }

// dibujando la 'x'
     if (tablero [f][c] == 'o') {
       rectMode (CENTER);
       line((100 +200*c)-50, (100 +200*f)-50, (100 +200*c)+50, (100 +200*f)+50);
       line((100 +200*c)+50, (100 +200*f)-50, (100 +200*c)-50, (100 +200*f)+50);
     }
   }
 }
}

// cada vez que los jugadores den click se posiciona una 'x' o un 'o'

void mouseClicked() {

 int fclic = (int) mouseY/200;
 int cclic = (int) mouseX/200;
 if (tablero[fclic][cclic] == 'v') {
   if (player1) {
     tablero [fclic][cclic] = 'o';
     player1 = false;
   } else {
     tablero [fclic][cclic] = 'x';
     player1 = true;
   }
 }

// ubicar donde se está dando el click
 for (int f = 0; f < fil; f++) {
   for (int c = 0; c < col; c++) {
     print (tablero [f][c] + " ");
   }
   println ();
 }

 println ("fila es:" + (int) mouseY/200);
 println ("columna es:" + (int) mouseX/200);
}


srWhiteSkull

#1
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.

rub'n

#2
Nada fácil para empezar dog, descárgate el IDE de processing  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.



rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen

CalgaryCorpus

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.
Aqui mi perfil en LinkedIn, invitame un cafe aqui