/** * \fn int initialisionTerrain(Terrain** p_pMapTerrain, const char * nomImageFond, const char * nomImageMap) * \brief Initialise un terrain avec son image de fond et l'image de la map. * * \param[in] p_pMapTerrain, adresse du pointeur de structure Terrain a initialiser * \param[in] nomImageFond, nom du fichier de l'image de fond * \param[in] nomImageMap, nom du fichier de l'image de la map * \returns int, Indicateur de reussite de la fonction : 1 = succes, -1 = echec */ int initialisionTerrain(Terrain** p_pMapTerrain, const char * nomImageFond, const char * nomImageMap) { Terrain * pMapTerrainTemp = NULL; //Pointeur du Terrain temporaire fprintf(logFile, "initialisationTerrain : START :\n\n"); //Creation du pointeur de Terrain pMapTerrainTemp = (Terrain*)my_malloc(sizeof(Terrain)); //Allocation mémoire pour le pointeur de Terrain if (pMapTerrainTemp == NULL) //Si l'allocation s'est mal passee { fprintf(logFile, "initialisationTerrain : FAILURE, allocation memoire de pMapTerrainTemp.\n\n"); decreaseMalloc(); return -1; //Retour d'erreur } pMapTerrainTemp->imageBackground = NULL; //Initialisation à NULL du pointeur de la texture de l'image de fond pMapTerrainTemp->collisionMapSurface = NULL; //Initialisation à NULL du pointeur de la surface de l'image de la map //Creation de la texture de l'image de fond pMapTerrainTemp->imageBackground = loadTexture(nomImageFond); //Chargement de l'image de fond dans la texture if (pMapTerrainTemp->imageBackground == NULL) //Si le chargement a échoué { fprintf(logFile, "initialisationTerrain : FAILURE, loadTexture : imageBackground.\n\n"); destroyMap(&pMapTerrainTemp); //Destruction du Terrain return -1; //Retour d'erreur } //Creation de la surface de la map qui servira pour la collision pMapTerrainTemp->collisionMapSurface = loadImage(nomImageMap); //Chargement de l'image de la map dans la surface if (pMapTerrainTemp->collisionMapSurface == NULL) //Verification qu'il n'y a pas eu d'erreur lors de l'allocation en mémoire { fprintf(logFile, "initialisationTerrain : FAILURE, loadImage : collisionMapSurface.\n\n"); destroyMap(&pMapTerrainTemp); //Destruction du Terrain return -1; //Retour d'erreur } pMapTerrainTemp->globalMapSurface = my_CreateRGBSurface(pMapTerrainTemp->collisionMapSurface->flags, pMapTerrainTemp->collisionMapSurface->w, pMapTerrainTemp->collisionMapSurface->h, 32, RMASK, GMASK, BMASK, AMASK); if (pMapTerrainTemp->globalMapSurface == NULL) //Verification qu'il n'y a pas eu d'erreur lors de l'allocation en mémoire { fprintf(logFile, "initialisationTerrain : FAILURE, createRGBsurface : %s.\n\n", SDL_GetError()); destroyMap(&pMapTerrainTemp); //Destruction du Terrain return -1; //Retour d'erreur } memcpy(pMapTerrainTemp->globalMapSurface->pixels, pMapTerrainTemp->collisionMapSurface->pixels, pMapTerrainTemp->collisionMapSurface->h*pMapTerrainTemp->collisionMapSurface->w*sizeof(Uint32)); (*p_pMapTerrain) = pMapTerrainTemp; //Récupération du pointeur du Terrain pMapTerrainTemp = NULL; //Remise à NULL du pointeur temporaire fprintf(logFile, "\ninitialisationTerrain : SUCCESS.\n\n"); return 1; //Retour sans erreur }
// What are the specified player's next possible moves LocationID *whereCanTheyGo(DracView currentView, int *numLocations, PlayerID player, int road, int rail, int sea) { assert(currentView != NULL); assert(player >= PLAYER_LORD_GODALMING && player <= PLAYER_DRACULA); assert(numLocations != NULL); LocationID from = currentView->playerstate[player]->current; assert(from >= ALICANTE && from < NUM_MAP_LOCATIONS); Round round = currentView->gameturn; assert(round >= 0 && round <= 366); Map europe = newMap(); LocationID locations[NUM_MAP_LOCATIONS]; int i,j=0; //USE AN ARRAY TO INDICATE PATHING TO EVERY DESTINATION //0 -> cannot reach, 1 -> reachable for ( i=0; i<NUM_MAP_LOCATIONS; i++ ) { locations[i] = 0; } //The reachability will mark on the array if ( road ) { reachability(europe, from, ROAD, ONEPATH, locations); } if ( rail && player != PLAYER_DRACULA) { //Dracula can't travel by rail int roundmod = (round+player) % 4; reachability(europe, from, RAIL, roundmod, locations); } if (sea) { reachability(europe, from, BOAT, ONEPATH, locations); } //PATH FIXING FOR DRACULA if ( player == PLAYER_DRACULA ) { //Dracula can't move to hospital, this is a incorrect path. locations[ST_JOSEPH_AND_ST_MARYS] = 0; //checks if Dracula is allowed to hide //check for hide in trail while( i<TRAIL_SIZE ){ if( currentView->playerstate[PLAYER_DRACULA]->trail[i] == HIDE ){ locations[from] = 0; } } //check if at sea if( idToType(from) == SEA ); locations[from] = 0; } //place reachable locations into our return array j = 0; LocationID *reachable = malloc(sizeof (int)*NUM_MAP_LOCATIONS); //place corresponding cities (e.g. ALICANTE, ROME, MARSEILLES) into 'result' for (i=0; i<NUM_MAP_LOCATIONS; i++) { if ( locations[i] ) { reachable[j] = i; j++; } } *numLocations = j; destroyMap(europe); return reachable; }
void tearDown(){ destroyMap(map); destroyMap(map2); }
int mainFenetre() { unsigned int frame_max = SDL_GetTicks() + FRAME_RATE, temps = 0; Input * pInput = NULL; //structure contenant les informations relatives aux inputs clavier SDL_Texture * pTextureDisplay = NULL; //Texture globale SDL_Rect camera = initRect(0, 0, 0, 0); // rect(x,y,w,h) Worms** wormsTab = NULL; char mapName[100]; Jeu* jeu = NULL; //init SDL + fenetre + renderer if (initSWR()) { //Initialisation des inputs pInput = initInput(); if (pInput == NULL) { fprintf(logFile, "mainFenetre : FAILURE, initInput.\n"); cleanUp(&pInput, &pTextureDisplay); return -1; } //InitSounds if (!initSDLMixer()){ fprintf(logFile, "initSDLMixer : FAILURE, init.\n"); cleanUp(&pInput, &pTextureDisplay); return -1; } strcpy(mapName, cMAP); /*Initialisation SDL_TTF*/ if (TTF_Init() == -1) { fprintf(logFile, "mainFenetre : FAILURE, initialisation de TTF_Init : %s.\n\n", TTF_GetError()); cleanUp(&pInput, &pTextureDisplay); return -1; } if (mainMenu(pInput, mapName) < 0) { fprintf(logFile, "mainFenetre : FAILURE, mainMenu .\n\n"); cleanUp(&pInput, &pTextureDisplay); return -1; } if (!pInput->quit) { if (mainInit() < 0) //set le nombre d'équipe et le nombre de worms par équipe { fprintf(logFile, "mainInit : FAILURE.\n"); cleanUp(&pInput, &pTextureDisplay); return -1; } /*Init game*/ jeu = nouveauJeu(mapName); if (jeu == NULL) { fprintf(logFile, "nouveauJeu : FAILURE.\n"); cleanUp(&pInput, &pTextureDisplay); return -1; } /*Init map*/ if (initialisionTerrain(&jeu->pMapTerrain, "../assets/pictures/FondMap1.png", jeu->nomMap) < 0) { fprintf(logFile, "mainFenetre : FAILURE, initialisationTerrain.\n"); cleanUp(&pInput, &pTextureDisplay); return -1; } /*Init global texture*/ pTextureDisplay = my_createTextureFromSurface(jeu->pMapTerrain->globalMapSurface); if (pTextureDisplay == NULL) { fprintf(logFile, "mainFenetre : FAILURE, createGlobalTexture.\n"); destroyMap(&jeu->pMapTerrain); cleanUp(&pInput, &pTextureDisplay); return -1; } /*Init sounds*/ if (loadSounds(BipExplo, 0) < 0) { fprintf(logFile, "mainFenetre : FAILURE, loadSounds.\n"); cleanUp(&pInput, &pTextureDisplay); return -1; } /*Init camera*/ initCameras(jeu->pMapTerrain, &camera, NULL); /*Initialisation du tableau global de worms*/ wormsTab = initWormsTab(jeu->equipes); if (wormsTab == NULL) { destroyMap(&jeu->pMapTerrain); cleanUp(&pInput, &pTextureDisplay); fprintf(logFile, "mainFenetre : FAILURE, allocating memory to the global array of worms pointer.\n\n"); return -1; } /*Init Display*/ initDisplay(jeu->pMapTerrain, pTextureDisplay); /*Initialisation des worms*/ while (!KaamInitGame(wormsTab, jeu->pMapTerrain->collisionMapSurface)) renderScreen(2, 0, jeu->pMapTerrain, 1, pTextureDisplay, &camera, NULL); } while (!(pInput->quit)) { //Récupération des inputs getInput(pInput); //Gestion des inputs if (!gestInput(pInput, jeu->pMapTerrain, pTextureDisplay, &camera, wormsTab)) { fprintf(logFile, "mainFenetre : FAILURE, gestInput.\n"); } //Update de l'écran if (pInput->raffraichissement) { renderScreen(2, 0, jeu->pMapTerrain, 1, pTextureDisplay, &camera, NULL); pInput->raffraichissement = 0; } updateTeamLife(jeu->equipes); isGameEnd(jeu->equipes); //Gestion du frame Rate frameRate(frame_max); frame_max = SDL_GetTicks() + FRAME_RATE; if ((SDL_GetTicks() - temps) >= 1000) { temps = SDL_GetTicks(); jeu->temps -= 1; } } endDisplay(); cleanSounds(); Mix_CloseAudio(); fprintf(logFile, "||| END OF THE GAME |||\n"); if (jeu != NULL) destroyMap(&jeu->pMapTerrain); destroyPolice(); if (wormsTab != NULL) free(wormsTab); wormsTab = NULL; } cleanUp(&pInput, &pTextureDisplay); fprintf(logFile, "mainFenetre : SUCCESS.\n"); if (jeu != NULL) { saveGame(jeu); destroyJeu(&jeu); } { time_t t1 = time(NULL); fprintf(logFile, "\n\nEnd of Session : %s", ctime(&t1)); fclose(logFile); }; return 0; }