Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Juego en C - Robot drenador

Estas en el tema de Juego en C - Robot drenador en el foro de C/C++ en Foros del Web. Hola, he realizado un trabajo hace poco, y queria compartirlo por si le sirve a alguien para practicar, como a mi. Y ya de paso, ...
  #1 (permalink)  
Antiguo 12/01/2012, 19:29
Avatar de AlmaVagabunda  
Fecha de Ingreso: noviembre-2011
Ubicación: San Juan De Alicante, Valenciana, Spain, Spain
Mensajes: 20
Antigüedad: 12 años, 8 meses
Puntos: 1
Juego en C - Robot drenador

Hola, he realizado un trabajo hace poco, y queria compartirlo por si le sirve a alguien para practicar, como a mi.
Y ya de paso, si a alguien se le ocurre una forma de mejorarlo, siempre que sea en C (No C++) bienvenida sea la sugerencia, ademas, lo agradeceria mucho.

Descripcion:
Se trata un juego en el que un robot deberá drenar el agua de diez habitaciones. El nivel de agua crece sin parar en estas habitaciones, y el objetivo será evitar que dicho nivel aumente demasiado en cualquiera de ellas mientras se consigue el máximo número posible de puntos.
En primer lugar se mostrará la puntuación, que comenzará valiendo cero. A continuación se representa el nivel de agua de cada una de las diez habitaciones mediante un entero. El nivel inicial de agua de cada habitación será un número aleatorio entre 0 y 3. El asterisco representa la posición del robot. La posición inicial será la que se ve en la captura de pantalla anterior. Finalmente se mostrarán las diferentes acciones que podrá realizar el robot.
Las diez habitaciones están comunicadas, así que el robot podrá moverse a izquierda o derecha (pulsando las teclas o y p respectivamente). Las dos habitaciones de los extremos no están comunicadas, por lo que desde la primera no se podrá acceder a la última y viceversa. La otra opción posible es drenar el agua de la habitación actual en la que se encuentre el robot (tecla q). Al hacer esto, el nivel de agua de la habitación se añadirá a la puntuación y el nuevo nivel de la habitación pasará a ser cero.
Tras cada acción del robot (movimiento o drenaje de agua) se incrementará en uno el nivel de agua de una habitación escogida al azar. El juego continuará hasta que el nivel de agua de cualquiera de las habitaciones llegue a seis. En ese instante se indicará que la partida ha terminado y se preguntará al jugador si desea jugar de nuevo.

Código C:
Ver original
  1. #include<stdio.h>
  2. #include<conio.h>
  3. #include<string.h>
  4. #include<stdlib.h>
  5.  
  6. #define tam 10
  7.  
  8.  
  9. void juego(char drain[tam], int habitaciones[tam], int *puntos,int *full){
  10.  
  11.     // Declaración de variables
  12.     char opcionJuego;
  13.     int cent=0,habi=0,num;
  14.     do {
  15.         // Inicialización de las variables
  16.         int cent2=0;
  17.  
  18.  
  19.         // Toma la opción del usuario
  20.         opcionJuego=getch();
  21.  
  22.         if(opcionJuego=='o'){
  23.             for(int i=0; i<tam; i++){
  24.                 if(drain[i]=='*' && !(drain[0]==drain[i])){
  25.                     drain[i-1]='*';
  26.                     drain[i]=' ';
  27.                 }
  28.             }
  29.             cent=0;
  30.  
  31.             // Se incrementa el nivel de agua
  32.             habi=rand()%tam;
  33.             habitaciones[habi]++;
  34.         }
  35.         else if(opcionJuego=='p'){
  36.             for(int i=0;i<tam;i++){
  37.                 if(drain[i]=='*' && !(drain[tam-1]==drain[i]) && cent2!=1){
  38.                     drain[i+1]='*';
  39.                     drain[i]=' ';
  40.                     cent2=1;
  41.                 }
  42.             }
  43.             cent=0;
  44.  
  45.             // Se incrementa el nivel de agua
  46.             habi=rand()%tam;
  47.             habitaciones[habi]++;
  48.         }
  49.         else if(opcionJuego=='q'){
  50.             for(int i=0;i<tam;i++){
  51.                 if(drain[i]=='*'){
  52.                     num=habitaciones[i];
  53.                     habitaciones[i]='0';
  54.  
  55.                     switch(num){
  56.                     case '1':
  57.                         *puntos=*puntos+1;
  58.                         break;
  59.                     case '2':
  60.                         *puntos=*puntos+2;
  61.                         break;
  62.                     case '3':
  63.                         *puntos=*puntos+3;
  64.                         break;
  65.                     case '4':
  66.                         *puntos=*puntos+4;
  67.                         break;
  68.                     case '5':
  69.                         *puntos=*puntos+5;
  70.                         break;
  71.                     }
  72.                 }
  73.             }
  74.             cent=0;
  75.  
  76.             // Se incrementa el nivel de agua
  77.             habi=rand()%tam;
  78.             habitaciones[habi]++;
  79.         }
  80.         else{
  81.             cent=1;
  82.         }
  83.     } while(cent==1);
  84.  
  85.     system("cls");
  86.  
  87.     // Se comprueba el nivel de agua
  88.     for(int i=0;i<tam;i++){
  89.         if(habitaciones[i]>='6'){
  90.             *full=1;
  91.  
  92.         }
  93.  
  94.     }
  95.  
  96.     if (*full==1){
  97.  
  98.  
  99.  
  100.         // Puntuación final del juego
  101.         printf("Puntuacion final: %d\n\n",*puntos);
  102.  
  103.  
  104.     }
  105.  
  106.     return;
  107. }
  108. void edificio (void){
  109.  
  110.     char drain[tam];
  111.     int habitaciones[tam], puntos=0, full=0;
  112.  
  113.     // Preparación del juego
  114.     for(int i=0;i<tam;i++){
  115.         habitaciones[i]=rand()%4+48;
  116.     }
  117.     for(int i=0;i<tam;i++){
  118.         drain[i]=' ';
  119.     }
  120.     drain[tam/2]='*';
  121.  
  122.     do{
  123.         // Interfaz
  124.         for(int i=0;i<tam; i++){
  125.             printf(" ");
  126.             printf("%c",habitaciones[i]);
  127.         }
  128.         printf("\n");
  129.         for(int i=0; i<tam;i++){
  130.             printf(" ");
  131.             printf("%c", drain[i]);
  132.         }
  133.  
  134.         printf("\n");
  135.         printf("\nAcciones:\n");
  136.         printf("o - Mover izquierda\n");
  137.         printf("p - Mover derecha\n");
  138.         printf("q - Drenar agua\n\n\n");
  139.         printf("Puntuacion final: %d\n\n",puntos);
  140.         juego(drain, habitaciones, &puntos, &full);
  141.     }while(full==0);
  142.  
  143.     return;
  144. }
  145. void repetir (void){
  146.     // Se declaran las variables
  147.     int a=0, cent;
  148.     do{
  149.  
  150.         do{
  151.             cent=0;
  152.             printf("Quieres jugar de nuevo (s/n)? ");
  153.             a=getch();
  154.             fflush(stdin);
  155.             system("cls");
  156.         }while(!(a=='s' || a=='n'));
  157.  
  158.         if (a=='s'){
  159.             cent=1;
  160.             edificio();
  161.         }
  162.     }while(cent==1);
  163.  
  164.     return;
  165. }
  166.  
  167. void inicio (void){
  168.  
  169.     edificio();
  170.     repetir();
  171.  
  172.     return;
  173. }
  174.  
  175. int main(void) {
  176.  
  177.     inicio();
  178.     return(0);
  179. }

Etiquetas: juego, robot, vectores
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 13:43.