Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - toomi.143

#1
Buenas gente, estoy haciendo un 4 en línea, el cual el tablero contenía enteros, luego decidí pasarlo a Chars para que sea más legible.

El jugador 1 utiliza las 'X'
El Jugador 2 utiliza los 'O' como fichas respectivamente

Estoy teniendo un problema al comparar el valor de estos chars cuando tengo que hacer un IF de 4 condiciones para verificar si hay 4 en línea diagonal, ya sea diagonal invertida o normal. Es decir, había hecho el MISMO código en enteros, pero ahora cuando lo paso a CHAR No me está funcionando, es decir el algoritmo está bien hecho, pero hay algo que me está fallando en alguna condición.

A continuación les dejo el código de la función donde estaría teniendo problemas y no me estaría funcionando.
Solo adjunto esa parte del código.

Es un tablero de 10x10
donde ultimaPosicion =3
DESDE YA MUCHAS GRACIAS A LOS QUE TOMAN SU TIEMPO PARA INTENTAR AYUDARME, SE AGRADECE.

Código (cpp) [Seleccionar]
void diagonal(char cuadro[][numeroDeColumnas]) // 4 en linea diagonal
{
int filasARecorrer = numeroDeFilas - ultimaPosicion;
int i,j;
for (i=0;i<filasARecorrer;i++)
{
for(j=numeroDeColumnas;j>ultimaPosicion;j--)
{
if (cuadro[i][j]=='X' && cuadro[i+1][j-1]=='X' && cuadro[i+2][j-2]=='X' && cuadro[i+3][j-3]=='X') // Si el Jugador 1 hace 4 en linea diagonal
{
cout << "El jugador 1 gana!" << endl;
ganador=true;
}
if (cuadro[i][j]=='O' && cuadro[i+1][j-1]=='O' && cuadro[i+2][j-2]=='O' && cuadro[i+3][j-3]=='O') // Si el Jugador 2 hace 4 en linea Diagonal
{
cout << "El jugador 2 gana!" << endl;
ganador=true;
}
}
}
}
#2
Cita de: Natalia94x en 25 Marzo 2017, 01:49 AM
Hola toomi.143 , te podrias explicar un poco mejor? para poder ayudarte, Saludos!

Hola Natalia, el problema que tengo es el siguiente, por algún motivo cuando arranca el juego e inserto la primer ficha en cualquiera de las columnas 6, 9 o 10, tengo un bug, que lo que pasa es que saltea el turno y no coloca la ficha en esas columnas. Esto ocurre la primera vez que se desea insertar las fichas en dichas columnas.

Espero poder haber sido lo suficientemente claro =D

Gracias espero tu ayuda.
#3
Hola a todos gente! Primero que nada quería comentarles que soy nuevo en este foro, y bastante nuevo en el mundo de la programación. Estoy programando un cuatro en línea de una manera bastante rudimentaria, no es eficaz, pero la idea es que funcione.

No tiene una interfaz gráfica, el tablero vacío son 0 y cuando juega el jugador 1 y 2 son 1 y 2 respectivamente.

Hasta ahora llegué a programar todo excepto cuando hay un cuatro en línea en diagonal, algo que todavía no llegué a hacer, pero me encontré con otro problema que la verdad pedí ayuda y nadie supo brindarmela.


MI PROBLEMA ES EL SIGUIENTE:

Cuando alguien desea introducir una "ficha" en la columna 6, 9, o 10,
POR PRIMERA VEZ automáticamente se "saltea" el turno, es decir, no toma el valor de esa ficha, y le corresponde jugar al siguiente jugador.
Esto solo me ocurre la primera vez en las columnas 6, 9 y 10 la verdad  me cuesta entender por que, en fin, adjunto el código y agradecería mucho al que encontrará este error

ACLARO: La lógica no es la mejor ni la más eficaz.

MUCHAS GRACIAS A LOS QUE TOMAN SU TIEMPO PARA DARME UNA MANO


Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;

const int numeroDeFilas=10;
const int numeroDeColumnas=10;
const int empate=(numeroDeFilas*numeroDeColumnas);
bool ganador=false;

void inicializarCuadro(int cuadro[][numeroDeColumnas])
{
int i,j;
for (i=0; i<numeroDeFilas; i++)
{
for (j=0; j<numeroDeColumnas; j++)
{
cuadro[i][j]=0;
}
}
}

void imprimirCuadro(int cuadro[][numeroDeColumnas])
{
int i,j;
for (i=0; i<numeroDeFilas; i++)
{
for (j=0; j<numeroDeColumnas; j++)
{
cout << cuadro[i][j];
}
cout << endl;
}
}

void turnoUno(int cuadro[][numeroDeColumnas]) // Turno del Jugador 1
{
bool movimientoValido=false;
int c,i;
while (!movimientoValido)
{
cout << "Juega el Jugador 1" << endl;
cout << "Ingrese el numero de columna, de 1 a 10" << endl;
cin  >> c;
c--;
while (c<0 || c>9)
{
cout << "Movimiento Invalido, reingrese la jugada" << endl;
imprimirCuadro(cuadro);
cout << "Juega el Jugador 1" << endl;
cout << "Ingrese el numero de columna, de 1 a 10" << endl;
cin  >> c;
c--;
}
for (i=numeroDeFilas;i>-1;i--)
{
if (cuadro[i][c]==0 && !movimientoValido)
{
cuadro[i][c]=1;
movimientoValido=true;
}
}
if (cuadro[numeroDeFilas][c]!=0 && !movimientoValido)
{
imprimirCuadro(cuadro);
cout << "La Columna está llena, reingrese la jugada" << endl;
}
}
}

void turnoDos(int cuadro[][numeroDeColumnas]) //Turno del Jugador 2
{
bool movimientoValido=false;
int c,i;
while (!movimientoValido)
{
cout << "Juega el Jugador 2" << endl;
cout << "Ingrese el numero de columna, de 1 a 10" << endl;
cin  >> c;
c--;
while (c<0 || c>9)
{
cout << "Movimiento Invalido, reingrese la jugada" << endl;
imprimirCuadro(cuadro);
cout << "Juega el Jugador 2" << endl;
cout << "Ingrese el numero de columna, de 1 a 10" << endl;
cin  >> c;
c--;
}
for (i=numeroDeFilas;i>-1;i--)
{
if (cuadro[i][c]==0 && !movimientoValido)
{
cuadro[i][c]=2;
movimientoValido=true;
}
}
if (cuadro[numeroDeFilas][c]!=0 && !movimientoValido)
{
imprimirCuadro(cuadro);
cout << "La Columna está llena, reingrese la jugada" << endl;
}
}
}

void vertical(int cuadro[][numeroDeColumnas])
{
bool encontradoUno, encontradoDos=false;
int i,j;
int totalUno =0;
int totalDos=0;
for (j=0;j<numeroDeColumnas;j++)
{
totalUno=0;
totalDos=0;
for (i=0;i<numeroDeFilas;i++)
{
if (cuadro[i][j] == 1 && encontradoUno) //Si el Jugador1 Hace 4 en linea Vertical
{
totalUno++;
}
else
{
encontradoUno=false;
totalUno=0;
}
if (cuadro[i][j] == 1 && !encontradoUno)
{
totalUno++;
encontradoUno=true;
}
if (totalUno == 4)
{
cout << "El jugador 1 gana!" << endl;
ganador=true;
}
if (cuadro[i][j] == 2 && encontradoDos) //Si el Jugador 2 Hace 4 en linea Vertical
{
totalDos++;
}
else
{
totalDos=0;
encontradoDos=false;
}
if (cuadro[i][j] == 2 && !encontradoDos)
{
totalDos++;
encontradoDos=true;
}
if (totalDos == 4)
{
cout << "El jugador 2 gana!" << endl;
ganador=true;
}
}
}
}

void horizontal(int cuadro[][numeroDeColumnas])
{
bool encontradoUno, encontradoDos=false;
int i,j;
int totalUno =0;
int totalDos=0;
for (i=0;i<numeroDeFilas;i++)
{
totalUno=0;
totalDos=0;
for (j=0;j<numeroDeColumnas;j++)
{
if (cuadro[i][j] == 1 && encontradoUno) //Si el Jugador1 Hace 4 en linea Horizontal
{
totalUno++;
}
else
{
encontradoUno=false;
totalUno=0;
}
if (cuadro[i][j] == 1 && !encontradoUno)
{
totalUno++;
encontradoUno=true;
}
if (totalUno == 4)
{
cout << "El jugador 1 gana!" << endl;
ganador=true;
}
if (cuadro[i][j] == 2 && encontradoDos) //Si el Jugador 2 Hace 4 en linea horizontal
{
totalDos++;
}
else
{
totalDos=0;
encontradoDos=false;
}
if (cuadro[i][j] == 2 && !encontradoDos)
{
totalDos++;
encontradoDos=true;
}
if (totalDos == 4)
{
cout << "El jugador 2 gana!" << endl;
ganador=true;
}
}
}
}

void jugar(int cuadro[][numeroDeColumnas])
{
int fichas=0;
while (fichas!=empate && !ganador)
{
if (fichas%2==0)
{
turnoUno(cuadro);
vertical(cuadro);
horizontal(cuadro);
fichas++;
imprimirCuadro(cuadro);
}
else
{
turnoDos(cuadro);
vertical(cuadro);
horizontal(cuadro);
fichas++;
imprimirCuadro(cuadro);
}

}
if (fichas == empate) //Caso de Empate
{
cout << "EMPATE! El juego ha terminado" << endl;
}
}

int main() //Programa Principal
{
int cuadro[numeroDeFilas][numeroDeColumnas];
cout << "Cuatro en Linea" << endl;
inicializarCuadro(cuadro);
imprimirCuadro(cuadro);
jugar(cuadro);
return 0;
}