Jump to content

problema en código C


Recommended Posts

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

 

void jugador1();

void jugador2();

void Introducir_Palabra();

void ahorcadodib();

void limpiar_cadenas();

 

char jugadores[2][20],palabra[21]={'\0'},palabraremp[21],c,letra='\0',op,sf,coincidencia;

char dibujo[6]={'O','/','|','\\','/','\\'};

int oportunidad=6;

int x=0, y=0, z=0, longcad=0,ciclo=0,ciclo1=0,ciclo2=0,var=0,ganar=0;

int ganados[2]={0,0},perdidos[2]={0,0},turno=1;

 

int main(){

 

for(x=0;x<2;x++){

for(y=0;y<15;y++){

jugadores[x][y]='\0';

}

}

 

while(ciclo==0){

system("cls");

printf("\t\tJuego \"El Ahorcado\"\n\n");

printf("a) Nuevo Juego\nb) Estadisticas\nc) Salir\n\nSeleccione una opcion: ");

fflush(stdin);

scanf("%c",&op);

switch(op){

case 'a':

ciclo1=0;

//Introduciendo los nombres de los jugadores

if(jugadores[0][0]=='\0'){

system("cls");

printf("\t\tJuego Nuevo\n\n");

for(x=0;x<2;x++){

printf("Ingrese el nombre del jugador %d: ",x+1);

fflush(stdin);

gets(jugadores[x]);

}

}

//fin introducir nombres

 

//

while(ciclo1==0){

system("cls");

printf("\t\tJuego Nuevo\n\n");

if(turno%2!=0)jugador1();

else jugador2();

turno++;

}

 

break;

 

case 'b':

break;

 

case 'c':

break;

 

default:

if(op == 'A' || op=='B' || op=='C'){

printf("Por favor seleccione la opcion con minusculas.\n");

system("PAUSE");

}

else{

printf("Opcion Incorrecta, vuelva a seleccionar una opcion.\n");

system("PAUSE");

}

break;

}

 

}

 

 

system("PAUSE");

return 0;

}

 

void jugador1(){

limpiar_cadenas();

ciclo2=0;

oportunidad=6;

var=0;

printf("Es turno de: %s para ingresar la palabra.\n",jugadores[0]);

Introducir_Palabra();

while(ciclo2==0){

system("cls");

ahorcadodib();

 

 

}

system("PAUSE");

 

}

 

void jugador2(){

limpiar_cadenas();

ciclo2=0;

oportunidad=6;

var=0;

printf("Es turno de: %s para ingresar la palabra.\n",jugadores[1]);

 

Introducir_Palabra();

while(ciclo2==0){

system("cls");

ahorcadodib();

 

 

}

system("PAUSE");

 

}

 

void Introducir_Palabra(){

y=0;

z=0;

printf("Ingrese la palabra o frase: (20 caracteres maximo)\n");

while(z<=20){

fflush(stdin);

c=getch();

if((c>=97 && c<=122) || c==32){

palabra[y]=c;

if(c==' ')printf(" ");

else printf("*");

y++;

z++;

if(z==19){

printf("\nCaracteres Completados.\nEsta seguro de que esta es la palabra o frase? Si(s)/No(n)\n");

fflush(stdin);

scanf("%c",&sf);

if(sf=='n' || sf=='N'){

z=0;

y=0;

char palabra[21]={'\0'};

}

else {

printf("Palabra ingresada exitosamente.\n");

break;

}

}

}

else if(c==13 && z>3){

printf("\nEsta seguro de que esta es la palabra o frase? Si(s)/No(n)\n");

fflush(stdin);

scanf("%c",&sf);

if(sf=='n' || sf=='N'){

z=0;

y=0;

char palabra[21]={'\0'};

}

else {

printf("Palabra ingresada exitosamente.\n");

break;

}

}

else if(c==13 && z<3){

printf("Minimo 3 Caracteres.\n");

y--;

}

else if(c==8){

printf("\b\b");

y--;

}

 

else if((c>65 && c<90)){

printf("\nMinusculas Por favor.\n");

}

 

}

longcad=strlen(palabra);

for(x=0;x<longcad;x++){

if(x==0){

palabraremp[x]=palabra[x];

coincidencia=palabra[x];

}

else if(palabra[x]==' '){

palabraremp[x]=' ';

x++;

palabraremp[x]=palabra[x];

}

else palabraremp[x]= '_';

}

 

for(x=0;x<longcad;x++){

if(coincidencia==palabra[x]){

palabraremp[x]=palabra[x];

}

}

/*

system("PAUSE");

*/

}

 

void ahorcadodib(){

ganar=0;

if(oportunidad==5)dibujo[5]='\0';

if(oportunidad==4)dibujo[4]='\0';

if(oportunidad==3)dibujo[3]='\0';

if(oportunidad==2)dibujo[2]='\0';

if(oportunidad==1)dibujo[1]='\0';

if(oportunidad==0)dibujo[0]='\0';

 

if(turno%2!=0){

printf("%s tiene que adivinar.\n",jugadores[1]);

printf("%s, te quedan %d oportunidades.\n\n",jugadores[1],oportunidad);

}

else{

printf("%s tiene que adivinar.\n",jugadores[0]);

printf("%s, te quedan %d oportunidades.\n\n",jugadores[0],oportunidad);

}

printf("/////////ACME///////////\n");

printf("/// |\n");

printf("/// |\n");

printf("/// |\n");

printf("/// %c\n",dibujo[0]);

printf("/// %c%c%c \n",dibujo[1],dibujo[2],dibujo[3]);

printf("/// %c %c \n",dibujo[4],dibujo[5]);

printf("/// \n");

printf("/// \n");

printf("/// \n");

printf("/// \n");

for(x=0;x<longcad;x++){

if(palabra[x]==palabraremp[x]){

ganar++;

}

if(ganar==longcad){

ciclo2=2;

if(turno%2!=0){

printf("Has Ganado %s.\n",jugadores[1]);

ganados[1]++;

perdidos[0]++;

}

else{

printf("Has Ganado %s.\n",jugadores[0]);

ganados[0]++;

perdidos[1]++;

}

printf("Desean seguir jugando? Si (s) - No (n)\n");

fflush(stdin);

scanf("%c",&op);

if(op=='n' || op=='N'){

ciclo1=2;

}

else if(op=='s' || op == 'S'){

limpiar_cadenas();

}

else{

printf("Seleccione s o n.\n");

}

}

}

if(ciclo2==0){

for(x=0;x<longcad;x++){

printf("%c ",palabraremp[x]);

}

 

 

 

printf("\n\nIngrese una letra: ");

fflush(stdin);

scanf("%c",&letra);

}

else if(oportunidad==0){

printf("\nHas Perdido.\n");

}

for(x=0;x<longcad;x++){

if(letra==palabra[x]){

palabraremp[x]=letra;

}

/*else{

var++;

if(var==longcad){

oportunidad--;

}

}

*/

}

 

if(letra>=65 && letra<=90){

printf("Por favor, ingrese la letra en minusculas.\n");

system("PAUSE");

}

}

 

void limpiar_cadenas(){

 

for(x=0;x<21;x++){

palabra[x]='\0';

palabraremp[x]='\0';

}

 

char dibujo[6]={'O','/','|','\\','/','\\'};

 

 

}

 

 

 

 

 

Estoy tratando de hacer un juego "Ahorcado" como trabajo para la U, todo bien, pero a veces cuando inserto la letra correcta, me descuenta uno, y no tiene que ser asi, es raro porque lo tengo con condicion

 

creo que el error esta en la funcion ahorcadodib, esta como comentario, si lo pueden compilar para que lo vean.

 

si me pudieran hechar una mano, muchas gracias

 

saludos!

Link to comment
Share on other sites

lo compilé y todo, me funciona, pero veo los siguientes errores:

 

Dice que la palabra como máximo debe poseer 20 letras, pero de la forma que lo tienes te obliga a que tenga 20 y no menos... es frustrante no poder poner la palabra que tú quieras, al parecer es porque lo lees con getchar, por qué no lo lees directamente todo junto?

 

El segundo error que veo es que no me descuenta puntaje ni nada si me equivoco, no pasa absolutamente nada si me equivoco??

 

El tercer problema es que no hay opción para devolverse al menú principal después de entrar al juego.

Link to comment
Share on other sites

  • 3 weeks later...

lo tienes mal estructurado , el codigo deberìa ser mucho màs simple hice un seudocodigo

 

 

mientras(vida!=0 \|| ganaste ==1 ){

 

pide letra

 

lee letra

 

if ( letrapertenece(letra)) {

 

rellenar palabra en pantalla

 

}

 

else{

 

vida--;

 

}

}

 

if(ganaste==1){

 

felicidades ganaste

}

 

else {

 

perdiste

 

volver al menu

}

 

asi mas o menos lo haría yo la unica paja serìa hacer una funciòn bool letrapertenece que identifique si la letra pertenece a la palabra o si esta repetida usando la palabra como variable global si quieres.

Edited by lostinspacex
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...