Boolean FwordsToGLvarNode::wordsToGLvar(void){ switch(entryPoint){ case GLstart: index=1; entryPoint=GLrun; //runs into next case case GLrun:{ // check for end if(index>words->numItems)return FALSE; // get the word FfreeWord *f=(FfreeWord*)words->NthItem(index); long **wordHandle=f->wordHandle; f->leftJustify(); // link the letters v->cv=itsRoot; // the next edge is always linked at // at the companion long len=f->wordSize; for(long i=0;i<len;i=i+2){ v->e=(*wordHandle)[i]; if(v->e>lettersNo)v->varErr(56); long exp=(*wordHandle)[i+1]; Boolean closeTheCircle= i==len-2; if(exp<0)v->e= -v->e; //create all but the last edge long noAllButLast=Abs(exp)-1; for(long notLasti=0;notLasti<noAllButLast;++notLasti){ v->bv=v->cv; v->V(); putFlag(v->cv,FALSE); } //set the last edge if(closeTheCircle){ send(terminateWordMsg); } else{ v->bv=v->cv; v->V(); } } // get ready for the next word ++index; return TRUE; } break; default: nodeErr(6); } }
main() { char touche; // Variable où sera stocké la touche int y = OFFSET_Y, x = OFFSET_X; // Variable de la position du pointeur de l'utilisateur double bestScore = -1, score = -1, lastScore = -1; time_t depart, arrivee; // Variables de temps // Activation de rand() srand(time(NULL)); // Génération du menu showBorder(); // Génération du menu showMenu(); // Nouvelle partie newGame(); // On démarre le chrono time(&depart); // Gestion des touches do{ // Définition de la couleur du texte textbackground(B_TEXT); textcolor(C_TEXT); // On affiche le nombre de bombes restantes gotoxy(mapX+OFFSET_X+(BORDER*2), OFFSET_Y+8); printf("Bombs : %d ", NB_BOMBS-nbFlags); if(lastScore != -1) { // On affiche le meilleur score gotoxy(mapX+OFFSET_X+(BORDER*2), OFFSET_Y+12); printf("Last Score : %.0f ", lastScore); } if(bestScore != -1) { // On affiche le meilleur score gotoxy(mapX+OFFSET_X+(BORDER*2), OFFSET_Y+13); printf("Best Score : %.0f ", bestScore); } if(gameOver == TRUE) { // Affichage des bombes showBombs(); // On affiche le message msgZone(C_ERROR, B_ERROR); printf("BOOOOOM !"); gotoxy(mapX+OFFSET_X+(BORDER*2), OFFSET_Y+18); printf("Retry ? Press \"r\""); // Pour l'esthétique, on remet le curseur à sa place gotoxy(x, y); do{ touche = getch(); }while(touche != 114); } else if(nbMined == NB_CASES-NB_BOMBS) { // On calcul le temps mis pour gagner time(&arrivee); score = difftime(arrivee, depart); if(score < bestScore || bestScore == -1) bestScore = score; lastScore = score; // On affiche qu'il a gagner msgZone(C_SUCESS, B_SUCESS); printf("YOU WIN !"); gotoxy(mapX+OFFSET_X+(BORDER*2), OFFSET_Y+18); printf("Score : %.0f", score); // Pour l'esthétique, on remet le curseur à sa place gotoxy(x, y); do{ touche = getch(); }while(touche != 114); } else { // On remet le curseur là où le joueur joue gotoxy(x, y); //On récupère la touche appuyer touche = getch(); } //printf("\n%c %d", touche, touche); // DEBUG : permet de voir le code de la touche if(needToClear == TRUE) { clearMsg(); // On efface le message précédent gotoxy(x, y); // On remet le curseur là où le joueur joue } // Si c'est un mouvement, on se déplace if(touche == -32) { // On récupère le sens touche = getch(); switch(touche) { case 75:if(x != 0+OFFSET_X) x--; break; // gauche case 77:if(x != mapX-1+OFFSET_X) x++;break; // droite case 80:if(y != mapY-1+OFFSET_Y) y++;break; // bas case 72:if(y != 0+OFFSET_Y) y--; break; // haut } // On déplace le curseur gotoxy(x, y); } else if(touche == 32) // S'il selectionne la case (espace) { mineCase(x, y); } else if(touche == 102) // S'il pose un drapeau (touche "F") { putFlag(x, y); } else if(touche == 114) // Touche pour commencer une nouvelle partie { newGame(); x = OFFSET_X; y = OFFSET_Y; gotoxy(OFFSET_X, OFFSET_Y); // On remet à zéro le chrono time(&depart); } else if(touche == 113) // Touche pour quitter { return 1; } else if(touche == 51) // Touche de debug pour voir les bombes (touche B) { showBombs(); } } while(touche != '0'); }