int map (struct DIVERSsysteme *systeme,struct typeFORthreads *online,struct PACKbouton *bouton ,struct PACKobjet *objet, struct PERSO *perso,struct DIVERSinventaire *inventaire,struct DIVERSdeplacement *deplacement, struct DIVERStemps *temps,struct DIVERSui *ui,struct DIVERSchat *chat,struct DIVERScraft *craft, struct PACKrecompense *recompense,struct typeFORevent *FORevent,struct TIR *TIR) { int index; chargement(systeme); #if CHEAT == 1 for (index = 0 ; index < TAILLESAC ; index++) { videemplacement(&FORevent->objet->sac1[index]); } for (index = 0 ; index < 10 ; index++) { insertionsac(objet, 0); insertionsac(objet, 2); insertionsac(objet, 7); } insertionsac(objet, 3); insertionsac(objet, 1); insertionsac(objet, 4); insertionsac(objet, 5); insertionsac(objet, 6); insertionsac(objet, 8); insertionsac(objet, 9); #endif struct DONJON dj0; initdonjon(&dj0, systeme); LoadDonjon(&dj0, "dj0"); systeme->djisloaded = true; online->jeuxACTIF = 1; for(index = 0 ; index < MAX_JOUEURS ; index++) { online->joueurs[index].ppseudo.x = 20000; online->joueurs[index].ppseudo.y = 20000; online->joueurs[index].position.w = 0; online->joueurs[index].position.h = 0; } checkandrefreshstuff(perso, objet, systeme, ui); checkinventaire(objet, inventaire); glMatrixMode( GL_PROJECTION ); glLoadIdentity(); gluOrtho2D(0,screenw,0,screenh); glMatrixMode( GL_MODELVIEW ); glLoadIdentity(); /*############################################################################################################################################################# ##################### Boucle De Jeu ##################### # ######################################################################################################################################################################*/ systeme->continuer = 1; while (systeme->continuer == 1) { temps->tpact = SDL_GetTicks(); if (temps->tpact - temps->tpapr >= 15) /*15 ms*/ { temps->tpapr = temps->tpact; temps->i++; /*sichronisation des données*/ sinchronisation(craft, systeme, online, perso, &dj0); SyncMob(&dj0, perso); /*calcul direction joueur client*/ deplacement->direction.direction = directionperso(&deplacement->direction); /*deplacement*/ checkPixel(&dj0.map, perso, systeme); move_map(perso, &deplacement->direction, &dj0.origin); /*gestion des dégats*/ hitboxplayer (&dj0, perso, systeme); /*recupération coordonées souris*/ SDL_GetMouseState(&systeme->pointeur.pos.x, &systeme->pointeur.pos.y); systeme->pointeur.pos.y = (systeme->pointeur.pos.y - screenh + systeme->pointeur.pos.h) * -1; /*gestion de l'ui*/ gestionui(systeme, ui, craft, bouton, chat, inventaire, objet, perso); /*detection des combats*/ // detectioncombat(monstre, inventaire, ui, deplacement, objet, perso, systeme, recompense, false); /*gestion des evenement*/ boucleevent(&online->chat.lancermessage, FORevent, TIR); /*gestion du chat*/ gestionchat(chat, systeme, online); if (TIR->letirdemander == true) { gestiontir(TIR, systeme, perso, &dj0); } COMBATgestionprojectile (TIR, &dj0); /*################################################################################################################################################################################## ##################### AFFICHAGE ##################### # ##################################################################################################################################################################################*/ /*effacage de l'écran*/ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) ; /*affichage de la carte*/ draw_pict(&dj0.map.pict); for (index=0 ; index<dj0.nombremonstre ; index++) { if(dj0.mob[index].BarreDeVie->life > 0) { turn_draw_hookpict(dj0.mob[index].angle, &dj0.mob[index].hookpict, &dj0.map.pict.pos); CalculerBarreDeVie(dj0.mob[index].BarreDeVie->baselife , dj0.mob[index].BarreDeVie->life, 68); setPos2rect(&dj0.mob[index].BarreDeVie->pBG, dj0.mob[index].hookpict.pict.pos.x-1 + ((dj0.mob[index].hookpict.pict.pos.w-68)/2), dj0.mob[index].hookpict.pict.pos.y + dj0.mob[index].hookpict.pict.pos.h+4); setPos4(&dj0.mob[index].BarreDeVie->pbarre, dj0.mob[index].hookpict.pict.pos.x + ((dj0.mob[index].hookpict.pict.pos.w-68)/2), dj0.mob[index].hookpict.pict.pos.y + dj0.mob[index].hookpict.pict.pos.h+5, CalculerBarreDeVie(dj0.mob[index].BarreDeVie->baselife , dj0.mob[index].BarreDeVie->life, 68), 5); draw(systeme->BGnoir, &dj0.mob[index].BarreDeVie->pBG); draw(systeme->BGblanc, &dj0.mob[index].BarreDeVie->pbarre); } } /*affichage des joueurs*/ afficherJOUEURS(perso, deplacement, systeme, online, temps); BattleDraw_Projectile(TIR, &dj0); /*affichage du chat*/ if (ui->chat_open == true) { afficherCHAT(chat, ui, online->chat.lenbuffer, systeme); } /*affichage de l'inventaire*/ else if (ui->inventaire_open == true) { afficherINVENTAIRE(inventaire, ui, objet, systeme); } /*affichage de l'interface utilisateur*/ afficherUI(online->isonline, ui, bouton, temps, perso, inventaire, systeme, recompense, objet); /*affichage de l'interface de crafting*/ if (ui->craft_open == true) { afficherCRAFT(craft, ui, bouton, objet, inventaire, systeme); } /*affichage du pointeur*/ afficherPOINTEUR(systeme, objet); /*rendu éran*/ glFlush(); glFinish(); SDL_GL_SwapWindow(systeme->screen); } else { SDL_Delay(5); } /*########################################################################################################################### ##################### Frame Par Secondes ##################### # ###########################################################################################################################*/ if (temps->tpact - temps->tpap >= 1000) { temps->temptotal++; /*if it's the first second of this player*/ if (temps->temptotal == 5) { char texte[2548] = "\nprisonnier : \n salut ... \n ça tombe bien,\n j'avais besoin d'un coup de main !\n tiens ! prend ce lance pierre et vas nous chercher\nquelques rat !\n\n\n\n\n\n\n\n\n\n\n\n\n\n APPUIE SUR ENTRÉE POUR CONTINUER"; ui->dialogue_text.texture = fenetredialogue(screenw*0.4, screenh*0.8, &ui->dialogue_back.pos, &ui->dialogue_text.pos, texte, BLANC, systeme); ui->dialogueactif = 1; insertionsac(objet, 3); } if (temps->temptotal - temps->oldipourregen >= 3) { if (perso->life < perso->lifemax) { perso->life += REGEN; perso->life += perso->regenlife; if (perso->life > perso->lifemax) { perso->life = perso->lifemax; } temps->oldipourregen = temps->temptotal; } } else { if (perso->life < perso->lifemax) { perso->life += perso->regenlife; if (perso->life > perso->lifemax) { perso->life = perso->lifemax; } } } if (temps->temptotal - temps->tpspoursave >= 30) { sauvegardetout(systeme->sauvegarde, dj0.map.pict.pos, perso, temps->temptotal, 0, objet->sac1, TAILLESAC, ui); temps->tpspoursave = temps->temptotal; } sprintf(temps->StringI, "IPS => %d", temps->i); sprintf(perso->slife, "vie : %0.0f/%d", perso->life, perso->lifemax); sprintf(temps->stringtempstotal, "age du personnage : %dj %dh %dmin %dsec", calcultempsjours(temps->temptotal), calcultempsheures(temps->temptotal), calcultempsminutes(temps->temptotal), calcultempssecondes(temps->temptotal)); temps->fps.texture = imprime (temps->StringI, screenw, BLANC, systeme, NULL, NULL); perso->tlife.texture = imprime (perso->slife, screenw, BLANC, systeme, NULL, NULL); temps->temps.texture = imprime (temps->stringtempstotal, screenw, BLANC, systeme, NULL, NULL); for(index = 0; index < 10 ; index++) { if(online->chat.schat[index][0] != '\0') { chat->pstringchat[index].y = (screenh*0.5)+(online->chat.poschat[index]*(screenh*0.047)); SDL_DestroyTexture(chat->tstringchat[index]); // chat->tstringchat[index] = imprime(online->chat.schat[index], screenw, BLANC, systeme, NULL, NULL); } } temps->i = 0; temps->tpap = temps->tpact; } } /*########################################################################################################################### # ##################### Fin de Fonction ##################### # # ###########################################################################################################################*/ sauvegardetout(systeme->sauvegarde, dj0.map.pict.pos, perso, temps->temptotal, 0, objet->sac1, TAILLESAC, ui); return 1; }
int main (int argc, char * argv[]) { Coord_SDL clic; s_Menu menu; s_Interface interface; s_Board board; interface = Init(); board = load_Board(interface); menu = load_Menu(interface); SDL_Event event; Plateau board_tab; Coordonnees_tab coord_tab; Couleur joueur_courant = bleu, dernier_joueur = bleu; menu.actualMenu = menu.mainMenu; bool quit = false, premier_coup = true, IA = false; int choix; coord_tab.abscisse = 0; coord_tab.ordonnee = 0; while (!quit) //Boucle des évènements { SDL_WaitEvent(&event); if (IA) if (joueur_courant == rouge) { event.button.button = SDL_BUTTON_LEFT; event.type = SDL_MOUSEBUTTONDOWN; } switch (event.type) { case SDL_QUIT: quit = true; break; case SDL_MOUSEBUTTONDOWN: //On clique sur la souris if (event.button.button == SDL_BUTTON_LEFT) { clic.CoordX = event.motion.x; clic.CoordY = event.motion.y; choix = choix_Menu(clic, menu); /********************* Menus ***********************/ if (menu.actualMenu == menu.mainMenu) //Menu principal { if (choix == 1) { menu.actualMenu = menu.playMenu; MaJ_Menu(menu, interface, nbPlayMenuChoice); } if (choix == 2) { initialiser_plateau(board_tab); chargement(board_tab); MaJ_Board(board, interface, board_tab); menu.actualMenu = menu.inGameMenu; MaJ_Menu(menu, interface, nbinGameMenuChoice); premier_coup = false; } if (choix == 3) { quit = true; } } else if (menu.actualMenu == menu.playMenu) //Menu de sélection de partie { if (choix == 0) { menu.actualMenu = menu.inGameMenu; MaJ_Menu(menu, interface, nbinGameMenuChoice); nouvelle_partie(board_tab); MaJ_Board(board, interface, board_tab); joueur_courant = bleu; premier_coup = true; IA = false; MaJ_Infos(menu, interface, joueur_courant, premier_coup); } if (choix == 1) { menu.actualMenu = menu.inGameMenu; MaJ_Menu(menu, interface, nbinGameMenuChoice); nouvelle_partie(board_tab); MaJ_Board(board, interface, board_tab); joueur_courant = bleu; premier_coup = true; IA = true; MaJ_Infos(menu, interface, joueur_courant, premier_coup); } if (choix == 2) { menu.actualMenu = menu.inGameMenu; MaJ_Menu(menu, interface, nbinGameMenuChoice); nouvelle_partie(board_tab); MaJ_Board(board, interface, board_tab); joueur_courant = bleu; premier_coup = true; IA = true; MaJ_Infos(menu, interface, joueur_courant, premier_coup); } if (choix == 3) { if (premier_coup == true) menu.actualMenu = menu.mainMenu; else menu.actualMenu = menu.inGameMenu; MaJ_Menu(menu, interface, nbMenuChoice); } } else if (menu.actualMenu == menu.inGameMenu) //Menu en jeu { if (choix == 0) { menu.actualMenu = menu.playMenu; MaJ_Menu(menu, interface, nbPlayMenuChoice); } if (choix == 1) { board_save(board_tab); } if (choix == 2) { if (joueur_courant != dernier_joueur) { if (!premier_coup) { annuler(board_tab); MaJ_Board(board, interface, board_tab); MaJ_Infos(menu, interface, joueur_courant, premier_coup); joueur_courant = changer_joueur(joueur_courant); } } } if (choix == 3) { quit = true; } /********************* Tour de jeu *********************/ if (!IA) //Partie humain vs humain { if (clic_on_board(clic, board)) { coord_tab = pos_pion_tab(clic, board); if (coup_valide(board_tab, coord_tab)) { placer_pion(board, coord_tab, joueur_courant, interface, board_tab); if (joueur_courant == bleu) dernier_joueur = bleu; else dernier_joueur = rouge; historique(premier_coup, coord_tab, joueur_courant); premier_coup = false; MaJ_Infos(menu, interface, joueur_courant,premier_coup); if (verify_win(board_tab[coord_tab.abscisse][coord_tab.ordonnee], board_tab)) { affiche_vainqueur(menu, interface, joueur_courant); menu.actualMenu = menu.mainMenu; MaJ_Menu(menu, interface, nbMenuChoice); joueur_courant = neutre; } joueur_courant = changer_joueur(joueur_courant); } } } else if (IA) //Partie humain vs IA { if (joueur_courant == bleu) coord_tab = pos_pion_tab(clic, board); else { coord_tab = coup_IA1 (board_tab); SDL_Delay(500); } if (coup_valide(board_tab, coord_tab)) { placer_pion(board, coord_tab, joueur_courant, interface, board_tab); historique(premier_coup, coord_tab, joueur_courant); premier_coup = false; MaJ_Infos(menu, interface, joueur_courant,premier_coup); if (verify_win(board_tab[coord_tab.abscisse][coord_tab.ordonnee], board_tab)) { affiche_vainqueur(menu, interface, joueur_courant); menu.actualMenu = menu.mainMenu; MaJ_Menu(menu, interface, nbMenuChoice); joueur_courant = neutre; } joueur_courant = changer_joueur(joueur_courant); } } } } break; case SDL_KEYDOWN: switch (event.key.keysym.sym) { case SDLK_ESCAPE: //On appuie sur la touche ECHAP quit = true; break; } break; } //Met à jour l'écran SDL_UpdateWindowSurface(interface.window); } return 0; }
main() { int choix = -1, numero ; char nomrecherche[MAX_NOM] ; struct etudiant eleve ; while(choix != 0) { printf("\n") ; printf("-1- Saisie\n") ; printf("-2- Affichage\n") ; printf("-3- Sauvegarder\n") ; printf("-4- Chargement\n") ; printf("-5- Vider\n") ; printf("-6- Rechercher\n") ; printf("-6- Modifier\n") ; printf("-7- Éliminer un élève\n") ; printf("-0- Quitter\n\n") ; printf("Choix : ") ; scanf("%d", &choix) ; switch(choix) { case 0 : sauvegarde_test() ; printf("Au revoir.\n") ; break ; case 1 : saisie() ; break ; case 2 : affichage() ; break ; case 3 : sauvegarde() ; break ; case 4 : chargement() ; break ; case 5 : chargement() ; break ; case 6 : if(nbeleves == 0) { printf("Aucun élève dans la base."); } else { printf("Saisissez le nom à recherche : ") ; scanf("%s", nomrecherche) ; numero = recherche(nomrecherche) ; if(numero == NON_TROUVE) { printf("%s n'a pas été trouvé.", nomrecherche) ; } else { eleve = tabeleve[numero] ; printf("%s %s %d\n", eleve.nom, eleve.prenom, eleve.age) ; } } break ; case 7 : modification() ; break ; case 8 : eliminer1() ; break ; default: printf("Erreur de saisie.") ; break ; } } }