Proyecto: juego de euclides
Alberto WilliamsPráctica o problema13 de Noviembre de 2023
3.341 Palabras (14 Páginas)56 Visitas
República Bolivariana de Venezuela
Ministerio del Poder Popular para la Educación
Universidad Nacional Experimental de Guayana
Vicerrectorado Académico
Proyecto de Carrera: Ingeniería Informática
Cátedra: Técnicas de Programación II
Sección: 01
PROYECTO: JUEGO DE EUCLIDES
Docente: Alumnos:
José Luis Salazar Cárdenas, Marco (C.I: 28.475.500)
Williams, Alberto (C.I: 28.611.716)
Puerto Ordaz, 23 de septiembre de 2022
MANUAL DEL PROGRAMADOR
- Requerimientos Técnicos:
- Versión del Dev-C++ 6.3 o superior ya instalada.
- Versión del C++ 201402 o superior ya instalada.
- Laptop, PC o teléfono móvil con al menos 13kb de almacenamiento disponible.
- Diagrama de Flujo General:
- Definición y descripción de principales variables y estructuras de datos usadas en el programa (Diccionario de Datos)
#include <iostream> == Librería estándar
#include <cstdlib> == Librería que habilitar los system “pauses” y “cls”.
#include <random> == Para habilitar los set_sequence, la distribución de enteros uniforme y el random device.
#include <utility> == Habilita la función std::swap para el cambio de nombres dentro del juego.
#include <limits> == Mantener los límites max y min para los estándares definidos de la tabla.
#include <string> == Librería para mejorar el manejo de cadenas en el programa.
std::seed_seq ss { rd(), rd(), rd(), rd(), rd(), rd(), rd(), rd() }; == Dadas 8 semillas o una setsequence de 8 bytes, para tener una randomización más alta, que se pasa al std::mt19937
std::uniform_int_distribution<> RandomN_IO { __$min$, __$max$ }; == Muestra los máximos y mínimos de la función random
const int sizeTabla{8}; Mantiene el valor estático de la tabla utilizada para la generación de tablas.
const int matrizSize{ sizeTabla * 4 }; Mismo funcionamiento que la función previa.
int itA{1}, itB{1}; == Iteradores que iteran dentro de los índices de las matrices A y B para guardar los valores tanto de las casillas blancas como de las azules.
static bool cargarJuego{ false } == Hace que el juego aún no se cargue.
ReinicioInput{ false }; == Permite saber cuándo terminó el juego sin cerrar el programa.
std::string Jugador1{}, Jugador2{}; == Nombres de los jugadores, como variable global.
const int longitudNombres{15} == Mantiene el tamaño ideal de la longitud de los nombres.
int Temporal[matrizSize * 2]{}, iTemp {1}; == Nos permite guardar en una función todos los valores mayores que 0 y menores que 100, para validar los valores de las restas de cualquier número del juego.
A[timeA] y B[timeB] == Iteradores de las matrices A y B para las casillas blancas y azules. Una vez agarradas las azules se agarran las blancas. Si tiene el valor -1234 genera la X como un error de número en la casilla.
A[i] = 0; B[i] = 0; == Reinicio de las variables al momento de cargar el juego.
Temporal[0] = A[0];
Temporal[1] = B[0]; == Principales valores randomizados de la función mostradas en el tablero.
counter{0}; == Se va contando con los valores corregidos, y es una variable temporal de control para verificar si cada número ingresado es positivo y único dentro de la tabla, y escalar a otro espacio.
std::getline(cin >> std::ws, Jugador1); == Funcion utilizada para no sobrecargar el buffer de la función, para todo tipo de variable.
int point1{matrizSize}, point2{matrizSize}; == Contador de puntaje de cada matriz, para luego compararlos al final del código y determinar un ganador o un empate, quitando “un corazón” a cada jugador de vida.
- Definición y Descripción de principales funciones del programa (Diccionario de Funciones)
- Función ErrorHandling:
void Error_Handling()
{
if(std::cin.fail())
{
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), ‘\n’);
}
}
Función cuya finalidad radica en que si el usuario al ingresar la entrada en el Juego de Euclides, si escribe un dato de tipo no numérico o realiza un salto de línea, evita que el juego se reviente o se crashee y permita la entrada de un tipo numérico.
- Función RandomN:
int RandomN(int __$min$, int __$max$) {
std::random_device rd;
std::seed_seq ss { rd(), rd(), rd(), rd(), rd(), rd(), rd(), rd() };
std::mt19937 mt { ss };
std::uniform_int_distribution<> RandomN_IO { __$min$, __$max$ };
return RandomN_IO(mt);
}
Como su nombre lo indica, es una función para seleccionar de forma aleatoria los primeros 2 números enteros positivos que aparecerán en el tablero del juego al principio del mismo.
- Función MostrarNombres:
void MostrarNombres()
{
if((RandomN(1, 9) % 3 == 0) && nombresCambio)
{
std::swap(Jugador1, Jugador2);
nombresCambio = false;
}
cout << “Jugador “;
cout << “\033[30m”; cout << “\033[107m”;
cout << “B”;
cout << “\033[0m”;
cout << “: “ << Jugador1;
for(int i{static_cast<int>(Jugador1.length())}; i < longitudNombres; ++i)
{
cout << “ “;
}
cout << “\033[0m”;
cout << “\t”;
cout << “Jugador “;
cout << “\033[97m”; cout << “\033[44m”;
cout << “A”;
cout << “\033[0m”;
cout << “: “ << Jugador2;
for(int i{static_cast<int>(Jugador2.length())}; i < longitudNombres; ++i)
{
cout << “ “;
}
nombresCambio = false;
cout << ‘\n’;
}
Con esta función se asegura que sean mostrados a la hora de estar inmersos en el juego, utilizando funciones booleanas para los cambios de nombres y no depender de una cadena de caracteres que puede tener una longitud considerable a la hora de mostrarlos, lo cual representaría un problema al imprimirlo por pantalla.
- Función Tabla:
void Tabla(const int A[], const int B[])
{
int timeA{0}, timeB{0};
for(int i{0}; i < sizeTabla; ++i)
{
for(int j{0}; j < sizeTabla; ++j)
{
if((i % 2 == 0) && (j % 2 == 0))
{
cout << “\033[30m”;
cout << “\033[107m”;
if(A[timeA] == -1234)
{
cout << “ X “;
timeA++;
}
else if(A[timeA] != 0)
{
cout << “ “ << A[timeA];
if(A[timeA] > 9){ cout << “ “; }
else { cout << “ “; }
timeA++;
}
else
{
cout << “ B “; timeA++;
}
}
else if((i % 2 != 0) && (j % 2 != 0))
{
cout << “\033[30m”;
cout << “\033[107m”;
if(A[timeA] == -1234)
{
cout << “ X “;
timeA++;
}
...