Iniciando en C++: GameStats – Parte 1

En este ejercicio desarrollaremos un programa que muestre aspectos numéricos comúnmente relacionados con un juego.

Para esto dividiremos el ejercicio en dos partes, ambas relacionadas con el juego Call Of Duty: Advanced Warfare.

  • Primero veremos como mostrar los atributos de un arma llamada “RW1 – Guardian“.
  • Luego veremos como podemos mostrar los datos del perfil de un clan multijugador.

Esta información se mostrara por consola de forma sencilla.

Ya que tenemos delineado el ejercicio, allons y.

Preparación de Proyecto

Primero que nada crea un proyecto al que llamaras GameStats, dentro del mismo nuestro archivo principal lo llamaremos gamestats_main.cpp; si notas, hemos cambiado la nomenclatura (forma de llamar las cosas) que veníamos utilizando, esto es para identificar de mejor manera a que proyecto pertenece nuestro archivo “.cpp” e identificar que allí tenemos nuestra función main() de una forma un poco mas clara.

Dentro de este archivo prepararemos nuestra función principal utilizando el siguiente código
#include <iostream>
int main()
{
return 0;
}

La RW1 – Guardian

Veamos cuales son los atributos de esta arma

RW1 - Guardian

RW1 – Guardian

Descompongamos los datos de la misma

  • Nombre: RW1
  • Variante: Guardian
  • Clase: Profesional
  • Descripción: Arma de riel de mano, capaz de detener el combate. La mejor en su clase para causar daño
  • Atributos Numéricos: Todos los datos son números enteros, es decir, no manejan valores decimales.
    • Daño: 16
    • Precisión: 8 (podemos ver de que este valor es un variante por su coloración especial y porque al final de la linea se nota el simbolo de  “+1”)
    • Cadencia de Fuego: 2
    • Rango: 6
    • Manejo: 6 (otro valor variante, esta vez con el símbolo de “-1”)
    • Movilidad: 12

La idea es que toda esta información se despliegue  en pantalla, como crees que lograremos esto? Obviamente haremos uso de la función cout que hemos estudiado antes

Veamos como implementamos esto en código:
#include <iostream>
int main()
{
std::cout << "Nombre: RW1" << std::endl;
std::cout << "Variante : Guardian" << std::endl;
std::cout << "Clase : Profesional" << std::endl;
std::cout << "Descripción : Arma de riel de mano, capaz de detener el combate.La mejor en su clase para causar daño" << std::endl;
std::cout << "Daño : " << 16 << std::endl;
std::cout << "Precisión : " << 7 + 1 << std::endl;
std::cout << "Cadencia de Fuego : " << 2 << std::endl;
std::cout << "Rango : " << 6 << std::endl;
std::cout << "Manejo : " << 7 - 1 << std::endl;
std::cout << "Movilidad : " << 12 << std::endl;
return 0;
}

La ejecución de este programa nos arrojara el siguiente resultado

Atributos RW1

Atributos RW1

Obviemos lo inconforme que es el CMD de Windows con los caracteres especiales como la “ñ” y los acentos y concentrémonos en lo nuevo que vimos aquí.

Si precisas en toda la linea en la que hacemos uso de valores numéricos, separamos la inyección de los caracteres de la inyección de los números, como por ejemplo:
std::cout << "Daño : " << 16 << std::endl;

Esto nos muestra algo simple pero muy interesante, y eso es que cout acepta como parámetros valores numéricos sin necesidad de utilizar métodos de inserción especiales; veamos como seria la ejecución de esta misma linea utilizando printf y notemos la diferencia:
printf("Daño : %d \n",16);

Vemos que hay que utilizar el comodín %d el cual sera reemplazado por el valor numérico que colocamos luego del texto (el símbolo \n es el equivalente del std::endl), una vez mas tengo que recalcar que si bien printf es la opción adecuada en algunos casos y es bueno conocer su sintaxis, nosotros utilizaremos cout como función para enviar información a la pantalla.

También es interesante que estudiemos las siguientes lineas:
std::cout << "Precisión : " << 7 + 1 << std::endl;
std::cout << "Manejo : " << 7 - 1 << std::endl;

Si bien vemos podemos realizar operaciones aritméticas sobre los parámetros que estamos pasando al cout, en este caso particular las operaciones responden al análisis que hemos hecho de los valores que hemos visto en la pantalla de información.

Hablemos un poco mas sobre las operaciones aritméticas que podemos utilizar.

Aritmética en C++

En el lenguaje C++ disponemos de las cuatro operaciones aritméticas básicas (suma, resta, multiplicación y división) para trabajar con valores escalares (numéricos), adicionalmente contamos con una operación llamada modulo, la misma es un estándar en la programación aunque no esta definida en la matemática estándar como una operación independiente. Veamos como podemos utilizar estas operaciones:

  • Suma. Esta operación esta representada por el símbolo “+“; como ya hemos visto si uso puede ser algo tan simple como 7+1 cuyo resultado es 8.
  • Resta. Esta representada por el símbolo ““, ya hemos visto el ejemplo 7-1 que retorna 6.
  • Multiplicación. Se representa con el símbolo “*“, un ejemplo sencillo puede ser 2*2 que retorna 4.
  • División. Se representa con el símbolo “/“, un ejemplo sencillo es 10/5.
    • Como en las matemáticas comunes, debemos tener en consideración que la división entre 0 genera un error; de hecho, si tratamos de incluir una operación como 1/0, esto genera un error de compilación.
  • Modulo. Esta operación, representada por el simbolo “%“, nos retorna el residuo de una división, es decir el modulo de 3%2 es 1, 20%3 es 2, 103%13 es 12, etc.
    • El uso mas común de esta operación (pero no el único) es para determinar si un número es par, ya que por regla matemática si el modulo de cualquier numero entre 2 es igual a 0, ese número es par.

Orden de Operaciones

Cada operación aritmética forma parte de lo que se conoce como una expresión, es decir cada operación devuelve un valor especifico que luego puede utilizarse en otra expresión para mostrar un valor mas complejo.

Al igual que en el álgebra tradicional, las expresiones en C++ son evaluadas de izquierda a derecha, pero algunos valores tienen un orden de precedencia superior, es decir, algunas operaciones se ejecutan primero que otras, esto puede alterar el resultado que obtenemos al expresar una formula matemática en C++.

La precedencia de la multiplicación, la división y el modulo es mayor que la de la suma y la resta; de esta manera, la operación 7+3*5 es igual a decir 7+15 lo cual se resuelve en 22.

Si queremos alterar el orden de precedencia para darle prioridad a la suma, podemos utilizar el símbolo de paréntesis para  encerrar una expresión aritmética; por ejemplo, si evaluamos (7+3)*5 es igual a decir 10*5 lo cual se resuelve en 50.

Procedimiento mostrarAtributosArma()

Para cerrar esta primera parte del ejercicio, hagamos un cambio en como funciona nuestro programa.

Veamos el código:
#include <iostream>
void mostrarAtributosArma()
{
std::cout << "================== ATRIBUTOS DEL ARMA ==================" << std::endl;
std::cout << "Nombre: RW1" << std::endl;
std::cout << "Variante : Guardian" << std::endl;
std::cout << "Clase : Profesional" << std::endl;
std::cout << "Descripción : Arma de riel de mano, capaz de detener el combate.La mejor en su clase para causar daño" << std::endl;
std::cout << "Daño : " << 16 << std::endl;
std::cout << "Precisión : " << 7 + 1 << std::endl;
std::cout << "Cadencia de Fuego : " << 2 << std::endl;
std::cout << "Rango : " << 6 << std::endl;
std::cout << "Manejo : " << 7 - 1 << std::endl;
std::cout << "Movilidad : " << 12 << std::endl;
std::cout << "--------------------------------------------------------" << std::endl;
}
int main()
{
mostrarAtributosArma();
return 0;
}

Saquemos primero lo mas sencillo, hemos agregado dos cout puramente estéticos, uno para mostrar un encabezado con el titulo “ATRIBUTOS DEL ARMA” y un cierre con una serie de “” para dar la sensación de bloque de información.

Estos cambios no alteran para nada el funcionamiento de nuestro programa o la manera en la que se ejecuta; pero aparte de estos, hemos hecho un cambio significativo, puedes notar cual es?

Correctamente te debes haber dado cuenta que hemos creado una función sin retorno llamada mostrarAtributosArma(), y es en esta función donde realizamos el proceso de mostrar la información del RW1.

Comúnmente, en lenguajes como C++, cuando denotamos que una serie de acciones están relacionadas en su propósito (en este caso los cout con los atributos del arma), creamos una función que identifique el propósito general de la acción; a este proceso de programación se le conoce como Extracción de Función, o por lo menos ese es el termino técnico.

Un aspecto importante del proceso de extracción es determinar el tipo de valor a retornar, en nuestro caso no necesitamos especificar un retorno, ya que la actividad de mostrar los mensajes que estamos realizando con los cout, lleva la información hacia el flujo de salida estándar, no hacia el método main().

Otro aspecto interesante de tener un tipo de retorno vacío es que al momento de invocar la función solo tenemos que especificar su nombre y el listado de parámetros que requiere (que en este caso también es vacío).

Así como instintivamente sabemos que main() es la función principal del ejecutable, el truco para entender el propósito de una función es que el nombre que le asignemos este directamente relacionado a la acción que se ejecuta de forma general, por ejemplo: mostrarAtributosArma, leerArchivoConfiguracion, asignarPermisosUsuario.

C++ es uno de los lenguajes donde los programadores son mas propensos a obviar esta regla, no te permitas caer en esta trampa.

NOTA: el orden en el que las funciones se declaran y se invocan es importante, no podemos declarar primero main() y dentro de ella invocar a mostrarAtributosArma() ya que generaría un error de compilación (si no me crees puedes intentarlo, es un buen ejercicio). De todas maneras este punto lo elaboraremos a detalle mas adelante.

mostrarAtributosArma()

mostrarAtributosArma()


Con esto cerramos la primera parte de este ejercicio para que puedas evaluar lo que has aprendido e interiorizar lo que hemos visto hasta ahora.

Espero lo hayas disfrutado, en la segunda parte veremos como declarar nuestras variables, hablaremos sobre los tipos de datos fundamentales y crearemos una función que si retorna valores.

Hasta la próxima.

Anuncios
Esta entrada fue publicada en C++ y etiquetada , . Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s