sábado, 10 de octubre de 2015

Programemos un juego en C (III)




Como casi siempre, voy a rachas y ahora toca volver a la programación, que empecé y se quedó muerta.

Cambio un poco, ya no es lo mismo usar mi viejo y muy querido Turbo C que algo mas moderno y mucho mas cómodo (la edad me lleva a la comodidad). Al final usare el entorno de Visual Studio que es un muy buen IDE, pero con el lenguaje Visual C++ en lugar de mi querido Visual Basic o el C#, ya que así puedo migrar el programa a otro entorno mas fácilmente.

A pesar de la mala fama que tiene, Microsoft hace tiempo que lanza herramientas gratuitas de programación, hasta ahora en uno solo de los lenguajes del entorno, pero para Visual Studio 2015 ha sacado una versión gratuita del entorno completo llamada Community. Permite hacer casi todo lo que haces con la de pago, pero es para uso personal, no hay control de código fuente ni posibilidad de programación en equipo (es bonito ver como otro cambia una línea en tu programa y te aparece a ti en tu fuente, sin interferencias ni errores).

Volvamos a lo que ya estaba escrito, aunque use el Visual C++ el programa estará escrito en C estándar, y como el C++ es un superconjunto del C, poco hay que cambiar, detalles por comodidad como los comentarios con doble barra, o cambios necesarios como que definimos main como entera y cambiamos exit por return. Con esto podemos seguir adelante con el tema, ampliando los puntos en que pone el comentario // ++ que indica precisamente acciones a realizar. Conforme avanzamos ampliaremos las variables que necesitamos. Veamos la programación descendente, planteamos funciones para las cosas, aunque de momento no hagan nada, pero ya las vamos a ir completando. En este punto lo dejaremos así, mi intención es que presente una pantalla, y ya iremos ampliando:



// *******************************************************************
//    INFERNO, un sokoban en C usando Visual Studio y Visual C++
//    Jose Antonio Vaqué, octubre 2015
// *******************************************************************

#include <stdio.h>

// Constantes que usaremos
#define MAX_NIVELES 50

typedef enum { FALSE, TRUE } boolean;
typedef enum { N, S, E, O, F } Tecla;

// Estructura para un nivel del juego
typedef struct nivel {
    int nro;
}NIVEL;

NIVEL niveles[MAX_NIVELES];

// Variables globales
int nivelactual;
Tecla tecla;

// Prototipos de funciones
void PrepararGlobales();
void PrepararNiveles();
void MontarNivel(int nro);
void PresentarNivel(int nro);
void LeerTeclado(Tecla *teclaleida);

int main() {
    printf("Inferno");

    PrepararNiveles;
    PrepararGlobales;

    boolean fin_juego = FALSE;
    do {
        MontarNivel(nivelactual);
        boolean fin_nivel = FALSE;
        do {
            PresentarNivel(nivelactual);
            LeerTeclado(&tecla);
            // ++ Acción según tecla pulsada
            // ++ Verificar si se ha completado el nivel
        } while (!fin_nivel | !fin_juego);

        if (!fin_juego) {
            // ++ Mensaje de fin del nivel
            // ++ Aumentar nivel
        }
        else {
            // ++ Mensaje fin del juego
        }

    } while (!fin_juego);
    return 0;
}

void PrepararGlobales() {
    nivelactual = 0;
}

void PrepararNiveles() {

}

void MontarNivel(int nro) {

}

void PresentarNivel(int nro) {

}

void LeerTeclado(Tecla *teclaleida) {

}

Ahora ya tenemos la base, iré ampliando las funciones que he dejado solo definidas, y el programa irá creciendo. Cuando funcione en Windows, lo pasaremos a otras máquinas usando compiladores cruzados para el Z80, y veremos que lo que cambia de una máquina a otra es, principalmente, las rutinas gráficas, que como pienso dejar muy definidas en funciones aparte, es mas sencillo su cambio.

2 comentarios:

  1. Muy interesante esta iniciativa, sobre todo esta parte que comentas de "reutilizar" el código para procesador Z80. Estoy ansioso de ver esa parte. ¿que motor gráfico tienes pensado usar? Yo actualmente estoy escribiendo / aprendiendo C++ con SDL... con mingw... para Z80 tengo pensado usar Z88DK... ;-)

    Esperando tu siguiente entrega, saludos, Jordi.
    ;-)

    ResponderEliminar
    Respuestas
    1. No quiero usar ningún motor gráfico, para evitar que al pasar a los ordenadores de 8 bits con memoria y recursos muy limitados no disponga del mismo motor, y sobre todo que un programa sencillo no ocupe mucho. No voy a hacer un juegazo en 3D tampoco, es algo mas sencillo, pretendo que sea mas bien instructivo que otra cosa.

      Eliminar