elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [?]Tengo problemas con los contadores de un videojuego
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [?]Tengo problemas con los contadores de un videojuego  (Leído 586 veces)
nathaniel

Desconectado Desconectado

Mensajes: 2


Ver Perfil
[?]Tengo problemas con los contadores de un videojuego
« en: 23 Mayo 2019, 07:49 am »

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
Código
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include <stdlib.h>
  4. #include <iostream>
  5. #include "conio.h"
  6. #include <time.h>
  7. using namespace std;
  8. int main() {
  9.    char rep[100],temporal[100];
  10.    char pal;
  11.    char *palabra[]={"ambiente","cuidado","ecosistema","naturaleza","conservacion","recursos","equilibrio","forestacion","purifica","tierra","vida","ecologico","animales","ambiental","reciclaje","atmosfera","diversidad","energia"};
  12.    char *frase;
  13.    int tacertado,nivel;
  14.    srand(time(NULL));
  15. int k=0;
  16.    int longitud,i,j,inicial,acertado=0,temp=0,oportunidades=5,n=1;
  17.    int repetido=0,gano=0, nrepetidos = 0;
  18.    char nombre, apellido,edad, direccion;
  19.  
  20. cout<<" AHORCADO JUEGO"<<endl;
  21.  
  22. system("pause");
  23. while(oportunidades != 0)
  24. {
  25. oportunidades=5;
  26.     acertado=0;
  27.     repetido=0;
  28.     nrepetidos=0;
  29.     frase=0;
  30.    for(int v=0;v<=1;v++)
  31.    {
  32.        frase=palabra[rand()%18];   //Guarda un palabra al azar de las 18 existentes
  33.    }
  34.  
  35.   system("cls");
  36.  
  37.    longitud = 0;   //Variables utilizadas para longitud de la palabra
  38.    inicial = 0;
  39.    j = 0;
  40.  
  41.    rep[0] = ' ';
  42.    rep[1] = '\0';
  43.  
  44. do{
  45.  
  46.    //Hacer todo hasta que las oportunidades(Vidas del juego) se acaben o adivine la palabra
  47.    system("cls");
  48.    temp=0;
  49. cout<<" JUEGO DEL AHORCADO"<<endl;
  50. cout<<endl;
  51.        if(inicial == 0) {      //Calcula cuantas letras hay en la palabra con la funcion "strlen" y dependiendo de ello imprime los guiones bajos
  52.         for(i=0;i<strlen(frase);i++) {
  53.          if(frase[i] == ' ') {
  54.            temporal[i] = ' ';
  55.             longitud++;
  56.          }
  57.          else {
  58.             temporal[i] = '_';      
  59.             longitud++;
  60.          }
  61.         }
  62.        }
  63.  
  64.        inicial = 1;
  65.  
  66.        temporal[longitud] = '\0';
  67.  
  68.    ////////////////////////////////////////////////////////////////////////////////
  69. //FOR REPETIDOS
  70.        repetido = 0;
  71.  
  72.        for(i=0;i<nrepetidos;i++) { //For para cuando se repite la letra, empieza si se introduce la misma letra 2 veces
  73.           if(rep[i] == pal) {          //Ejemplo Palabra casa:
  74.            repetido = 1;               //  _ _ _ _    <----------Ingresa "a" el usuario  REPETIDO=0                    
  75.                                        //  _ a _ a    <----------Ingresa "a"            
  76.          }
  77.        }
  78.  
  79.        if(repetido == 0) {                 //For para contar los ACIERTOS
  80.            for(i=0;i<=strlen(frase);i++) {
  81.                if(frase[i] == pal ) {
  82.                    temporal[i] = pal;
  83.                    acertado++;
  84.                    temp=1;
  85.                }
  86.            }
  87.            if(temp == 0) {
  88.                oportunidades = oportunidades - 1;
  89.            }    //Si la letra es diferente y no es una repetitiva ni tampoco es un acierto se le quita una oportunidad
  90.  
  91.            nrepetidos++;
  92.        } else {
  93.         printf("Ya se ha introducido este caracter");
  94.         printf("\n\n");
  95.        }
  96.  
  97. ////////////////////////////////////////////////////////////////////////////////
  98.  
  99.        printf("\n");
  100.  
  101. for(i=0;i<strlen(temporal);i++) {
  102.        printf(" %c ",temporal[i]);
  103.     }
  104.  
  105. printf("\n");
  106.  
  107.        if(strcmp(frase,temporal) == 0) {
  108.            gano = 1;
  109.            break;
  110.        }
  111.   cout<<endl;
  112.   cout<<"Nivel "<<n<<endl;
  113.        printf("\n");
  114.        printf("Letras Acertadas: %d",acertado);
  115.        printf("\n");
  116.        printf("Oportunidades Restantes: %d",oportunidades);
  117.        printf("\n");
  118.  
  119. rep[j] = pal;//Guarda el valor de "pal"(Letra que introduce el usuario) en un arreglo
  120.        j++;
  121.  
  122.        if (oportunidades==0)
  123.        {
  124.           break;
  125.        }
  126.  
  127.        printf("Introduzca una letra:");
  128.        scanf("\n%c",&pal);
  129.  
  130.    }while(oportunidades != 0); //Hasta que no haya oportunidades o adivine la palabra imprime:
  131.  
  132. nivel=n-1;
  133.    if(gano && oportunidades>0) {
  134.        printf("\n\n");
  135.        printf("Enhorabuena, has ganado.");
  136.     }
  137.        else{
  138.         printf("\n\n");
  139.        printf("Has perdido.");
  140.        cout<<"La palabra era : "<<frase<<endl;
  141.        cout<<"Puntaje total :"<<tacertado<<endl;
  142.        cout<<"Nivel maximo : "<<nivel<<endl;
  143. }
  144.    system ("pause");
  145.    n++;
  146.    tacertado+=acertado;
  147. }
  148.  
  149.    printf("\n\n");
  150.    system("PAUSE");
  151.    return 0;
  152. }
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
Moderador
***
Desconectado Desconectado

Mensajes: 916



Ver Perfil
Re: [?]Tengo problemas con los contadores de un videojuego
« Respuesta #1 en: 23 Mayo 2019, 08:12 am »

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.
Código:
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

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
nathaniel

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: [?]Tengo problemas con los contadores de un videojuego
« Respuesta #2 en: 24 Mayo 2019, 02:17 am »

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.  :rolleyes:

Código
  1. #include <stdlib.h>
  2. #include <iostream>
  3. #include "conio.h"
  4. #include <time.h>
  5. #include<stdio.h>
  6. #include<string.h>
  7. using namespace std;
  8. int main()
  9. {
  10. int res=1,oportunidades=5,ni=1,tpuntaje=0;
  11.    do{
  12.  
  13. char rep[100],temporal[100];
  14.    char pal;
  15.    char *palabra[]={"ambiente","cuidado","ecosistema","naturaleza","conservacion","recursos","equilibrio","forestacion","purifica","tierra","vida","ecologico","animales","ambiental","reciclaje","atmosfera","diversidad","energia"};
  16.    char *frase;
  17.    int tacertado=0,nivel=1;
  18.    srand(time(NULL));
  19.  
  20.  
  21.    int longitud,i,j,inicial,acertado=0,temp=0,n=1;
  22.    int repetido=0,gano=0, nrepetidos=0;
  23.  
  24.  
  25.    cout<<"JUEGO DEL AHORCADO"<<endl;
  26.    /*printf("Introduzca la palabra a adivinar: ");
  27.     gets(frase);*/
  28.  
  29. //while(oportunidades != 0)
  30. //{
  31.        oportunidades=5;
  32.     acertado=0;
  33.     repetido=0;
  34.     nrepetidos=0;
  35.     frase=0;
  36.  
  37.    for(int v=0;v<=1;v++)
  38.    {
  39.        frase=palabra[rand()%18];   //Guarda un palabra al azar de las 18 existentes
  40.    }
  41.  
  42.  
  43.    system("cls");
  44.  
  45.    longitud = 0;
  46.    inicial = 0;
  47.    j = 0;
  48.  
  49.    rep[0] = ' ';
  50.    rep[1] = '\0';
  51.  
  52.  
  53.    do {
  54.  
  55.        system("cls");
  56.        cout<<"JUEGO DEL AHORCADO"<<endl;
  57.        cout<<endl;
  58.        temp=0;
  59.  
  60.        if(inicial == 0) {
  61.         for(i=0;i<strlen(frase);i++) {
  62.          if(frase[i] == ' ') {
  63.            temporal[i] = ' ';
  64.             longitud++;
  65.          }
  66.          else {
  67.             temporal[i] = '_';      
  68.             longitud++;
  69.          }
  70.         }
  71.        }
  72.  
  73.        inicial = 1;
  74.  
  75.        temporal[longitud] = '\0';
  76.  
  77.  
  78.       ///////ojo
  79.       /*for(i=0;i<strlen(rep);i++) {
  80.            if(rep[i] == pal) {
  81.             repetido = 1;
  82.             break;
  83.           }
  84.           else {
  85.            repetido = 0;
  86.          }
  87.         }*/
  88.  
  89.        if(repetido == 0) {
  90.         for(i=0;i<strlen(frase);i++) {
  91.            if(frase[i] == pal) {
  92.             temporal[i] = pal;
  93.              acertado++;
  94.              temp=1;
  95.            }
  96.          }
  97.        }
  98.  
  99.      if(repetido == 0 && j>0) {
  100.         if(temp == 0) {
  101.           oportunidades = oportunidades - 1;    
  102.     }
  103. }
  104.  
  105.       /* else {
  106.          printf("Ya se ha introducido este caracter");
  107.          printf("\n\n");
  108.         }*/
  109.  
  110.        printf("\n");
  111.  
  112.        for(i=0;i<strlen(temporal);i++) {
  113.         printf(" %c ",temporal[i]);
  114.        }
  115.  
  116.        printf("\n");
  117.  
  118.        if(strcmp(frase,temporal) == 0) {
  119.            gano = 1;
  120.            break;
  121.        }
  122.        printf("\n");
  123.        cout<<"Nivel: "<<ni<<endl;
  124.        printf("\n");
  125.        printf("Letras Acertadas: %d",acertado);
  126.        printf("\n");
  127.        printf("Oportunidades Restantes: %d",oportunidades);
  128.        printf("\n");
  129.  
  130.        rep[j] = pal;
  131.        j++;
  132.  
  133.        if (oportunidades==0)
  134.        {
  135.           break;
  136.        }
  137.  
  138.        printf("Introduzca una letra:");
  139.        scanf("\n%c",&pal);
  140.  
  141.        for(i=0;i<j;i++) {
  142.           if(rep[i] == pal) {
  143.            repetido = 1;
  144.            cout<<"Ya se ha introducido este caracter"<<endl;
  145.            system ("pause");
  146.            break;
  147.          }
  148.          else {
  149.           repetido = 0;
  150.         }
  151.        }
  152.  
  153.    }while(oportunidades != 0);
  154.  
  155.  
  156.    if(gano) {
  157.    printf("\n\n");
  158.    printf("Enhorabuena, has ganado.");
  159.    printf("\n\n");
  160.    printf("Deseas continuar: 1 = si, 2 = no :\n");
  161.    scanf("%i",&res);
  162.    if(res==1)
  163.    {
  164.     ni++;
  165.     tpuntaje+=acertado;
  166. }
  167.    }
  168.    else {
  169.        printf("\n\n");
  170.        printf("Has perdido.");
  171.        cout<<"La palabra era "<<frase<<endl;
  172.        cout<<"Puntaje total "<<tpuntaje<<endl;
  173.        cout<<"Nivel maximo:"<<ni-1<<endl;
  174.        printf("Deseas continuar jugando?: 1 = si, 2 = no :\n");
  175.     scanf("%i",&res);
  176.     if(res==1)
  177.     {
  178.     ni=1;
  179.     tpuntaje=0;
  180. }
  181.    }
  182.  
  183. }while (res!=2);
  184.    system("PAUSE");
  185.    return 0;
  186.  
  187. }
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
contadores y alarma
Electrónica
shovanny 5 6,837 Último mensaje 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 3,266 Último mensaje 20 Septiembre 2012, 20:29 pm
por boot/expert
Ayuda tengo problemas con mi computadora y queria saber si tengo virus
Windows
Thirtyweed 1 1,818 Último mensaje 18 Octubre 2013, 10:00 am
por TheChivo
Contadores en c++
Programación C/C++
AndresDiazK 5 1,397 Último mensaje 14 Marzo 2014, 19:06 pm
por AndresDiazK
Tengo la sospecha de que están usando mi cuenta de un videojuego
Seguridad
QuieroSerAnonimo 3 1,286 Último mensaje 30 Diciembre 2016, 13:56 pm
por hsk75rv
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines