Proyecto Final Programación Básica
CodeBreaker: Desafío con Picas y Fijas
Programación Básica
Presentado por:
Juan Camilo Mendez Fernández - 20251020194
Samuel David Mayorga Guzmán – 20251020198
Docente:
Helio Henry Ramírez Arévalo
UNIVERSIDAD DISTRITAL FRANCISCO JOSÉ DE CALDAS
Facultad de Ingeniería
Bogotá D.C.
08 de julio de 2025
Descripción del Problema
Realizar un programa en C++ que permita jugar el juego de picas y fijas. El juego consiste
en que se deben establecer 2 números, entre 1 y 10 dígitos según desee el usuario.
Después, cada jugador debe adivinar el número que el otro jugador eligió. La cantidad de
intentos que tienen para adivinarlos está dada por un número mayor a 1 y menor que el
número de dígitos elegido por el usuario multiplicado por 5.
Además, el juego debe tener un sistema de puntajes calculado con la fórmula: (intentos -
intentosUsados) * 10 - (ayudasUsadas * 5) y un menú que permita al usuario elegir entre:
explicar el juego, jugar contra la máquina y jugar contra otro usuario.
Problemas Principales y Soluciones
1. Hacer un menú con el que el usuario pueda interactuar
Solución: Implementar un conjunto de estructuras condicionales (if-else) para definir
cuando el número esté entre las opciones del menú o si no está, que vuelva a preguntarle
que elija una opción válida.
2. Hacer un sistema de puntajes
Solución: Utilizar las variables que el usuario selecciona (cantidad de intentos, cantidad
de ayudas y cuántos usó). Entre menos intentos haya usado, mayor será la cantidad de
puntos, pero esta cantidad será reducida si se usaron ayudas. Cada ayuda equivaldrá a
menos 5 puntos.
3. Cómo hacer un sistema de entrenamiento
Solución: El sistema explicará las reglas del juego, seguido mostrará un ejemplo en el
cual se hará un juego donde un jugador tiene el número secreto 2631, y después el usuario
introduce el número 1234. En este caso se mostrarán cuántas picas y cuántas fijas tiene
del número, así el jugador podrá entender cómo va a ir el juego, seguido de una
explicación del por qué hay cierta cantidad de fijas y cierta cantidad de picas. Seguido de
esto se iniciará una partida con un número aleatorio de 4 dígitos el cual el jugador debe
adivinar con lo que ya sabe.
4. Sistema vs máquina
Solución: El sistema generará un número aleatorio con la cantidad de dígitos que indique
el usuario, y debe adivinar el número aleatorio generado, diciéndole el sistema cuántas
picas y cuántas fijas tiene, además de que debe seleccionar entre intentar adivinar el
número o pedir una pista.
5. Sistema de pistas
Solución: Dar 3 pistas al usuario las cuales serán:
• Pista 1: Suma de todos los dígitos del número secreto
• Pista 2: Revelar un dígito específico en una posición aleatoria
• Pista 3: Cantidad de dígitos pares e impares
Análisis del Código
Funciones Principales
• menu: Muestra las opciones principales del juego
• entrenamiento: Modo de práctica para entender el juego
• jugarContraMaquina: Modo jugador vs maquina
• jugarContraJugador: Modo jugador vs jugador
• configurarJuego: Personalizar las reglas del juego
Funciones de Lógica del Juego
• generarNumeroSecreto: Crea números aleatorios según las configuraciones
• calcularPicasYFijas: Implementa la lógica principal del juego
• validarNumero: Verifica que los números cumplan las reglas establecidas
• mostrarAyuda: Proporciona pistas al jugador
Orden en que se muestran opciones
1. Menú Principal
El programa muestra cuatro opciones principales:
1. Entrenamiento
2. Jugador vs Máquina
3. Jugador vs Jugador
4. Salir
2. Sistema de Configuración
El jugador personaliza la partida
• Cantidad de dígitos (1-10)
• Número de intentos (1 – cantidad de dígitos*5)
• Permitir o no dígitos repetidos
3. Modo Entrenamiento
• Explicación completa de las reglas
• Ejemplo práctico con el número 2631 vs 1234
• Sesión de práctica con número aleatorio de 4 dígitos
• 10 intentos para completar el entrenamiento
4. Sistema de Puntajes
Fórmula implementada: (intentos - intentosUsados) * 10 - (ayudasUsadas * 5)
• Mas puntos al usar menos intentos
• Menos puntos al usar ayudas
5. Sistema de Ayudas
Pistas:
• Ayuda 1: Suma total de los dígitos
• Ayuda 2: Revelación de un dígito específico
• Ayuda 3: Conteo de dígitos pares e impares
Funcionalidades Técnicas
Validación de Entrada
• Verifica que los números tengan la cantidad de dígitos que se pide
• Valida que solo contengan caracteres numéricos
• Respeta las reglas de repetición de dígitos
Algoritmo de Picas y Fijas
La función calcular picas y fijas:
1. Primero calcula las fijas (posiciónes correcta)
2. Luego calcula las picas (dígitos pero en posición incorrecta)
Generación de Entrenamiento
• Utiliza srand(time(0))
• Evita repeticiones cuando se pide
• Genera el numero con la longitud especificada
Explicación de los modos de Juego
1. Modo Jugador vs Máquina
• La máquina genera un número aleatorio
• El jugador tiene intentos limitados
• Sistema de ayudas
• Cálculo de puntuación
2. Modo Jugador vs Jugador
• Ambos jugadores establecen números secretos
• Turnos alternados para adivinar
• Sistema de empate implementado
• Revela cuales eran los números
Pruebas de escritorio del videojuego
Módulo / Función Caso de prueba Entrada Proceso resumido Salida u
observación
esperada
Genera 4 dígitos
distintos usando
digitos=4, rand()%10 y marca
Generación de número repetidos=false, cada dígito para evitar
secreto Sin dígitos repetidos semilla fija repeticiones. [3, 6, 7, 1]
Genera 4 dígitos con
digitos=4, rand()%10 sin
Generación de número repetidos=true, comprobar
secreto Con dígitos repetidos semilla fija repeticiones. [3, 3, 6, 7]
Resta '0' a cada
carácter para obtener
el valor numérico y lo
Conversión de cadena número = "5274", almacena en el
convertirStringAArreglo a arreglo digitos=4 arreglo. [5, 2, 7, 4]
Verifica que la
longitud sea 4 y que
cada carácter esté
validarNumero Número válido "4821", digitos=4 entre '0' y '9'. true
Detecta que la
longitud no coincide
con el parámetro
validarNumero Longitud incorrecta "123", digitos=4 digitos. false
Compara posición a
posición e incrementa
Dos dígitos en secreto [1,2,3,4], contador de fijas 2 fijas (posiciones 0
calcularFijas posición correcta intento [1,5,3,0] cuando coinciden. y 2)
Marca fijas (ninguna) y
busca cada dígito del
Cuatro dígitos intento en otras
correctos, distinta secreto [1,2,3,4], posiciones del
calcularPicas posición intento [4,3,2,1] secreto. 4 picas
Primero identifica 1
fija, luego detecta 2
Ejemplo modo secreto [2,6,3,1], picas en posiciones
calcularPicasYFijas entrenamiento intento [1,2,3,4] distintas. 2 picas, 1 fija
Muestra reglas,
genera número y
Acierto o ejecuta hasta 10 Mensaje 'Ha
agotamiento de Modo entrenamiento, iteraciones de intento adivinado' o 'El
Flujo Entrenamiento intentos 4 dígitos, 10 intentos y cálculo. número era: XXXX'
Configura
parámetros, permite
Configuración ayudas o intentos, Resultados por
Flujo Jugador vs Juego con opciones (digitos, intentos, valida, convierte y intento y
Máquina de ayuda repetidos) puntúa. puntuación
Configura, alterna Mensaje de ganador
Turnos alternos y turnos de adivinanza, o empate y
Flujo Jugador vs declaración de Dos números secretos valida, convierte y revelación de
Jugador ganador ingresados determina ganador. secretos