コード例 #1
0
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);
	}
}
コード例 #2
0
ファイル: main.c プロジェクト: SRWieZ/MinesweeperC
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');
}