/*
* main.c -- Rutina principal del programa.
* Copyright (C) 2018 Juan Marín Noguera
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
/**
* \mainpage Juego de plataformas
* En este juego controlas un personaje que va avanzando por un nivel con
* el objetivo de llegar hasta el final, mientras esquiva enemigos y golpea
* bloques para conseguir monedas u objetos.
* \file main.c Fichero principal del juego.
*/
#include
#include
#include "error.h"
#include "player.h"
#include "screen.h"
#include "world.h"
#define FRAME_MILLISECONDS 20
#define MSG_BG_R 0
#define MSG_BG_G 0
#define MSG_BG_B 0
#define MSG_BG_A 255
#define WIDTH 256
#define HEIGHT 240
#define MSG_MILLISECONDS 3000
WorldState play(Screen scr, World w)
{
WorldState ws;
while ((ws = world_play_frame(scr, w)) == WORLD_ST_KEEP_ON)
screen_wait(FRAME_MILLISECONDS);
return ws;
}
void show_msg(Screen scr, char *s)
{
screen_fill(scr, MSG_BG_R, MSG_BG_G, MSG_BG_B, MSG_BG_A);
screen_text_centered(scr, WIDTH / 2, HEIGHT / 2 - 4, s);
screen_update(scr);
screen_wait(MSG_MILLISECONDS);
}
void show_copyright()
{
printf(
"Copyright (C) 2018 Juan Marín Noguera\n"
"This is free software; see the source for copying "
"conditions. There is NO warranty; not even for "
"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
"\n"
"The graphics and designs are Copyright (C) 1985 "
"Nintendo, Inc.\n"
"All rights reserved.\n"
"\n");
}
void show_instructions(Screen scr)
{
SDL_Scancode sc;
int k;
do {
screen_text_print(scr, 8, 72, 30,
" Use las flechas IZQUIERDA y "
" "
" DERECHA para moverse "
" "
" "
" Salte pulsando la flecha "
" "
" ARRIBA "
" "
" "
" "
" Pulse ESPACIO para continuar ");
screen_update(scr);
k = screen_get_keyboard_event(&sc);
if (k == 0)
screen_wait(20);
} while (k != SCREEN_KEYDOWN || sc != SDL_SCANCODE_SPACE);
}
int main(int argc, char **argv)
{
Screen scr;
World w;
WorldState ws;
Player p = NULL;
FILE *f;
char c[13];
scr = screen_create("Super Mario Bros.", 255, 240);
show_copyright();
show_instructions(scr);
do {
f = fopen("1w", "r");
if (f == NULL)
error_libc_exit();
w = world_create(f);
fclose(f);
if (p != NULL)
world_substitute_player(w, p);
ws = play(scr, w);
p = world_player(w);
player_restart(p);
if (ws != WORLD_ST_DEAD || player_lives(p) <= 0)
break;
sprintf(c, "%i lives left", player_lives(p));
show_msg(scr, c);
} while (1);
switch (ws) {
case WORLD_ST_DEAD:
show_msg(scr, "GAME OVER");
break;
case WORLD_ST_WON:
show_msg(scr, "YOU WON");
break;
case WORLD_ST_MANY_COINS:
show_msg(scr, "YOU GOT TO THE MILLION COINS");
break;
case WORLD_ST_KEEP_ON:
show_msg(scr, "Sorry - something wrong happened");
}
world_free(w);
screen_free(scr);
world_end();
screen_end();
return 0;
}