Reemplazar cout [Juego Encontrar Triadas]

Iniciado por bitconrad, 14 Mayo 2017, 01:56 AM

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

bitconrad

Señor@s soy nuevo por aqui, pero desde hace unos meses vi que aca estan los duros de la programacion ;D ;D

queria saber si alguien me puede ayudar reemplazando el cout y demas cositas que tiene el codigo que les mostrare en breve, soy novato en esto, es mi 2 semestre, estoy familiarizado apenas con las funciones, pero me cuesta reemplazar "cout" de la funcion void imprimir por el tipico printf y un ciclo for, para evitar tantas lineas innecesarias, otro problema es que no llega al fin del juego, no se que ocurre con las triadas, no le he preguntado a mi profesor gracias al cese de actividades de la u :silbar: :silbar: pero si alguien lo descubre estaria agradecido!!  :xD :xD :xD

Hay forma de eliminar la parte de las clases? es para basarme de aqui y hacer un proyecto del curso, pero claro esta, que aqui se manejan conceptos mas avanzados de los que me evaluaran, de antemano gracias!!  :laugh: :laugh:

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <time.h>

int i,j,b;

using namespace std;//plantilla

class jugador//va a tener 2 tipos de variables
{
private:
int puntaje;//guarda el puntaje de cada jugador
char a[20];//almacena nombre jugador
public:
void numpun(int a);//recibe el puntaje de cada jugador
int enpun (void);//muestra el puntaje
void innombre();//ingresa nombre de jugador
char nombre (void);//muestra el nombre del jugador
 ~ jugador() {cout<<"ADIOS" <<endl;}

};
void jugador::numpun(int a)
{
a=puntaje;//numpun va a tener un entero a que va a almacenar el puntjae
}
int jugador::enpun()
{
return(puntaje);//regresa ese puntaje almacenado para que pueda mostrarlo
}
void jugador::innombre()
{
cin>>a;//almacena nombre
}
char jugador::nombre()
{
cout<<a<<":";//regresa ese nombre
}
void imprimir (string tablero[])//cadena llamada tablero para imprimirlo
{
system ("pause");
system ("cls");//refrescar la pantalla en cada turno
cout<<"\t\t CONCENTRECE\n";
cout<<"\t********\n";
cout<<"\t********\n";
cout<<"\t**"<<tablero[0]<<"**"<<tablero[1]<<"**"<<tablero[2]<<"**"<<tablero[3]<<"**"<<tablero[4]<<"**"<<tablero[5]<<"**\n";//apareceran los valores aleatoreos dentro de tablero[]
cout<<"\t**"<<tablero[6]<<"**"<<tablero[7]<<"**"<<tablero[8]<<"**"<<tablero[9]<<"**"<<tablero[10]<<"**"<<tablero[11]<<"**\n";
cout<<"\t**"<<tablero[12]<<"**"<<tablero[13]<<"**"<<tablero[14]<<"**"<<tablero[15]<<"**"<<tablero[16]<<"**"<<tablero[17]<<"**\n";
cout<<"\t**"<<tablero[18]<<"**"<<tablero[19]<<"**"<<tablero[20]<<"**"<<tablero[21]<<"**"<<tablero[22]<<"**"<<tablero[23]<<"**\n";
cout<<"\t**"<<tablero[24]<<"**"<<tablero[25]<<"**"<<tablero[26]<<"**"<<tablero[27]<<"**"<<tablero[28]<<"**"<<tablero[29]<<"**\n";
cout<<"\t********\n";
cout<<"\t********\n";
 

}
int main()
{
jugador j1,j2;
int turn1=1, turn2=2, tot1=0, tot2=0,i,z=0, total=0,x,a[4];
int o=1,n,k,j;
int num[30];
string fichas [30];
string hola[]={"a","b","c","d","e","f","g","h","i","j","a","b","c","d","e","f","g","h","i","j","a","b","c","d","e","f","g","h","i","j"};//opciones de las letras ocultas
string table []={"00","01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29"};//posiciones
string auxi[]={"00","01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29"};
system("color 18");
cout<<"\t CONCENTRECE\n";//presentacion del juego


num[0]=0;
srand (time (NULL));//inicializamos el proceso de asignacion de fichas aleatorias del tablero
while(o<30)
{
n=rand()%30;//asigna un numero al azar no mayor a 30
k=0;
j=1;
while(j<=30)
{
if(n==num[j])//compara si n sigue el patron de orden de j
{
k=1;

}
j=j+1;
}
if(k!=1)//si k no es 1 es porque n es un numero que no sigue el orden
{
num[o]=n;//llena la matriz con numeros aleatorios
o=o+1;
}
}
for(o=0;o<30;o=o+1)//llena el arreglo de las fichas con letras, en orden aleatorio, usando el arreglo de numeros aleatorios para asignar posiciones aleatorias de las letras ocultas
{
fichas[o]=hola[num[o]];//asigna letras en orden aleatorio, de acuerdo a la matriz num[] que tiene valores aleatorios los cuales corresponden al orden del arreglo de caracteres
}
x=turn1;
do
{
if(x==turn1)//empieza jug 1 y empieza ciclo hasta q las 10 tercias sean encontradas
{
imprimir(table);//imprime tablero
cout<<"\n turno del jugador 1";//menciona turno

for(i=z;i<=3;i=i+1)
{
cout<<"\n Escoge una casilla:";
cin>>a[i];//muestra la letra que se oculta en esa ficha(posicion elegida)
if(a[i]>=30)
{
cout<<"\n Opcion invalida";
a[i]=29;
}

table[a[i]]=fichas[a[i]];
imprimir(table);

}
if((fichas[a[0]]==fichas[a[1]])&&(fichas[a[0]]==fichas[a[2]]))//verifica que las letras sean iguales
{
x=turn1;
tot1=tot1+1;
z=0;
table[a[0]]=fichas[a[0]];
table[a[1]]=fichas[a[1]];
table[a[2]]=fichas[a[2]];
cout<<"\n Has encontrado una terna!!\n";
}
else
if((fichas[a[0]]==fichas[a[1]])&&(fichas[a[2]]!=fichas[a[0]]))//2 fichas iguales y una distinta
{
x=turn2;//cambia el turno al jugador 2
z=1;//inicia contador para que vuelta a contar las fichas
table[a[0]]=auxi[a[0]];
table[a[1]]=auxi[a[1]];
a[0]=a[2];//guarda la posicion de la ficha diferente con la 2
table[a[0]]=fichas[a[0]];//deja visible la ficha que es distinta
cout<<"\nFallaste en una casilla: C\n";
cout<<"\nTermina turno de";
cout<<"j1.nombre()"<<endl;
}
else
if((fichas[a[0]]==fichas[a[2]])&&(fichas[a[1]]!=fichas[a[0]]))
{
x=turn2;
z=1;
table[a[0]]=auxi[a[0]];
table[a[2]]=auxi[a[2]];
a[0]=a[1];
table[a[0]]=fichas[a[0]];
cout<<"\nFallaste en una casilla: C";
cout<<"\nTermina turno de";
cout<<"j1.nombre()"<<endl;
}
else
if((fichas[a[1]]==fichas[a[2]])&&(fichas[a[0]]!=fichas[a[1]]))
{
x=turn2;
z=1;
table[a[2]]=auxi[a[2]];
table[a[1]]=auxi[a[1]];
a[1]=a[0];
table[a[0]]=fichas[a[0]];
cout<<"\nFallaste en una casilla: C";
cout<<"\nTermina turno de";
cout<<"j1.nombre()"<<endl;
}
else
{

x=turn2;
z=0;
table[a[0]]=auxi[a[0]];
table[a[1]]=auxi[a[1]];
table[a[2]]=auxi[a[2]];
cout<<"\nFallaste : C";
cout<<"\nTermina turno de";
cout<<"j1.nombre()"<<endl;
}
}
else
if(x==turn2)
{
imprimir(table);
cout<<"\nTurno de ";
cout<<j2.nombre()<<endl;
for(i=z;i<3;i=i+1)
{
cout<<"\nEscoge una casilla :";
cin>>a[i];
table[a[i]]=fichas[a[i]];
imprimir(table);
}
if((fichas[a[0]]==fichas[a[1]])&&(fichas[a[1]]==fichas[a[2]]))
{
x=turn2;
tot2=tot2+1;
z=0;
table[a[0]]=fichas[a[0]];
table[a[1]]=fichas[a[1]];
table[a[2]]=fichas[a[2]];
cout<<"\nHas encontrado una tercia!!\n";
}

else
if((fichas[a[0]]==fichas[a[1]])&&(fichas[a[2]]!=fichas[a[0]]))
{
x=turn1;
z=1;
table[a[0]]=auxi[a[0]];
table[a[1]]=auxi[a[1]];
a[0]=a[2];
table[a[0]]=fichas[a[0]];
cout<<"\nFallaste en una casilla: C\n";
cout<<"\nTermina turno de";
cout<<"j2.nombre()"<<endl;
}
else
if((fichas[a[0]]==fichas[a[2]])&&(fichas[a[1]]!=fichas[a[0]]))
{
x=turn1;
z=1;
table[a[0]]=auxi[a[0]];
table[a[2]]=auxi[a[2]];
a[0]=a[1];
table[a[0]]=fichas[a[0]];
cout<<"\nFallaste en una casilla: C";
cout<<"\nTermina turno de";
cout<<"j2.nombre()"<<endl;
}
else
if((fichas[a[1]]==fichas[a[2]])&&(fichas[a[0]]!=fichas[a[1]]))
{
x=turn1;
z=1;
table[a[2]]=auxi[a[2]];
table[a[1]]=auxi[a[1]];
a[1]=a[0];
table[a[0]]=fichas[a[0]];
cout<<"\nFallaste en una casilla: C";
cout<<"\nTermina turno de";
cout<<"j1.nombre()"<<endl;
}
else
{

x=turn1;
z=0;
table[a[0]]=auxi[a[0]];
table[a[1]]=auxi[a[1]];
table[a[2]]=auxi[a[2]];
cout<<"\nFallaste : C";
cout<<"\nTermina turno de";
cout<<"j1.nombre()"<<endl;
}
}
total=tot1+tot2;//suma puntajes de cada jugador
}
while(total<10);//se sale cuando sea =10 y termina la partida

j1.numpun(tot1);
j2.numpun(tot2);
if(tot1>tot2)
{
system("color 18");
cout<<"\n¡El ganador es el jugador 1!";
}
else
     if(tot2>tot1)
     {
      system("color 81");
      cout<<"\n¡El ganador es el jugador 2!";
 }
 else
       if(tot1==tot2)
       {
       cout<<"No hay ganador:p\n";
       cout<<"\nPuntos del jugador 1:"<<j1.enpun();
       cout<<"\nPuntos del jugador 2:"<<j2.enpun();
       cout<<"\nGracias por jugar:D";
    }
       
       return(0);
}

CalgaryCorpus

Sugiero partir de cero que recortar este programa. No parece ser un ejemplo de buenas practicas.

Por otro lado, si sabes de ciclos, for y printf, sugiero que hagas el reemplazo que propones tu mismo.
Aqui mi perfil en LinkedIn, invitame un cafe aqui

MAFUS

Lo más complicado será transformar las clases en estructuras y funciones pues necesitas de jugar con archivos de cabecera y los tipos incompletos para emular la ocultación de datos. Pero tampoco es necesario en este ejercicio.

bitconrad

#3
Señores lo que pasa es lo siguiente, intente hacer el proceso de impresion del tablero con printf y con 2 ciclos anidados, pero tengo el problema que al correr el programa no me imprime el tablero con la numeracion ordenada como en el codigo que les comparti que si imprime el tablero con la numeracion como deberia ser....

El proceso que hice fue lo basico, dentro de la funcion imprimir hice el cambio, pero a la hora de imprimir el tablero me da 2 columnas con numeros mayores a 48 y las demas con ceros

Que me recomiendan hacer en este caso?  :-\ :-\ les agradezco un monton!!

Código (cpp) [Seleccionar]
void imprimir (string tablero[])//cadena llamada tablero para imprimirlo
{
system ("pause");
system ("cls");//refrescar la pantalla en cada turno
cout<<"\t\t CONCENTRECE\n";
cout<<"\t********\n";
cout<<"\t********\n";
int b,i,j;
b=0;
for(i=0;i<5;i=i+1)
{
for(j=0;j<6;j=j+1)
{
printf("%d  ", tablero[i][j]);

}
printf("\n");
}
}



· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro
-Engel Lex

MAFUS

Los códigos se encierran entre etiquetas GeSHi, ver barra de herramientas que tienes justo arriba, y seleccionando el lenguaje apropiado en el menú desplegable.

En referente a tu pregunta entiendo que tratas tablero como un array bidimensional pero solo es de 1 dimensión.

printf("%d  ", tablero[i][j]); es totalmente erróneo.

Para solucionar esto tienes varias formas:
Pero la más sencilla es usar un sólo bucle y cada vez que el módulo (el resto de la división) entre i y 5 sea 0 imprimes un caracter de nueva línea.
Así:int i = 0;
while(i < 30) {
    printf("%2i ", i);
    ++i;
    if(i%6==0)
        printf("\n");
}


Por supuesto hay formas más elaboradas, pero como estás empezando bastará esta.
   

bitconrad

Brother muchas gracias por responder, gracias por la aclaracion soy nuevo, lo tendre en cuentra....

Efectivamente tenes razon con el codigo propuesto, imprime la matriz con los numeros a la perfeccion, el problema es, que el tablero impreso tiene la peculiaridad que me permite seleccionar una casilla, en la cual hay contenida una letra, asi como se propone en el codigo: tablero[0], tablero[1]...etc.

Logre hacerlo con "cout" pero al reemplazarlo por printf creo (no estoy seguro) que hay un problema con el tipo de la variable definida en la funcion, si alguien puede darme una mano con el cambio a printf estare muy agradecido

void imprimir (string tablero[])//cadena llamada tablero para imprimirlo
{
system ("pause");
system ("cls");
cout<<"\t\t CONCENTRECE\n";
cout<<"\t********\n";
cout<<"\t********\n";
int b,i,j;
b=0;
for(i=0;i<5;i=i+1)
{
for(j=0;j<6;j=j+1)
{

cout<<tablero[b]<<"**";
b=b+1;

}
printf("\n");
}
}

MAFUS

string no existen en C porqué es un tipo de dato propio de C++. Tendrás que cambiar toda referencia a string a cadenas de C, que son arrays de caracteres o punteros a memoria dinámica.
O puedes enredar un poco más y buscar alguna librería que proporcione cadenas.

Aunque lo más fácil es cambiar todos los strings por arrays de caracteres.
Pero con esto no se puede hacer cadena1 == cadena2, en su lugar deberás usar las funciones que proporciona string.h, como strcmp para comparar cadenas.

bitconrad

Brother muchas gracias me fue de gran ayuda la aclaracion, agradezco el tiempo que se toman para guiarme en esto...

Despues de horas y horas de busqueda y de ensayo y error, al correr el programa me envia este mensaje en consola:
[Warning] multi-character character constant [-Wmultichar]

Efectivamente me imprime en la matriz numeros de 0 al 9 y me marca este error en las lineas en las que tengo lo siguiente:


char table[]={'00','01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29'};
char auxi[]={'00','01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29'};


Que me sugieren? les agradezco su tiempo  ;-) ;-)





engel lex

las comillas simples ' representan que lo contenido en ellas es un char, es decir un caracter unico de 8 bit estás colocando 2 caracteres y no sabe que hacer con ello


es como que yo te diga "te daré un envase de 1 litro para llevarte tus 2 litros de agua"
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

bitconrad

Cita de: engel lex en 18 Mayo 2017, 01:55 AM
las comillas simples ' representan que lo contenido en ellas es un char, es decir un caracter unico de 8 bit estás colocando 2 caracteres y no sabe que hacer con ello


es como que yo te diga "te daré un envase de 1 litro para llevarte tus 2 litros de agua"
:-\ :-\  Eso estuve leyendo  :-\ :-\ pero el problema es que necesito que me aparezcan desde el 0 hasta el 30, con comilla doble no funciona, entonces en este caso que es lo mas conveniente?