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
#include<stdio.h> #include<conio.h> #include<string.h> #include<stdlib.h> #define tam 10 void juego(char drain[tam], int habitaciones[tam], int *puntos,int *full){ // Declaración de variables char opcionJuego; int cent=0,habi=0,num; do { // Inicialización de las variables int cent2=0; // Toma la opción del usuario if(opcionJuego=='o'){ for(int i=0; i<tam; i++){ if(drain[i]=='*' && !(drain[0]==drain[i])){ drain[i-1]='*'; drain[i]=' '; } } cent=0; // Se incrementa el nivel de agua habitaciones[habi]++; } else if(opcionJuego=='p'){ for(int i=0;i<tam;i++){ if(drain[i]=='*' && !(drain[tam-1]==drain[i]) && cent2!=1){ drain[i+1]='*'; drain[i]=' '; cent2=1; } } cent=0; // Se incrementa el nivel de agua habitaciones[habi]++; } else if(opcionJuego=='q'){ for(int i=0;i<tam;i++){ if(drain[i]=='*'){ num=habitaciones[i]; habitaciones[i]='0'; switch(num){ case '1': *puntos=*puntos+1; break; case '2': *puntos=*puntos+2; break; case '3': *puntos=*puntos+3; break; case '4': *puntos=*puntos+4; break; case '5': *puntos=*puntos+5; break; } } } cent=0; // Se incrementa el nivel de agua habitaciones[habi]++; } else{ cent=1; } } while(cent==1); // Se comprueba el nivel de agua for(int i=0;i<tam;i++){ if(habitaciones[i]>='6'){ *full=1; } } if (*full==1){ // Puntuación final del juego } return; } void edificio (void){ char drain[tam]; int habitaciones[tam], puntos=0, full=0; // Preparación del juego for(int i=0;i<tam;i++){ } for(int i=0;i<tam;i++){ drain[i]=' '; } drain[tam/2]='*'; do{ // Interfaz for(int i=0;i<tam; i++){ } for(int i=0; i<tam;i++){ } juego(drain, habitaciones, &puntos, &full); }while(full==0); return; } void repetir (void){ // Se declaran las variables int a=0, cent; do{ do{ cent=0; }while(!(a=='s' || a=='n')); if (a=='s'){ cent=1; edificio(); } }while(cent==1); return; } void inicio (void){ edificio(); repetir(); return; } int main(void) { inicio(); return(0); }