Autor
|
Tema: [?]Tengo problemas con los contadores de un videojuego (Leído 1,708 veces)
|
nathaniel
Desconectado
Mensajes: 2
|
Buenas a todos, estoy programando un videojuego del ahorcado que me encargaron para un proyecto. Estoy a punto de terminarlo, lo único que no pude conseguir es que los contadores funcionaran bien, dejen explico: El contador de "letras acertadas" debe empezar desde cero y el contador de "oportunidades restantes" en 5 cada vez que suba de nivel. En el segundo nivel si empieza de cero lo de "letras acertadas" pero en las "oportunidades restantes" puede empezar con un 4 en vez de un 5. Entenderán todo el lío en el código. Y bueno si alguien puede tomarse la molestia de leer el siguiente código y decir por lo menos algo que vale la pena intentar, sera de gran ayuda para alguien que ha perdido las esperanzas y ha recurrido a un foro. DEV C++5.11#include<stdio.h> #include<string.h> #include <stdlib.h> #include <iostream> #include "conio.h" #include <time.h> using namespace std; int main() { char rep[100],temporal[100]; char pal; char *palabra[]={"ambiente","cuidado","ecosistema","naturaleza","conservacion","recursos","equilibrio","forestacion","purifica","tierra","vida","ecologico","animales","ambiental","reciclaje","atmosfera","diversidad","energia"}; char *frase; int tacertado,nivel; srand(time(NULL)); int k=0; int longitud,i,j,inicial,acertado=0,temp=0,oportunidades=5,n=1; int repetido=0,gano=0, nrepetidos = 0; char nombre, apellido,edad, direccion; cout<<" AHORCADO JUEGO"<<endl; system("pause"); while(oportunidades != 0) { oportunidades=5; acertado=0; repetido=0; nrepetidos=0; frase=0; for(int v=0;v<=1;v++) { frase=palabra[rand()%18]; //Guarda un palabra al azar de las 18 existentes } system("cls"); longitud = 0; //Variables utilizadas para longitud de la palabra inicial = 0; j = 0; rep[0] = ' '; rep[1] = '\0'; do{ //Hacer todo hasta que las oportunidades(Vidas del juego) se acaben o adivine la palabra system("cls"); temp=0; cout<<" JUEGO DEL AHORCADO"<<endl; cout<<endl; if(inicial == 0) { //Calcula cuantas letras hay en la palabra con la funcion "strlen" y dependiendo de ello imprime los guiones bajos for(i=0;i<strlen(frase);i++) { if(frase[i] == ' ') { temporal[i] = ' '; longitud++; } else { temporal[i] = '_'; longitud++; } } } inicial = 1; temporal[longitud] = '\0'; //////////////////////////////////////////////////////////////////////////////// //FOR REPETIDOS repetido = 0; for(i=0;i<nrepetidos;i++) { //For para cuando se repite la letra, empieza si se introduce la misma letra 2 veces if(rep[i] == pal) { //Ejemplo Palabra casa: repetido = 1; // _ _ _ _ <----------Ingresa "a" el usuario REPETIDO=0 // _ a _ a <----------Ingresa "a" } } if(repetido == 0) { //For para contar los ACIERTOS for(i=0;i<=strlen(frase);i++) { if(frase[i] == pal ) { temporal[i] = pal; acertado++; temp=1; } } if(temp == 0) { oportunidades = oportunidades - 1; } //Si la letra es diferente y no es una repetitiva ni tampoco es un acierto se le quita una oportunidad nrepetidos++; } else { printf("Ya se ha introducido este caracter"); printf("\n\n"); } //////////////////////////////////////////////////////////////////////////////// printf("\n"); for(i=0;i<strlen(temporal);i++) { printf(" %c ",temporal[i]); } printf("\n"); if(strcmp(frase,temporal) == 0) { gano = 1; break; } cout<<endl; cout<<"Nivel "<<n<<endl; printf("\n"); printf("Letras Acertadas: %d",acertado); printf("\n"); printf("Oportunidades Restantes: %d",oportunidades); printf("\n"); rep[j] = pal;//Guarda el valor de "pal"(Letra que introduce el usuario) en un arreglo j++; if (oportunidades==0) { break; } printf("Introduzca una letra:"); scanf("\n%c",&pal); }while(oportunidades != 0); //Hasta que no haya oportunidades o adivine la palabra imprime: nivel=n-1; if(gano && oportunidades>0) { printf("\n\n"); printf("Enhorabuena, has ganado."); } else{ printf("\n\n"); printf("Has perdido."); cout<<"La palabra era : "<<frase<<endl; cout<<"Puntaje total :"<<tacertado<<endl; cout<<"Nivel maximo : "<<nivel<<endl; } system ("pause"); n++; tacertado+=acertado; } printf("\n\n"); system("PAUSE"); return 0; }
Nota: Puede que a algunos les salga [Warning]deprecated conversion from...En mi caso era que el programa se desconfigura de vez en cuando, como solución lo abría en otro archivo nuevo.
|
|
« Última modificación: 24 Mayo 2019, 02:18 am por nathaniel »
|
En línea
|
|
|
|
K-YreX
|
No me voy a poner a revisar el código entero pero... - ¿Por qué mezclar C con C++? <printf()>/<cout> <scanf()>/<cin>...
- ¿Por qué usar <conio.h>? Si lo necesitas para <getch()> tienes, <getchar()> (<cstdio>) o <cin.get()> (<iostream>) No es estándar y a muchos no nos dejará probar ese código al tener esa librería...
- No uses <system(...)>. Usa <cin.get()> en vez de <system("pause")> y para limpiar la pantalla tienes la alternativa de hacer una función que pinte muchos saltos de línea.
- <for> de la línea 30... ¿Por qué lo repites 2 veces la acción de asignar una palabra?
- En la línea 18 yo diría que faltan punteros o... cada variable solo es un <char>?? ¿Por qué no usar <string>?
Para códigos de ya un cierto tamaño es recomendable empezar a modularizar un poco. Crea funciones que hagan cosas específicas y si tienes problemas con algo solo tienes que mirar la función que se encarga de eso y no todo el código. Te dejo un pseudocódigo para que veas cómo lo puedes implementar. nivel := 0 mientras nivel < NIVEL_MAX and !has_perdido vidas := VIDAS_MAX - nivel // asi ya restas una vida al empezar cada nivel. Ten en cuenta que VIDAS_MAX > NIVEL_MAX mientras vidas > 0 and !acertado jugar() fin mientras has_perdido = !acertado // si has acertado no pierdes. Si te has quedado sin vidas, si si !has_perdido nivel := nivel + 1 fin si fin mientras Se puede ahorrar alguna variable como <has_perdido> pero lo dejo así para que lo veas mejor.
|
|
|
En línea
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
nathaniel
Desconectado
Mensajes: 2
|
Oh si, ya lo resolví por mi cuenta. Bueno gracias por responder y por los consejos. Dejo el código aquí ya resuelto por si alguien lo necesita. #include <stdlib.h> #include <iostream> #include "conio.h" #include <time.h> #include<stdio.h> #include<string.h> using namespace std; int main() { int res=1,oportunidades=5,ni=1,tpuntaje=0; do{ char rep[100],temporal[100]; char pal; char *palabra[]={"ambiente","cuidado","ecosistema","naturaleza","conservacion","recursos","equilibrio","forestacion","purifica","tierra","vida","ecologico","animales","ambiental","reciclaje","atmosfera","diversidad","energia"}; char *frase; int tacertado=0,nivel=1; srand(time(NULL)); int longitud,i,j,inicial,acertado=0,temp=0,n=1; int repetido=0,gano=0, nrepetidos=0; cout<<"JUEGO DEL AHORCADO"<<endl; /*printf("Introduzca la palabra a adivinar: "); gets(frase);*/ //while(oportunidades != 0) //{ oportunidades=5; acertado=0; repetido=0; nrepetidos=0; frase=0; for(int v=0;v<=1;v++) { frase=palabra[rand()%18]; //Guarda un palabra al azar de las 18 existentes } system("cls"); longitud = 0; inicial = 0; j = 0; rep[0] = ' '; rep[1] = '\0'; do { system("cls"); cout<<"JUEGO DEL AHORCADO"<<endl; cout<<endl; temp=0; if(inicial == 0) { for(i=0;i<strlen(frase);i++) { if(frase[i] == ' ') { temporal[i] = ' '; longitud++; } else { temporal[i] = '_'; longitud++; } } } inicial = 1; temporal[longitud] = '\0'; ///////ojo /*for(i=0;i<strlen(rep);i++) { if(rep[i] == pal) { repetido = 1; break; } else { repetido = 0; } }*/ if(repetido == 0) { for(i=0;i<strlen(frase);i++) { if(frase[i] == pal) { temporal[i] = pal; acertado++; temp=1; } } } if(repetido == 0 && j>0) { if(temp == 0) { oportunidades = oportunidades - 1; } } /* else { printf("Ya se ha introducido este caracter"); printf("\n\n"); }*/ printf("\n"); for(i=0;i<strlen(temporal);i++) { printf(" %c ",temporal[i]); } printf("\n"); if(strcmp(frase,temporal) == 0) { gano = 1; break; } printf("\n"); cout<<"Nivel: "<<ni<<endl; printf("\n"); printf("Letras Acertadas: %d",acertado); printf("\n"); printf("Oportunidades Restantes: %d",oportunidades); printf("\n"); rep[j] = pal; j++; if (oportunidades==0) { break; } printf("Introduzca una letra:"); scanf("\n%c",&pal); for(i=0;i<j;i++) { if(rep[i] == pal) { repetido = 1; cout<<"Ya se ha introducido este caracter"<<endl; system ("pause"); break; } else { repetido = 0; } } }while(oportunidades != 0); if(gano) { printf("\n\n"); printf("Enhorabuena, has ganado."); printf("\n\n"); printf("Deseas continuar: 1 = si, 2 = no :\n"); scanf("%i",&res); if(res==1) { ni++; tpuntaje+=acertado; } } else { printf("\n\n"); printf("Has perdido."); cout<<"La palabra era "<<frase<<endl; cout<<"Puntaje total "<<tpuntaje<<endl; cout<<"Nivel maximo:"<<ni-1<<endl; printf("Deseas continuar jugando?: 1 = si, 2 = no :\n"); scanf("%i",&res); if(res==1) { ni=1; tpuntaje=0; } } }while (res!=2); system("PAUSE"); return 0; }
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
contadores y alarma
Electrónica
|
shovanny
|
5
|
8,129
|
1 Junio 2005, 20:25 pm
por LinuxRaider
|
|
|
problemas que tube con la proteccion de mi equipo. y problemas que tengo ahora
Seguridad
|
boot/expert
|
4
|
5,544
|
20 Septiembre 2012, 20:29 pm
por boot/expert
|
|
|
Ayuda tengo problemas con mi computadora y queria saber si tengo virus
Windows
|
Thirtyweed
|
1
|
3,228
|
18 Octubre 2013, 10:00 am
por TheChivo
|
|
|
Contadores en c++
Programación C/C++
|
AndresDiazK
|
5
|
2,504
|
14 Marzo 2014, 19:06 pm
por AndresDiazK
|
|
|
Tengo la sospecha de que están usando mi cuenta de un videojuego
Seguridad
|
QuieroSerAnonimo
|
3
|
2,563
|
30 Diciembre 2016, 13:56 pm
por hsk75rv
|
|