Iniciando en C++: GameOver

Ha llegado el momento de iniciar a estudiar la sintaxis de C++, pero antes quiero recordarte que los ejercicios que utilizaremos están directamente adaptados del excelente libro Beginning C++ Through Game Programming, el cual recomiendo que adquieras si esta en tus posibilidades, este libro presenta todos los ejercicios en el contexto de programación de juegos, por lo que si bien estudiaremos todo el material requerido para conocer C++, los ejercicios son algo originales.

Así que sin mas preámbulos y como dirían los franceses: allons y!


Nuestro proyecto gira en torno de la frase mas odiada en el mundo de los juegos, si alguna vez has tenido afecto por los videojuegos seguramente hasta detestado verla y hoy estudiaremos cuales son los pasos necesarios para hacer a otros sentir de esa manera.

Me refiero al terrible mensaje “Game Over“.

Primero que nada crea un proyecto en Visual Studio, al mismo llamaremos “GameOver“, en el mismo incluyamos un archivo de código fuente al que llamaremos “Main.cpp“. Quiero que notes como a cada uno de los elementos que involucramos en el proyecto, le asignaremos un nombre descriptivo de su propósito.

La función main()

Ahora, hay algunas cosas que tenemos que tomar en cuenta al escribir un programa en C++.

  • C++ en su corazón es un lenguaje orientado a procedimientos, y exige que exista un procedimiento (o función) llamado main() en algún archivo para poder crear un ejecutable.
    • Es importante que en todo proyecto ejecutable exista un solo main() de lo contrario existirían conflictos en el proceso de vinculación.
  • C++ diferencia mayúsculas y minúsculas, así que aunque el archivo se llame “Main.cpp” es importante que el nombre del procedimiento sea “main“, no “Main” o “mAin” o “MAIN“.

Aclarado esto procedamos a crear este procedimiento:

void main()
{
}

No estuvo difícil, o si?

Te garantizo que así como esta, tu programa se compila y se ejecuta, aunque también te garantizo que no hace nada ya que no le hemos dado ninguna instrucción.

La estructura de todo procedimiento o función es la misma en lenguaje C++:

  • Primero el tipo de dato que debe devolver la función cuando es invocada. En el ejemplo usamos el tipo void.
  • Luego indicamos el nombre de la función.
  • Seguido la lista de parámetros de la función va entre paréntesis. En este caso hemos creado una función sin parámetros por lo que se coloca solo los paréntesis.
  • Las instrucciones de la función o el bloque de cuerpo se encierra entre los símbolos de llaves, “{” y “}“.
  • Todas las instrucciones que no sean bloques (estos los veremos mas adelante), deben terminarse con un punto y coma “;“.

El tipo de datos void es un tipo especial, que significa que “vació” es decir, esta función no retorna valor alguno; esta practica si bien es académica no es común en la practica; el estándar es decir que la función main responda con (el termino técnico es “retorne“) un valor numérico. Veamos como podemos modificar el código para esto.

int main()
{
return 0;
}

Como vemos, cambiamos void por el tipo int, este tipo representa números enteros, por lo que el programa ahora espera que la función le retorne un valor de este tipo. Igualmente, hemos agregado la clausula de retorno de valor return y hemos especificado que la función retorna el valor cero.

Pero esto solo es el principio, aun nos falta realizar la verdadera función de nuestro programa.

Mostrando un mensaje por pantalla

Si bien C++ nos permite crear nuestra propia función de bajo nivel que imprima información a la pantalla, dicha función ya existe en las librerías estándar de C++, es mas, existen varias funciones en el estándar que hacen esta tarea.

Para nuestro programa, utilizaremos una función que escriba directamente en el “flujo estándar de salida“.

NOTA: Existen diversos “flujos” hacia los que podemos enviar información, comúnmente el estándar envía su información a la consola o pantalla, mientras que el resto (como por ejemplo el flujo de errores) envía la información a archivos o registros para su almacenamiento.

Primero que nada vamos a incluirla librería que contiene la función que vamos a utilizar.

#include <iostream>
int main()
{
return 0;
}

El comando #include se utiliza para “incluir” la información de un archivo descriptor de funciones (o archivo de cabeceras) en otro, comúnmente una librería consta de uno o varios archivos de cabecera que permiten utilizar las funciones que ellas proveen. En este caso particular, estamos utilizando la librería estándar iostream y su nombre se identifica entre los simbolos “<” y “>“. Dentro de dicha librería, encontraremos una serie de funciones que nos permiten interactuar con los flujos de entrada y salida (su nombre en ingles es Input/Ouput Stream o Flujos de Entrada/Salida).

Veamos el código de la funcion tal como lo vamos a implementar.

#include <iostream>
int main()
{
std::cout << "Game Over";
return 0;
}

El espacio de nombres std

Veamos una vez mas lo que hemos agregado:

std::cout << "Game Over";

Vaya linea!

La gran mayoría de la gente empieza a aterrarse al ver cosas como esta.

Muchos dicen que la programación son solo símbolos raros, comas, puntos… QUE ENREDO! (mi esposa me lo dice a todo momento), pero tengo confianza en ti y se que este código, mas que dejarte en shock, te ha despertado la curiosidad.

La verdad es que si bien es cierto que en la programación (y particularmente en lenguajes como C++) vemos una gran cantidad de símbolos, al saber su significado podemos hacer una lectura bastante clara de lo que esta ocurriendo; al punto de que sin mucho esfuerzo podemos traducir esa linea a lenguaje humano:

  • Usar la función “cout” del espacio de nombres “std” para mostrar el mensaje “Game Over”.

Pero, qué es eso de “espacio de nombres” que acabo de mencionar?

Simple, un espacio  de nombres (o namespace) no es mas que la asociación de funciones u elementos de programación dentro de una librería, esto permite separarles según su propósito. En este caso usamos el espacio de nombre std o estándar.

Cuando queremos utilizar elementos que se encuentran dentro de un espacio de nombres, utilizamos los dobles dos puntos “::” de la siguiente manera “namespace::elemento“.

Una manera gráfica en la cual podremos ver como funciona la idea de los espacios de nombre es la siguiente.

Uso del namespace std

Uso del namespace std

Así como tenemos la función cout dentro de std, existen también otros elementos que podemos utilizar, pero estos los veremos mas adelante.

El operador “<<“

Regularmente cuando usamos funciones en C++, los valores que la misma utilizara se expresan en forma de parámetros, que se pasan entre los símbolos de paréntesis; un ejemplo de este tipo de funciones es printf, otra función de iostream que también muestra mensajes por pantalla y que es heredada de C.

Veamos como quedaría nuestro código si utilizáramos esta función.

#include <iostream>
int main()
{
printf("Game Over");
return 0;
}

Simple, cierto?

Si bien, printf es la función apropiada en algunas oportunidades, la convención moderna es utilizar cout al momento de enviar datos al flujo de pantalla; la diferencia radica en que printf imprime la información mientras que cout la “inyecta” al flujo (y esto es algo de muy bajo nivel). Es por esto que cuando usamos cout no pasamos el valor de lo que queremos en pantalla, sino que mas bien lo inyectamos o enviamos usando el operador “<<“.

A nivel practico, basta con que sepamos que esto nos permite enviar varios mensajes o elementos especiales al flujo de salida de manera mas sencilla que si utilizáramos printf.

El ejemplo básico es el salto de linea, que si bien en printf es posible ingresarlo, hay que usar un carácter especial (que no siempre se traduce correctamente entre diferentes plataformas), mientras que si empleamos cout podemos usar un elemento especial del namespace std para inyectar un salto de linea.

Veamos como seria nuestro código al implementar esta caracteristica:

#include <iostream>
int main()
{
std::cout << "Game Over" << std::endl;
return 0;
}

Y con esto obtendríamos nuestro resultado final

Game Over

Game Over

Excelente, no lo crees?


Con esto terminamos nuestra primera entrada directa a la sintaxis de C++, hemos visto el funcionamiento de una de las funciones primordiales del lenguaje así como la estructura de un programa y los elementos que lo componen; en la siguiente entrada estaremos hablando sobre las funciones aritméticas y el uso de tipos numéricos.

Espero este post haya sido de tu agrado.

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