Para demostrar el uso de la generación de números aleatorios con C decidí hacer un juego (no, no tiene interfaz gráfica) de adivina el número, seguramente conocido por muchos.
Lo que hace este juego es “pensar” en un número y pedirle al usuario que lo adivine. También brinda pistas indicando si el número secreto es mayor o menor que la respuesta del usuario.
Me di a la tarea de agregarle un contador de intentos y un límite. En caso de llegar al límite se le indica al usuario que ha perdido y le dice cuál adivino.
Si el jugador adivina el número, entonces también se le indica. Veamos su codificación.
Ya cité el post para obtener números aleatorios con rand. Pues vamos a usar esa función para “pensar” en un número.
Hacemos un ciclo while
infinito que se va a romper en 2 casos:
Dentro del ciclo hacemos lo siguiente, en orden:
El código final queda así de simple:
/*
Adivina el número con C
@author parzibyte.me
@see https://parzibyte.me/blog/2019/03/21/obtener-numeros-aleatorios-c/
*/#include <stdio.h> // printf
#include <stdlib.h> // rand y RAND_MAX
#include <unistd.h> // getpid
// Ajustes del juego
#define INTENTOS_MAXIMOS 2
#define INFERIOR 1 // Límite inferior para aleatoridad
#define SUPERIOR 5 // Límite superior para aleatoridad
// Prototipo de funciones
int aleatorio_en_rango(int minimo, int maximo);
// Función main
int main() {
// Hay que alimentar a rand, solamente una vez
srand(getpid());
// Obtener un número aleatorio que no le diremos al usuario
int secreto = aleatorio_en_rango(INFERIOR, SUPERIOR);
// Descomenta esta línea para "hacer trampa"
// printf("El secreto es %d\n\n", secreto);
int respuesta, intentos = 0;
// Indicarle que adivine
printf("He seleccionado un número al azar entre %d y %d, tu tarea es "
"adivinarlo en máximo %d intentos\n",
INFERIOR, SUPERIOR, INTENTOS_MAXIMOS);
// ciclo infinito que se rompe desde dentro
while (1) {
intentos++;
printf("Escribe el número que crees que elegí: ");
scanf("%d", &respuesta);
if (respuesta == secreto) {
printf("Correcto. El número que seleccioné fue %d y lo adivinaste en %d "
"intento(s)",
secreto, intentos);
break;
} else if (respuesta < secreto) {
printf(
"Error, pero te doy una pista: el número que elegí es mayor que %d\n",
respuesta);
} else {
// respuesta > secreto
printf(
"Error, pero te doy una pista: el número que elegí es menor que %d\n",
respuesta);
}
// Si no se rompió arriba porque ganó, y ya se superaron o igualaron los intentos,
// entonces se rompe y se indica que perdió
if (intentos >= INTENTOS_MAXIMOS) {
printf("Perdiste. El número que elegí fue %d", secreto);
break;
}
}
}
// Definir función cuyo prototipo está al inicio
// Devuelve un número aleatorio en un rango
int aleatorio_en_rango(int minimo, int maximo) {
return minimo + rand() / (RAND_MAX / (maximo - minimo + 1) + 1);
}
Con eso tenemos para jugar a adivinar el número con C. Puedes cambiar los límites y reducir los intentos máximos, aumentando así la complejidad del juego.
De igual manera, si lo modificas puedes imprimir el número secreto para depurar.
En la imagen de arriba se ve al juego en funcionamiento.
Eres libre de descargar el código para jugar a adivinar el número aleatorio. Guarda el código y compílalo, está escrito en ANSI C por lo que debería funcionar en todas las plataformas (lo he probado en Windows y Linux).
Mira este tutorial para instalar el compilador sobre Windows.
Mira más sobre C o videojuegos en mi blog.
Hoy te voy a presentar un creador de credenciales que acabo de programar y que…
Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…
En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…
En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…
Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…
En este artículo te voy a enseñar cómo usar un "top level await" esperando a…
Esta web usa cookies.