int initializeGame(tGame * game) { int error = 0; /* Inicializar Ai */ game->ai.lockWay = FALSE; game->ai.lockTarget = FALSE; game->ai.minAlive = 1; game->undos = 0; if ((error = initializePlayer(&(game->user), &(game->theme)))!=0) { if (error) { switch(error) { case STATUS_ARMY: freeField((game->user.enemyField), game->theme.rows); freeField((game->user.defenseField), game->theme.rows); break; case DEFENSE_FIELD: freeField((game->user.enemyField), game->theme.rows); break; case ENEMY_FIELD: break; } return NO_MEMORY; } } if ((error = initializePlayer(&(game->machine), &(game->theme)))!=0) { if (error) { switch(error) { case STATUS_ARMY: freeField((game->machine.enemyField), game->theme.rows); freeField((game->machine.defenseField), game->theme.rows); break; case DEFENSE_FIELD: freeField((game->machine.enemyField), game->theme.rows); break; case ENEMY_FIELD: break; } freeField((game->user.enemyField), game->theme.rows); freeField((game->user.defenseField), game->theme.rows); freeStatusArmy(&(game->user.statusArmy), &(game->theme)); return NO_MEMORY; } } return error; }
void playerGameover(Game* game) { if(game->doGameover == 1){ int i; char text[200]; sprintf(text, "Press ENTER"); loadSong(1,"data/sounds/gameover.mp3",game); while(game->input->enter == 0) { i = SDL_GetTicks(); drawImage(game->gameover,0,0, game); drawString(text, 350, 400, 150, 150, 150, game->fontGameover,game); SDL_Flip(game->screen); while(SDL_GetTicks()-i != 500 && game->input->enter == 0) getInput(game->input,game); drawImage(game->gameover,0,0, game); SDL_Flip(game->screen); while(SDL_GetTicks()-i != 1000 && game->input->enter == 0) getInput(game->input,game); } game->input->enter = 0; loadGame(game); initializePlayer(game->player); } }
/** * \fn int main(int argc, char* argv[]) * \brief Main function. * \param[in] argc Number of argument passed to the program. * \param[in] argv Arguments passed to the program. */ int main(int argc, char* argv[]) { unsigned int frameLimit; /*Create the Game structure*/ Game* game = createGame(); frameLimit = SDL_GetTicks()+16; /* initializes SDL */ initGame("MyLittleProject",game); /* initializes player */ initializePlayer(game->player); /* loads resources */ loadGame(game); /* Main loop */ while(game->go == 1) { /* reads input from keyboard */ getInput(game->input, game); /* checks if menu is used */ if(game->onMenu == 0) { /* updates game */ updatePlayer(game->player,game); updateObject(game); /* displays everything */ draw(game); } else { switch(game->menuType) { case START : updateStartMenu(game->input,game); drawStartMenu(game); // ya un bug ici ! break; case SELECT_LEVEL : updateSelectLevelMenu(game->input,game); drawSelectLevelMenu(game); } } /*set the framerate at 60 FPS*/ delay(frameLimit); frameLimit = SDL_GetTicks()+16; } /*free everything*/ destroyGame(game); return EXIT_SUCCESS; }
void updatePlayer(Input *input) { /* On rajoute un timer au cas où notre héros mourrait Si le timer vaut 0, c'est que tout va bien, sinon, on le décrémente jusqu'à 0, et là, on réinitialise. C'est pour ça qu'on ne gère le joueur que si ce timer vaut 0. */ if(player.timerMort == 0) { if(!player.touch) // S'il n'est pas touché { /* On gère le timer de l'invincibilité */ if(player.invincibleTimer > 0) player.invincibleTimer--; /* On réinitialise notre vecteur de déplacement latéral (X), pour éviter que le perso ne fonce de plus en plus */ player.dirX = player.dirY = player.isAttacking = 0; attackManagement(input, &player); if(player.state < ATTACK_HORIZONTAL && input->puched < 3) playerDir(input, &player); /* Si on n'appuie sur rien, on charge l'animation marquant l'inactivité (Idle), je n'ai pas regarder encore si je pouvais l'optimiser */ playerIdle(input, &player); resetInput(input); } /* Sinon si il est touché */ else if(player.touch) entityTouch(); /* On rajoute notre fonction de détection des collisions qui va mettre à jour les coordonnées de notre héros. */ mapCollision(&player); /* On gère le scrolling */ centerScrollingOnPlayer(); } /*Gestion de la mort. Si timerMort est différent de 0, c'est qu'il faut réinitialiser le joueur. On ignore alors ce qui précède et on joue cette boucle (un wait en fait) jusqu'à ce que timerMort == 1. A ce moment-là, on le décrémente encore -> il vaut 0 et on réinitialise le jeu avec notre bonne vieille fonction d'initialisation */ if(player.timerMort > 0) { player.timerMort--; if(player.timerMort == 0) { changeLevel(); initializePlayer(0); } } }
int main(int argc, char *argv[]) { unsigned int frameLimit = SDL_GetTicks() + 16; int go; /* Initialisation de la SDL */ init("RageGame"); /* On initialise le joueur */ initializePlayer(); /* Chargement des ressources (graphismes, sons) */ loadGame(); /* Appelle la fonction cleanup à la fin du programme */ atexit(cleanup); go = 1; /* Boucle infinie, principale, du jeu */ while (go == 1) { /* On prend on compte les input (clavier, joystick... */ getInput(); /* On met à jour le jeu */ updatePlayer(); /* On affiche tout */ draw(); /* Gestion des 60 fps (1000ms/60 = 16.6 -> 16 */ delay(frameLimit); frameLimit = SDL_GetTicks() + 16; } /* Exit */ exit(0); }
void endLevel(Game* game) { int i; char text[200]; sprintf(text, "Press ENTER to CONTINUE"); loadSong(1,"data/music/Victory Theme (Faded).mp3",game); while(game->input->enter == 0) { i = SDL_GetTicks(); drawImage(game->endLevel,0,0, game); drawString(text, 160, 560, 250, 250, 250, game->fontGameover,game); SDL_Flip(game->screen); while(SDL_GetTicks()-i != 500 && game->input->enter == 0) getInput(game->input, game); drawImage(game->endLevel,0,0, game); SDL_Flip(game->screen); while(SDL_GetTicks()-i != 1000 && game->input->enter == 0) getInput(game->input,game); } game->input->enter = 0; if(game->level <= LEVEL_MAX){ initializePlayer(game->player); loadGame(game); } else{ game->level = 1; loadGame(game); game->onMenu = 1; game->menuType = START; } }
// WinMain関数 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { ChangeWindowMode(TRUE); // DXライブラリの初期化 if (DxLib_Init() == -1) return -1; //マップ初期化 initializeMap(); //画像読み込み initializePlayer(); // アクションゲームのメイン関数を呼ぶ ActMain(); // DXライブラリの後始末 DxLib_End(); // 終了 return 0; }