Adivinar número con ANSI C

Adivina el número en C – Programación de juego

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.

Adivinar número con ANSI C
Adivinar número con ANSI C

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.

Parte 1: números en un rango

Ya cité el post para obtener números aleatorios con rand. Pues vamos a usar esa función para “pensar” en un número.

Parte 2: el ciclo

Hacemos un ciclo while infinito que se va a romper en 2 casos:

  • Cuando se terminen los intentos
  • Cuando el usuario adivine

Dentro del ciclo hacemos lo siguiente, en orden:

  1. Incrementar el número de intentos
  2. Escanear la respuesta del usuario
  3. Comparar la respuesta
  4. Si la respuesta no es la correcta, entonces se le indica si es mayor o menor

Parte 3: poniendo todo junto

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.

Juego - Adivina el número con C
Juego – Adivina el número con C

En la imagen de arriba se ve al juego en funcionamiento.

Probar juego

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.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *