/*************************************************************************** * main.c * * Sat May 14 00:26:19 2005 * Copyright 2005 Vamps * vamps@ice-barrier.homelinux.org ****************************************************************************/ /* * 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 2 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 Library General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "include/init.h" #include "include/image.h" #include "include/menu.h" #include "include/main.h" #include "include/fx/fire.h" #include "include/time.h" #include "include/level.h" //#include "include/window.h" int new_game(void); int option(void); int quit(void); int menu(void); void *joueur(void * arg); void *ai(void * arg); void sig(int signal); struct level lvl; int main (int argc, char *argv[]) { if (init_sdl () == 1) { printf ("Fermeture du programme\n"); exit (1); } signal(SIGINT, sig); signal(SIGTERM, sig); menu(); return 0; } int menu(void) { struct menu menu_t; InitMenu("menu.bmp", &menu_t, 648, 525, 24); AddSectionMenu("ressources/pictures/nouvellepartie.bmp","nouvellepartie_active.bmp", &menu_t, 25, 335, &new_game); AddSectionMenu("ressources/pictures/options.bmp","options_active.bmp", &menu_t, 25, 385, &option); AddSectionMenu("ressources/pictures/quitter.bmp","quitter_active.bmp", &menu_t, 25, 425, &quit); AfficherMenu(&menu_t); while (SDL_WaitEvent (&menu_t.event_menu)) { switch (menu_t.event_menu.type) { case SDL_QUIT: FreeMenu(&menu_t); exit(0); break; case SDL_KEYDOWN: switch(menu_t.event_menu.key.keysym.sym) { case SDLK_UP : ActiverSectionPrecedente(&menu_t); break; case SDLK_DOWN : ActiverSectionSuivante(&menu_t); break; case SDLK_RETURN : menu_t.entry_[ReturnActiveSectionMenu(&menu_t)]->action(); FreeMenu(&menu_t); break; case SDLK_q : FreeMenu(&menu_t); exit(0); break; default: break; } } } return 0; } int new_game(void) { struct window window_t; //struct sprite sprite_t; struct sprite sprite_t2; //struct sprite sprite_t3; SDL_Rect level_rect; game_speed = 10; time_set_game_speed(game_speed); CreateWindow(&window_t, 800, 580, 24, "Moteur 2D Al !"); level_rect.x = 0; level_rect.y = 0; level_rect.w = 800; level_rect.h = 580; LoadLevel("ressources/lvl/test.xml", &lvl, window_t.screen, &level_rect); //CreateSprite("ressources/sprites/explosion-mega.bmp", &sprite_t, 24, 162, 131, NULL, window_t.screen); //ModifSprite(&sprite_t, 310, 350, 0); CreateSprite("ressources/sprites/joe.sprite", &sprite_t2, joueur, window_t.screen); //ModifSprite(&sprite_t2, 410, 300, 0); //CreateSprite("ressources/sprites/joe.bmp", &sprite_t3, 25, 45, 50, joueur, window_t.screen); //ModifSprite(&sprite_t3, 300, 300, 0); //AddSpriteDisplay(&sprite_t); AddSpriteDisplay(&sprite_t2); //AddSpriteDisplay(&sprite_t3); RunSpriteDisplay(&window_t, &lvl); /* Wait end of party */ WaitSpriteDisplay(); //DelSpriteDisplay(&sprite_t); //DestroySprite(&sprite_t); DelSpriteDisplay(&sprite_t2); DestroySprite(&sprite_t2); //DelSpriteDisplay(&sprite_t3); //DestroySprite(&sprite_t3); DestroyWindow(&window_t); exit(0); } void *joueur(void * arg) { struct sprite *sprite_t = arg; SDL_Event keyevent; int x; int y; int error = 0; int ret = 0; x = 1; y = 1; sprite_t->exe = 1; while(sprite_t->exe == 1) { while(error != 1) { SDL_Delay(2); SDL_PollEvent(&keyevent); switch(keyevent.type){ case SDL_KEYDOWN: switch(keyevent.key.keysym.sym){ case SDLK_LEFT: UpdateLevel(&lvl, &sprite_t->sprite_rect[sprite_t->anim_active]); x -= 1; ret = ModifSprite(sprite_t, x, y, -1); break; case SDLK_RIGHT: UpdateLevel(&lvl, &sprite_t->sprite_rect[sprite_t->anim_active]); x += 1; ret = ModifSprite(sprite_t, x, y, -1); break; case SDLK_UP: UpdateLevel(&lvl, &sprite_t->sprite_rect[sprite_t->anim_active]); y -= 1; ret = ModifSprite(sprite_t, x, y, -1); break; case SDLK_DOWN: UpdateLevel(&lvl, &sprite_t->sprite_rect[sprite_t->anim_active]); y += 1; ret = ModifSprite(sprite_t, x, y, -1); break; case SDLK_a: if(sprite_t->anim_active == 0) ChangeAnim(sprite_t, 1, 0); else ChangeAnim(sprite_t, 0, 0); break; case SDLK_r: AddSpriteDisplay(sprite_t); break; case SDLK_s: DelSpriteDisplay(sprite_t); break; case SDLK_p: sleep(2); CreateBullet(0, 200, 200, 95, 1, 30, 10, 20); break; case SDLK_KP_PLUS: game_speed += 1; time_set_game_speed(game_speed); break; case SDLK_KP_MINUS: game_speed -= 1; if(game_speed <= 0) game_speed = 1; time_set_game_speed(game_speed); break; case SDLK_ESCAPE: StopSpriteDisplay(); error = 1; break; default: break; } case SDL_KEYUP: switch(keyevent.key.keysym.sym){ case SDLK_LEFT: break; case SDLK_RIGHT: break; case SDLK_UP: break; case SDLK_DOWN: break; default: break; } if(ret == 1) { x = sprite_t->sprite_rect[sprite_t->anim_active].x; y = sprite_t->sprite_rect[sprite_t->anim_active].y; ret = 0; ModifLevel(&lvl, x, 0); ModifSprite(sprite_t, x, y, 0); } } } } printf("Thread termine !\n"); pthread_exit(0); } int option(void) { printf("Pas encore implementé !\n"); exit(0); } int quit(void) { printf("Quit !\n"); exit(0); } void sig(int signal) { printf("Signal %d\n", signal); } void *ai(void * arg) { int random; struct sprite *sprite_t = arg; srand(time(NULL)); //random = (rand()/(600)); while(1) { random = (600.0*rand()/(RAND_MAX+1.0)); ModifSprite(sprite_t, random, 100, 1); SDL_Delay(1000); } }