Razón Artificial

La ciencia y el arte de crear videojuegos

[Curso C++] – Primer Juego – Game Over!

Escrito por adrigm el 4 de enero de 2012 en Desarrollo Videojuegos, Programación | 2 Comentarios.

Bueno vamos con nuestro primer juego en C++. en mi caso utilizo el editor IDE Geany con un terminal empotrado sobre el Sistema Operativo Ubuntu que me viene de perlas para hacer pruebas sobre la marcha, dejo una captura (Click para ver en grande).

Nuestro primer juego

Nuestro primer juego es el típico programa que muestra por consola el mensaje “Hola Mundo” de todos los cursos de programación, pero como esto es un curso de programación de videojuegos vamos a cambiar el mensaje por “Game Over!”.

Pues venga, manos a la obra, abrimos nuestro editor y creamos un archivo llamado main.cpp en realidad puede llamarse como queramos pero es algo establecido que el archivo de entrada a todo programa escrito en C++ se llame main, el .cpp es la estención de los archivos de código de C++.

Dentro del archivo escribimos el siguiente código, es tan corto nuestro juego que lo vamos a copiar del tirón y luego lo explicamos.

#include <iostream>

/*
 * Esta es la función principal del programa.
 * Todo programa escrito en C++ debe de tener una función main.
 */

int main()
{
	// Muestra el mensaje "Game Over!" en la consola
	std::cout << "Game Over!" << std::endl;
	return 0;
}

Antes de explicarlo vamos a compilar y ejecutar. Para el que sea muy nuevo en esto decir que compilar es el proceso de coger un programa escrito en un lenguaje de programación y convertirlo en lenguaje máquina para acontinuación crear un ejecutable, si andas un poco perdido en todo esto te sugiero que busque por internet en cursos básicos, pues se sale del objetivo de este curso.

Como ya dije, yo explicaré como compilar y ejecutar en Linux, si estás en Windows o Mac (en mac es igual que en Linuz al ser un Unix) simplemente busca como se hace en tu Sistema Operativo en cualquier curso o en Google.

En Linux abrimos una consola (en mi caso ya habéis visto que la tengo empotrada en el editor y no necesito cambiar de ventana) y nos situamos en el directorio de nuestro juego que ya debe contener un archivo main.cpp que contiene nuestro código. A continuación pasamos a compilar con g++. Si nunca has compilado por consola no te preocupes, no tiene mucha ciencia y te explicaremos lo necesario.

$ g++ main.cpp -o GameOver

Como vemos simplemente es escribir el comando g++ seguido de los archivos .cpp que se quieren compilar, en este caso main.cpp, opcionalmente tenemos el argumento -o (es la vocal O en minúscula no un 0) mas un texto que será el nombre que tendrá el ejecutable, en este caso lo llamamos GameOver. Ahora simplemente hay que ejecutarlo:

$ ./GameOver
Game Over!

Perfecto, hace justo lo que esperabamos, imprimir por consola el mensaje “Game Over!” ahora vamos a explicar el código.

#include <iostream>

La primera línea utiliza la directiva de preprocesador #include, se que si eres nuevo esto te habrá sonado a chino. Una directiva de preprocesador son unos comandos que están el en código que comienzan por una almoadilla # y que sirven para que el compilador haga ciertas tareas antes de compilar el programa (pasarlo a lenguaje máquina) en este caso la directiva #include sirve para incluir otro archivo dentro del actual, en este caso el archivo iostream que es una bibliteca estándar de C++, La biblioteca estándar de C++ es una coleeción de archivos útiles que contiene código ya escrito de uso muy común como entrada y salida de texto, operaciones matemáticas complejas, etc. En este caso utilizamos la biblioteca iostream que contiene la salida y entrada estándar por consola que no son otras que el monitor y el teclado.

En este caso nosotros la usaremos para utilizar cout que es la salida estandar en C++ y poder imprimir nuestro mensaje de Game Over!.

La segunda linea y la séptima son simplemente líneas en blanco, solo sirven para separar el código estéticamente ya que el compilador pasa de ellas.

La línea 3 a la 6 es un comentario estilo C. Los comentarios estilo C se escriben entre /* y  */  todo lo que haya entre esos dos símbolos el compilador lo ignora. Los comentarios sirven para los humanos podamos entender que hace cierto código. Cuando digo comentarios estilo C es porque como sabréis C++ es un lenguaje evolucionado de C por tanto todo programa escrito en C se podría compilar en C++ y los comentarios de este estilo son los de este lenguaje, en C++ se han incorporado otro tipo que ahora veremos.

La linea 8 es la función main que todo programa en C++ debe tener, cuando el programa se crea esta es la primera linea que se va a ejecutar, podemodemos verla como la puerta de entrada a C++. Las funciones en C++ tienen este aspecto:

tipo nombre(tipo arg1, tipo arg2, ...)
{
    // Cuerpo de la función
    return tipo;
}

Una función es un trozo de código que hace una acción determinada y devuelve un resultado, muy parecido al concepto de función matemática, a las que tu les pasabas un valor y después de operar obetenias un resultado.

En C++ una función se escribe como arriba, primeri el tipo que se refiere al tipo de dato que devuelve, aún no hemos visto los que hay ya los veremos. A continuación el nombre de la función y entre paréntesis una lista de argumentos que ya veremos en mayor profundidad. Luego entre dos llaves va el cuerpo de la función y por último hay que devolver con la sentencia return el resultado que debe ser del tipo que especificamos arriba en la función, a menos que el tipo definido sea void, es decir, vacío que no habría que tener sentencia return.

Si os ha sonado todo esto un poco a chino no os preocupéis de momento, veremos las funciones más en detalle llegado el momento por ahora quedaos con que nos hace falta esas lineas para empezar un programa en C++.

// Muestra el mensaje "Game Over!" en la consola

Este es el otro tipo de comentarios que encontraréis en C++, comienzan con dos barras // todo lo que este a la derecha de esas dos barras es ignorado por el compilador hasta la siguiente línea. Pueden estar junto a una linea de código:

int x = 5; // Asignamos el valor 5 a la variable entera x

Vamos a la siguente línea de código.

std::cout << "Game Over!" << std::endl;

Aquí vemos muchas cosas, lo primero es el uso de cout que como ya dijimos no es una palabra clave de C++ sino que se encuentra dentro de la biblioteca estándar de C++ y se utiliza para sacar mensajes por con sola, el std:: que le precede antes es el espacio de nombre al que pertenece. En este caso el de la biblioteca estándar es std, ya hablaremos de los espacios de nombre más adelante.

Veréis por ahi mucho esa línea así:

cout << "Game Over!\n";

y esta línea añadida en la parte superior del código.

using namespace std;

Es otra forma de hacerlo, quiere decir que vamos a usar el espacio de nombre std y no hace falta estar invocando a sus funciones y/o clases por medio de std:: yo lo desaconsejo totalmente pues al principio puede parecer una manera mucho más fácil, pero cuando te veas trabajando con varios espacios de nombres de varias bibliotecas a la vez será un caos porque llegara un momento en el que no sepas a que espacio de nombre pertenece que y lo mas complicado, puede haber dos bibliotecas con dos clases que se llamen igual. Por ahora no os preocupéis y hacedme caso.

seguimos explicando la línea, la potencia del control de flujos de C++ es algo que se sale de este tutorial, pero explicaremos lo básico que vayamos necesitando. En C++ la salida y entrada de datos se le llama flujo, pues los datos fluyen hacia el programa o hacia fuera, en C++ se usa << para la salida de flujo y el >> para la entrada de flujo, en este caso cout quiere decir que fluya hacia la salida estándar lo que venga a continuación, es este caso es una cadena de carácteres: “Game Over!” las cadenas de caracteres, son eso, sucesiones de letras numero o símbolos puestos entre comillas.

hay una algunos caracteres especiales que se escriben con la barra invertida como son el salto de línea “\n” el tabulador “\t” o las mismas comillas “\”” ya que si quisieramos añadirlas a una cadena sin esta llamada “secuencia de escape” lo que haríamos sería terminar la cadena y daría error. Lo mismo para usar la barra invertida y que no se crea el compilador que es una secuencia de escape.

a continuación de la cadena, queremos añadir mas flujo por lo que volvemos a escribir << y añadimos el siguiente flujo std::endl esto no es mas que el carácter de salto de fin de línea, hace la misma función que el \n, pero es mejor ponerlo así, ya veremos más adelante porque.

return 0;

Por ultimo el return, como dijimos una función debe devolver un valor del tipo pasado, en esta ocasión escribimos int main() por lo que debe ser de tipo int el valor devuelto. Aún no hemos dado los tipos. El tipo int representa a un entero en C++ como puede ser el 1, 100, 4, -5, etc.. todos los números enteros. Por convención se suele hacer que un programa en C++ que termina correctamente debe devolver 0. Por eso hacemos que la función main devuelva 0.

Ya hemos termiando nuestro primer programa, se que muchas cosas se han quedado un poco en el límbo para los más novatos, pero poco a poco iréis comprendiendo mejor.

Ahora podemos coger nuestro juego y modificarlo para aprender a usar el cout y las secuencias de escape, haced algunas pruebas como las siguientes.

#include <iostream>

/*
 * Esta es la función principal del programa.
 * Todo programa escrito en C++ debe de tener una función main.
 */

int main()
{
	// Muestra el mensaje "Game Over!" en la consola
	std::cout << "Game\nOver!" << std::endl; // Con un salto de linea
	std::cout << "\tGame Over!" << std::endl; // Tabulado
	std::cout << "\t\tGame Over!" << std::endl; // Dos tabulaciones
	std::cout << "Game" << " " << "Over!" << std::endl; // Imprime la misma que el original
	std::cout << "\"Game Over!\"" << std::endl; // Entrecomillado
	std::cout << "\\Game Over!\\" << std::endl; // Entre barras invertidas
	std::cout << "Hola Mundooooo!!!" << std::endl; // Otro mensaje

	return 0;
}

Compilarlo, ejecutad y mirar el resultado. Haced todas las pruebas que queráis para aprender a usar el cout que es la salida estándar.

Una última cosa que no he mencionado es que todas las sentencias en C++ deben acabar en punto y como como os habréis fijado. En este caso solo hay dos sentencias que son el cout y el retuen ya que los comentarios y las directivas de preprocesador no cuentan como sentencias. Al igual que los bloques de código que tienen cuerpo (que tienen {}) esto no es del todo cierto pues las clases si que tienen, pero ya veremos las clases a su debido tiempo.

2 Comentarios en "[Curso C++] – Primer Juego – Game Over!"

  1. Jose dice:

    Muy básico, pero ideal para empezar a programar.

    Felicidades por el trabajo.

  2. Colosu dice:

    No esta mal el curso, bastante básico pero bien estructurado, si sigues así te saldrá un gran curso!!!

    Felicidades y estoy esperando la siguiente entrega.

Deja un comentario