void replay(char *choice, int i) { char input; input = ' '; while(input != 'o' && input != 'n') { my_putstr("Voulez-vous recommencer?(o/n)\n"); input = getchar(); vider_buffer(); } if (input == 'o') (*(fmenu[i]))(choice); }
void verifier_position_score(scoreJoueur* tableauScores, int *nbScore, scoreJoueur scoreAenregistrer) { int i; /* A partir d'un tableau deja trie, on decale chaque element existant vers la droite, jusqu'à ce qu'on tombe sur un score superieur a celui qu'on doit enregistrer, ou jusqu'à ce qu'on parcourt tout le tableau. */ for(i = *nbScore; i > 0 && tableauScores[i - 1].score < scoreAenregistrer.score; i--) { tableauScores[i] = tableauScores[i - 1]; } if(*nbScore != 10) { *nbScore += 1; } if(i != 10) { printf("\n---------------------------------------------------------------------------\n"); printf("\n\tBravo! Votre score va etre enregistre !\n"); printf("\tEntrez votre nom : "); scanf("%s", scoreAenregistrer.nomJoueur); vider_buffer(); tableauScores[i] = scoreAenregistrer; } }
void jouer(char *laby, size_t nbLignes, size_t nbColonnes, char *nomLabyrinthe) { int score = 0; int scoreTotal = 0; char touche = 'l'; time_t debut = time(NULL); time_t fin; int tempsPartie; int tailleTabMonstres; Monstre *tabMonstres = analyser_monstres(laby, nbLignes, nbColonnes, &tailleTabMonstres); clear(); laby[nbColonnes * 1 + 0] = 'o'; afficher_labyrinthe(laby, nbLignes, nbColonnes, score, nomLabyrinthe, tabMonstres, tailleTabMonstres, 0); vider_buffer(); while(touche != 'f') { touche = getch(); switch(touche) { case 'd': fin = time(NULL); deplacer_monstres(tabMonstres, nbLignes, nbColonnes, tailleTabMonstres, laby, &score); deplacer_joueur(laby, nbLignes, nbColonnes, 0, 1, &score, nomLabyrinthe, tabMonstres, tailleTabMonstres, (int)difftime(fin, debut)); break; case 'q': fin = time(NULL); deplacer_monstres(tabMonstres, nbLignes, nbColonnes, tailleTabMonstres, laby, &score); deplacer_joueur(laby, nbLignes, nbColonnes, 0, -1, &score, nomLabyrinthe, tabMonstres, tailleTabMonstres, (int)difftime(fin, debut)); break; case 's': fin = time(NULL); deplacer_monstres(tabMonstres, nbLignes, nbColonnes, tailleTabMonstres, laby, &score); deplacer_joueur(laby, nbLignes, nbColonnes, 1, 0, &score, nomLabyrinthe, tabMonstres, tailleTabMonstres, (int)difftime(fin, debut)); break; case 'z': fin = time(NULL); deplacer_monstres(tabMonstres, nbLignes, nbColonnes, tailleTabMonstres, laby, &score); deplacer_joueur(laby, nbLignes, nbColonnes, -1, 0, &score, nomLabyrinthe, tabMonstres, tailleTabMonstres, (int)difftime(fin, debut)); break; } if(verifier_position_gagnante(nbLignes, nbColonnes)==1) { fin = time(NULL); tempsPartie = (int)difftime(fin, debut); /* Le temps que le joueur a mit a trouver la sortie, en sec */ scoreTotal = score - tempsPartie / 2; /* Le malus du temps est le temps total divise par deux */ printf("\tMalus de temps : -%d points\n", tempsPartie / 2); if(scoreTotal < 0) /* On n'enregistre pas des scores negatifs */ { scoreTotal = 0; } printf("\tScore total : %d points\n", scoreTotal); enregistrer_topscore(scoreTotal, nomLabyrinthe); touche = 'f'; } } positionActuelle_X = 1; positionActuelle_Y = 0; laby[nbColonnes * (nbLignes-2) + (nbColonnes - 1)] = ' '; return; }
void enregistrer_topscore(int score, char *nomLaby) { char nomFichier[31]; char chaineTemporaire[31]; char ligneAinserer[51]; char caractereLu; int auMoinsUnJoueur = 0; int enregistrementNom = 1; int nbScore = 0; int position_caractere = 0; scoreJoueur scoreAenregistrer; scoreJoueur scoreLu; scoreJoueur tableauScore[10]; FILE* fichier; strcpy(nomFichier, nomLaby); strcat(nomFichier, ".cfg"); fichier = fopen(nomFichier, "a+"); fseek(fichier, 0, SEEK_SET); scoreAenregistrer.score = score; memset(&scoreLu.nomJoueur[0], 0, sizeof(scoreLu.nomJoueur)); memset(&chaineTemporaire[0], 0, sizeof(chaineTemporaire)); if(fichier != NULL) { while((caractereLu = fgetc(fichier)) != EOF) { if(caractereLu == '\n') { /* Apres la lecture d'un joueur et de son score, on stock dans le tableau */ scoreLu.score = atoi(chaineTemporaire); tableauScore[nbScore] = scoreLu; /* On vide les variables de lectures */ memset(&scoreLu.nomJoueur[0], 0, sizeof(scoreLu.nomJoueur)); memset(&chaineTemporaire[0], 0, sizeof(chaineTemporaire)); enregistrementNom = 1; position_caractere = 0; nbScore += 1; } else { if(caractereLu == ':') { /* On passe a la lecture du score si on rencontre le caractere ':'*/ position_caractere = 0; enregistrementNom = 0; } else { if(enregistrementNom == 1) { /* On lit le nom du joueur */ scoreLu.nomJoueur[position_caractere] = caractereLu; } else { /* On lit le score du joueur*/ chaineTemporaire[position_caractere] = caractereLu; } position_caractere += 1; } } auMoinsUnJoueur = 1; } /* Ce passage est obligatoire. S'il y a au moins un joueur enregistre dans le classement, il faut faire une derniere sauvagarde dans le tableau */ if(auMoinsUnJoueur == 1) { scoreLu.score = atoi(chaineTemporaire); tableauScore[nbScore] = scoreLu; memset(&scoreLu.nomJoueur[0], 0, sizeof(scoreLu.nomJoueur)); memset(&chaineTemporaire[0], 0, sizeof(chaineTemporaire)); enregistrementNom = 1; position_caractere = 0; nbScore += 1; } if(nbScore == 0) /* Si le classement est vide */ { printf("\n---------------------------------------------------------------------------\n"); printf("\n\tBravo! Votre score va etre enregistre !\n"); printf("\tEntrez votre nom : "); scanf("%s", scoreAenregistrer.nomJoueur); vider_buffer(); sprintf(chaineTemporaire, "%d", scoreAenregistrer.score); strcpy(ligneAinserer, scoreAenregistrer.nomJoueur); strcat(ligneAinserer, ":"); strcat(ligneAinserer, chaineTemporaire); fputs(ligneAinserer, fichier); printf("\n--CLASSEMENT----------------------------------------------------------------\n"); printf("\n Nom Score \n\n"); printf("\t%2d : %-30s%d\n", 1, scoreAenregistrer.nomJoueur, scoreAenregistrer.score); } else { int *p_nbScore = &nbScore; int i; verifier_position_score(&tableauScore[0], p_nbScore, scoreAenregistrer); fclose(fichier); fichier = fopen(nomFichier, "w+"); printf("\n--CLASSEMENT----------------------------------------------------------------\n"); printf("\n Nom Score \n\n"); for(i = 0; i < nbScore; i++) { memset(&ligneAinserer[0], 0, sizeof(ligneAinserer)); memset(&chaineTemporaire[0], 0, sizeof(chaineTemporaire)); sprintf(chaineTemporaire, "%d", tableauScore[i].score); strcpy(ligneAinserer, tableauScore[i].nomJoueur); strcat(ligneAinserer, ":"); strcat(ligneAinserer, chaineTemporaire); printf("\t%2d : %-30s%d\n", i + 1, tableauScore[i].nomJoueur, tableauScore[i].score); if(i != 0) { fputs("\n", fichier); } fputs(ligneAinserer, fichier); } } fclose(fichier); } else { printf("Impossible d'ouvrir\n"); } }