Accueil > > > TOUR DE HANOI EN C
TOUR DE HANOI EN C
Information sur la source
Description
Je sais quil existe de nombreuse sources sur les tours de Hanoi toutes les unes differentes des autres sur differents languages. J'apprend le C en ce moment est ceci est ma premiere source dans le domaine du C. Ce que j aimerais surtout c est avoir des conseils de personnes plus experimenter que moi dans ce domaine. N ayant pas encore apris le C++ ce n est pas la peine de m en parler j y viendrais une fois que j aurais bien integre le C (J ai encore beaucoup de boulot) je ne suis qu a la fin de mon apprentissage sur le mode console du C. J ai donc creer le jeu en mode console. Ce n est qu un petit projet donc j ai mis tout le code dans un fichier main.c sauf 2 3 fonctions que j utilise de facon general pour tout mes projets. PS: J'ai code avec l IDE Code::blocks.
Source
- #include "lecture.h"
- //Iteration of the functions
- void regles();
- void disposeTour(int numTour[],int *niveau);
- void recupere3firstNombre(int numTour[],int numMenu[],int *niveau);
- void menuChoosePalette(int numMenu[],int *tourActuelle);
- void menuWhere(int *tourActuelle,int numMenu[],int *newTour);
- void deplacement(int *tourActuelle,int numMenu[],int numTour[],int *newTour);
- void checkWin(int numTour[],int *rejouer,int *conitnuer,int *niveau,int *showLevel,int *coups,int *countTurns);
- void level(int *niveau,int *coups);
- void counter(int *niveau,int *coups,int *countTurns);
-
- /*
- This function give you the menu of show rules
- @param *pause stop the screen after showing the rules
- //*/
- void regles()
- {
- int rules=1;int pause=0;
- do
- {
- printf("Voulez vous connaitre les regles du jeu?\n\n");
- printf("0. NON\n");
- printf("1. OUI\n");
- rules=lireLong();
- if(rules < 0 || rules > 1)
- printf("Ce choix n'est pas dans le menu\n\n");
- }
- while(rules < 0 || rules > 1);
- if(rules)
- {
- printf("Le jeu est composer de 3 tours disposer les unes a cotes des autres.\n");
- printf("Au debut du jeu vous avez de 3 a 8 palettes sur la tour de gauche.\n");
- printf("Le but du jeu est de toutes les deplacer sur la tour de droite.\n");
- printf("Les palettes sont deplacable une par une.\n");
- printf("Mais attention vous n'avez pas le droit de poser une palette plus grande sur une palette plus petite.\n");
- printf("Donc dans la troisieme tour vous aurez vos palettes dans le meme ordre qu'au debut du jeu.\n");
- printf("Bonne chance!\n\n");
- pause=lireLong();
- }
- }
-
- /*
- This functions is generating the draws of the towers with the discs
- @param int numTour[] it s a table from 3 to 8 numbers that each one correspond to one disc and each number give the tower where the disc is
- @param int niveau give the number of disc you want to play with.
- //*/
- void disposeTour(int numTour[],int *niveau)
- {
- printf("Vos tours de Hannoi actuellement:\n\n");
- printf("\tTOUR 1\t\tTOUR 2\t\tTOUR 3\n\n");
- int i=0;
- while(i < *niveau)
- {
- switch(i)
- {
- case 1:
- if(numTour[i] == 1)
- printf("\t******222******\t\t*\t\t*\n");
- else if(numTour[i] == 2)
- printf("\t*\t\t******222******\t\t*\n");
- else
- printf("\t*\t\t*\t\t******222******\n");
- i++;
- break;
- case 2:
- if(numTour[i] == 1)
- printf("\t*****33333*****\t\t*\t\t*\n");
- else if(numTour[i] == 2)
- printf("\t*\t\t*****33333*****\t\t*\n");
- else
- printf("\t*\t\t*\t\t*****33333*****\n");
- i++;
- break;
- case 3:
- if(numTour[i] == 1)
- printf("\t****4444444****\t\t*\t\t*\n");
- else if(numTour[i] == 2)
- printf("\t*\t\t****4444444****\t\t*\n");
- else
- printf("\t*\t\t*\t\t****4444444****\n");
- i++;
- break;
- case 4:
- if(numTour[i] == 1)
- printf("\t***555555555***\t\t*\t\t*\n");
- else if(numTour[i] == 2)
- printf("\t*\t\t***555555555***\t\t*\n");
- else
- printf("\t*\t\t*\t\t***555555555***\n");
- i++;
- break;
- case 5:
- if(numTour[i] == 1)
- printf("\t**66666666666**\t\t*\t\t*\n");
- else if(numTour[i] == 2)
- printf("\t*\t\t**66666666666**\t\t*\n");
- else
- printf("\t*\t\t*\t\t**66666666666**\n");
- i++;
- break;
- case 6:
- if(numTour[i] == 1)
- printf("\t*7777777777777*\t\t*\t\t*\n");
- else if(numTour[i] == 2)
- printf("\t*\t\t*7777777777777*\t\t*\n");
- else
- printf("\t*\t\t*\t\t*7777777777777*\n");
- i++;
- break;
- case 7:
- if(numTour[i] == 1)
- printf("\t888888888888888\t\t*\t\t*\n\n");
- else if(numTour[i] == 2)
- printf("\t*\t\t888888888888888\t\t*\n\n");
- else
- printf("\t*\t\t*\t\t888888888888888\n\n");
- i++;
- break;
- default:
- if(numTour[i] == 1)
- printf("\t*******1*******\t\t*\t\t*\n");
- else if(numTour[i] == 2)
- printf("\t*\t\t*******1*******\t\t*\n");
- else
- printf("\t*\t\t*\t\t*******1*******\n");
- i++;
- break;
- }
- }
- }
-
- /*
- This function save the numbers of the three discs of each tower that are the smallest (so the upper).
- @param numTour[] view comments above
- @param numMenu[] It is a table of 3 numbers that contain the number of the upper disc for each tower
- @param niveau Number of dis you want to play with
- //*/
- void recupere3firstNombre(int numTour[],int numMenu[],int *niveau)
- {
- int i=0;
- numMenu[0]=0;
- numMenu[1]=0;
- numMenu[2]=0;
- //loop for the first tower
- while(i < *niveau)
- {
- if(numTour[i] == 1)
- {
- numMenu[0]=i+1;
- break;
- }
- i++;
- }
- //initialise the counter
- i=0;
- //loop for the second tower
- while(i < *niveau)
- {
- if(numTour[i] == 2)
- {
- numMenu[1]=i+1;
- break;
- }
- i++;
- }
- //initialise the counter
- i=0;
- //loop for the third tower
- while(i < *niveau)
- {
- if(numTour[i] == 3)
- {
- numMenu[2]=i+1;
- break;
- }
- i++;
- }
- }
-
- /*
- This function ask the player to choose the disc he want to move.
- @param numMenu view comment above
- @param tourActuelle it has the number of the tower where the disc the player want to move is.
- //*/
- void menuChoosePalette(int numMenu[],int *tourActuelle)
- {
- //initialise the counter to 1
- int i=1;
- do
- {
- printf("Quels palette voulez vous deplacer ?\n\n");
- if(numMenu[0] != 0)
- {
- printf("1. palette numero %d.\n",numMenu[0]);
- i++;
- }
- if(numMenu[1] != 0)
- {
- printf("2. palette numero %d.\n",numMenu[1]);
- i++;
- }
- if(numMenu[2] != 0)
- {
- printf("3. palette numero %d.\n",numMenu[2]);
- i++;
- }
- *tourActuelle = lireLong();
- if(*tourActuelle < 1 || *tourActuelle > 3)
- printf("Ce choix n'est pas dans le menu!\n\n");
- }
- while(*tourActuelle < 1 || *tourActuelle > 3);
- }
-
- /*
- This function ask the player on wich tower he want to move the disc.
- @param tourActuelle view comment above
- @param numMenu[] view comment above
- @param newTour save the number of the tour the player want to move his disc on
- //*/
- void menuWhere(int *tourActuelle,int numMenu[],int *newTour)
- {
- do
- {
- switch(*tourActuelle)
- {
- case 2:
- printf("Sur quels tour voulez vous deplacer la palette numero %d ?\n\n",numMenu[1]);
- printf("1. tour numero 1.\n");
- printf("3. tour numero 3.\n");
- break;
- case 3:
- printf("Sur quels tour voulez vous deplacer la palette numero %d ?\n\n",numMenu[2]);
- printf("1. tour numero 1.\n");
- printf("2. tour numero 2.\n");
- break;
- default:
- printf("Sur quels tour voulez vous deplacer la palette numero %d ?\n\n",numMenu[0]);
- printf("2. tour numero 2.\n");
- printf("3. tour numero 3.\n");
- break;
- }
- *newTour=lireLong();
- if(*newTour < 1 || *newTour > 3)
- printf("Ce choix n'est pas dans le menu\n\n");
- }
- while(*newTour < 1 || *newTour > 3);
- }
-
- /*
- This function move the disc place as the player wanted.
- @param tourActuelle view comment above
- @param numMenu view commment above
- @param numTour view comment above
- @param newTour view comment above
- //*/
- void deplacement(int *tourActuelle,int numMenu[],int numTour[],int *newTour)
- {
- if(*tourActuelle == 1)
- {
- if(*newTour == 2)
- {
- if(numMenu[0] < numMenu[1] || numMenu[1] == 0)
- numTour[numMenu[0]-1] = 2;
- else
- {
- printf("Erreur, rappel: On ne peut deplacer une palette que sur une palette plus grande.\n\n");
- }
- }
- else
- {
- if(numMenu[0] < numMenu[2] || numMenu[2] == 0)
- numTour[numMenu[0]-1] = 3;
- else
- {
- printf("Erreur, rappel: On ne peut deplacer une palette que sur une palette plus grande.\n\n");
- }
- }
- }
- else if(*tourActuelle == 2)
- {
- if(*newTour == 1)
- {
- if(numMenu[1] < numMenu[0] || numMenu[0] == 0)
- numTour[numMenu[1]-1] = 1;
- else
- {
- printf("Erreur, rappel: On ne peut deplacer une palette que sur une palette plus grande.\n\n");
- }
- }
- else
- {
- if(numMenu[1] < numMenu[2] || numMenu[2] == 0)
- numTour[numMenu[1]-1] = 3;
- else
- {
- printf("Erreur, rappel: On ne peut deplacer une palette que sur une palette plus grande.\n\n");
- }
- }
- }
- else
- {
- if(*newTour == 1)
- {
- if(numMenu[2] < numMenu[0] || numMenu[0] == 0)
- numTour[numMenu[2]-1] = 1;
- else
- {
- printf("Erreur, rappel: On ne peut deplacer une palette que sur une palette plus grande.\n\n");
- }
- }
- else
- {
- if(numMenu[2] < numMenu[1] || numMenu[1] == 0)
- numTour[numMenu[2]-1] = 2;
- else
- {
- printf("Erreur, rappel: On ne peut deplacer une palette que sur une palette plus grande.\n\n");
- }
- }
- }
- //*/
- }
-
- /*
- Check if the player win the game. if Yes ask if he want to restart the game.
- @param numTour view comment above
- @param rejouer A boolean if true replay the game if false stop the game
- @param continuer A boolean if true replay the game if false stop the game
- @param niveau Numbers of discs the player play with.
- @param showLevel A boolean if true (replay) so call the level function
- @param coups numbers of turn minimum you need to win the game
- @param countTurns numbers of turn you have done until now.
- //*/
- void checkWin(int numTour[],int *rejouer,int *conitnuer,int *niveau,int *showLevel,int *coups,int *countTurns)
- {
- int i=0, y=0;
- while(i < *niveau)
- {
- //if one disc is not on the tower 3 so we continue a new turn of the game
- //else the geme is finished
- if(numTour[i] != 3)
- break;
- i++;
- }
- if(i == *niveau)
- {
- counter(&(*niveau),&(*coups),&(*countTurns));
- disposeTour(&numTour,&(*niveau));
- printf("\n\nBravo vous avez gagner\n\n");
- //Special end when terminates the game in minimum of turns
- if(*countTurns-1 == *coups)
- {
- printf("\t\t*******************\n");
- printf("\t\t* *\n");
- printf("\t\t* You win in *\n");
- printf("\t\t* the minimum of *\n");
- printf("\t\t* %d coups *\n",(*coups));
- printf("\t\t* *\n");
- printf("\t\t*******************\n");
- }
- //menu replay
- do
- {
- printf("Voulez vous rejouez?\n\n");
- printf("0. NON\n");
- printf("1. OUI\n");
- *rejouer = lireLong();
- }
- while(*rejouer < 0 || *rejouer > 1);
- //exit the game if not replay the game
- if(*rejouer == 0)
- *conitnuer = 0;
- //get bak the discs to the first tower
- while(y < *niveau)
- {
- numTour[y]=1;
- y++;
- }
- *showLevel=1;
- }
- }
-
- /*
- This function ask with how much discs the player want to play
- and initialize the number minimum of turns to win
- @param niveau number of discs to play with
- @coups numbers of minimum turn to win
- //*/
- void level(int *niveau,int *coups)
- {
- //menu number of discs
- do
- {
- printf("Choisissez le nombre de palette:\n\n");
- printf("3. 3 Palettes\n");
- printf("4. 4 Palettes\n");
- printf("5. 5 Palettes\n");
- printf("6. 6 Palettes\n");
- printf("7. 7 Palettes\n");
- printf("8. 8 Palettes\n");
- *niveau = lireLong();
- if(*niveau < 3 || *niveau > 8)
- printf("\n\n\t\t----This answer is not in the menu----\n\n");
- }
- while(*niveau < 3 || *niveau > 8);
- //initialise the minimum number of turn to win
- switch(*niveau)
- {
- case 4:
- *coups=15;
- break;
- case 5:
- *coups=31;
- break;
- case 6:
- *coups=63;
- break;
- case 7:
- *coups=127;
- break;
- case 8:
- *coups=255;
- break;
- default:
- *coups=7;
- break;
- }
- }
-
- /*
- This function count and show the numbers of turn you done.
- @param niveau number of discs to play with
- @param coups number of minimum turns to win
- @param countTurns number of turns played
- //*/
- void counter(int *niveau,int *coups,int *countTurns)
- {
- printf("\n\nVous jouez avec %d Palettes.\n",*niveau);
- printf("Le jeu se joue en %d coups minimum\n",*coups);
- printf("Vous jouez votre %d coups\n\n",*countTurns);
- (*countTurns)++;
- }
-
- int main()
- {
- //welcome title
- printf("\t\tBienvenue au tour de Hannoi!\n\n");
- int conitnuer=1,rejouer=1,niveau=3,showLevel=1,coups=7;
- int numTour[8]={1,1,1,1,1,1,1,1},tourActuelle=1,newTour=1;
- int numMenu[3]={0,0,0},countTurns=0;
- while(rejouer)
- {
- regles();
- while(conitnuer)
- {
- if(showLevel)
- {
- level(&niveau,&coups);
- showLevel=0;
- countTurns=0;
- }
- counter(&niveau,&coups,&countTurns);
- disposeTour(&numTour,&niveau);
- recupere3firstNombre(&numTour,&numMenu,&niveau);
- menuChoosePalette(&numMenu,&tourActuelle);
- menuWhere(&tourActuelle,&numMenu,&newTour);
- deplacement(&tourActuelle,&numMenu,&numTour,&newTour);
- checkWin(&numTour,&rejouer,&conitnuer,&niveau,&showLevel,&coups,&countTurns);
- }
- }
- return 0;
- }
#include "lecture.h"
//Iteration of the functions
void regles();
void disposeTour(int numTour[],int *niveau);
void recupere3firstNombre(int numTour[],int numMenu[],int *niveau);
void menuChoosePalette(int numMenu[],int *tourActuelle);
void menuWhere(int *tourActuelle,int numMenu[],int *newTour);
void deplacement(int *tourActuelle,int numMenu[],int numTour[],int *newTour);
void checkWin(int numTour[],int *rejouer,int *conitnuer,int *niveau,int *showLevel,int *coups,int *countTurns);
void level(int *niveau,int *coups);
void counter(int *niveau,int *coups,int *countTurns);
/*
This function give you the menu of show rules
@param *pause stop the screen after showing the rules
//*/
void regles()
{
int rules=1;int pause=0;
do
{
printf("Voulez vous connaitre les regles du jeu?\n\n");
printf("0. NON\n");
printf("1. OUI\n");
rules=lireLong();
if(rules < 0 || rules > 1)
printf("Ce choix n'est pas dans le menu\n\n");
}
while(rules < 0 || rules > 1);
if(rules)
{
printf("Le jeu est composer de 3 tours disposer les unes a cotes des autres.\n");
printf("Au debut du jeu vous avez de 3 a 8 palettes sur la tour de gauche.\n");
printf("Le but du jeu est de toutes les deplacer sur la tour de droite.\n");
printf("Les palettes sont deplacable une par une.\n");
printf("Mais attention vous n'avez pas le droit de poser une palette plus grande sur une palette plus petite.\n");
printf("Donc dans la troisieme tour vous aurez vos palettes dans le meme ordre qu'au debut du jeu.\n");
printf("Bonne chance!\n\n");
pause=lireLong();
}
}
/*
This functions is generating the draws of the towers with the discs
@param int numTour[] it s a table from 3 to 8 numbers that each one correspond to one disc and each number give the tower where the disc is
@param int niveau give the number of disc you want to play with.
//*/
void disposeTour(int numTour[],int *niveau)
{
printf("Vos tours de Hannoi actuellement:\n\n");
printf("\tTOUR 1\t\tTOUR 2\t\tTOUR 3\n\n");
int i=0;
while(i < *niveau)
{
switch(i)
{
case 1:
if(numTour[i] == 1)
printf("\t******222******\t\t*\t\t*\n");
else if(numTour[i] == 2)
printf("\t*\t\t******222******\t\t*\n");
else
printf("\t*\t\t*\t\t******222******\n");
i++;
break;
case 2:
if(numTour[i] == 1)
printf("\t*****33333*****\t\t*\t\t*\n");
else if(numTour[i] == 2)
printf("\t*\t\t*****33333*****\t\t*\n");
else
printf("\t*\t\t*\t\t*****33333*****\n");
i++;
break;
case 3:
if(numTour[i] == 1)
printf("\t****4444444****\t\t*\t\t*\n");
else if(numTour[i] == 2)
printf("\t*\t\t****4444444****\t\t*\n");
else
printf("\t*\t\t*\t\t****4444444****\n");
i++;
break;
case 4:
if(numTour[i] == 1)
printf("\t***555555555***\t\t*\t\t*\n");
else if(numTour[i] == 2)
printf("\t*\t\t***555555555***\t\t*\n");
else
printf("\t*\t\t*\t\t***555555555***\n");
i++;
break;
case 5:
if(numTour[i] == 1)
printf("\t**66666666666**\t\t*\t\t*\n");
else if(numTour[i] == 2)
printf("\t*\t\t**66666666666**\t\t*\n");
else
printf("\t*\t\t*\t\t**66666666666**\n");
i++;
break;
case 6:
if(numTour[i] == 1)
printf("\t*7777777777777*\t\t*\t\t*\n");
else if(numTour[i] == 2)
printf("\t*\t\t*7777777777777*\t\t*\n");
else
printf("\t*\t\t*\t\t*7777777777777*\n");
i++;
break;
case 7:
if(numTour[i] == 1)
printf("\t888888888888888\t\t*\t\t*\n\n");
else if(numTour[i] == 2)
printf("\t*\t\t888888888888888\t\t*\n\n");
else
printf("\t*\t\t*\t\t888888888888888\n\n");
i++;
break;
default:
if(numTour[i] == 1)
printf("\t*******1*******\t\t*\t\t*\n");
else if(numTour[i] == 2)
printf("\t*\t\t*******1*******\t\t*\n");
else
printf("\t*\t\t*\t\t*******1*******\n");
i++;
break;
}
}
}
/*
This function save the numbers of the three discs of each tower that are the smallest (so the upper).
@param numTour[] view comments above
@param numMenu[] It is a table of 3 numbers that contain the number of the upper disc for each tower
@param niveau Number of dis you want to play with
//*/
void recupere3firstNombre(int numTour[],int numMenu[],int *niveau)
{
int i=0;
numMenu[0]=0;
numMenu[1]=0;
numMenu[2]=0;
//loop for the first tower
while(i < *niveau)
{
if(numTour[i] == 1)
{
numMenu[0]=i+1;
break;
}
i++;
}
//initialise the counter
i=0;
//loop for the second tower
while(i < *niveau)
{
if(numTour[i] == 2)
{
numMenu[1]=i+1;
break;
}
i++;
}
//initialise the counter
i=0;
//loop for the third tower
while(i < *niveau)
{
if(numTour[i] == 3)
{
numMenu[2]=i+1;
break;
}
i++;
}
}
/*
This function ask the player to choose the disc he want to move.
@param numMenu view comment above
@param tourActuelle it has the number of the tower where the disc the player want to move is.
//*/
void menuChoosePalette(int numMenu[],int *tourActuelle)
{
//initialise the counter to 1
int i=1;
do
{
printf("Quels palette voulez vous deplacer ?\n\n");
if(numMenu[0] != 0)
{
printf("1. palette numero %d.\n",numMenu[0]);
i++;
}
if(numMenu[1] != 0)
{
printf("2. palette numero %d.\n",numMenu[1]);
i++;
}
if(numMenu[2] != 0)
{
printf("3. palette numero %d.\n",numMenu[2]);
i++;
}
*tourActuelle = lireLong();
if(*tourActuelle < 1 || *tourActuelle > 3)
printf("Ce choix n'est pas dans le menu!\n\n");
}
while(*tourActuelle < 1 || *tourActuelle > 3);
}
/*
This function ask the player on wich tower he want to move the disc.
@param tourActuelle view comment above
@param numMenu[] view comment above
@param newTour save the number of the tour the player want to move his disc on
//*/
void menuWhere(int *tourActuelle,int numMenu[],int *newTour)
{
do
{
switch(*tourActuelle)
{
case 2:
printf("Sur quels tour voulez vous deplacer la palette numero %d ?\n\n",numMenu[1]);
printf("1. tour numero 1.\n");
printf("3. tour numero 3.\n");
break;
case 3:
printf("Sur quels tour voulez vous deplacer la palette numero %d ?\n\n",numMenu[2]);
printf("1. tour numero 1.\n");
printf("2. tour numero 2.\n");
break;
default:
printf("Sur quels tour voulez vous deplacer la palette numero %d ?\n\n",numMenu[0]);
printf("2. tour numero 2.\n");
printf("3. tour numero 3.\n");
break;
}
*newTour=lireLong();
if(*newTour < 1 || *newTour > 3)
printf("Ce choix n'est pas dans le menu\n\n");
}
while(*newTour < 1 || *newTour > 3);
}
/*
This function move the disc place as the player wanted.
@param tourActuelle view comment above
@param numMenu view commment above
@param numTour view comment above
@param newTour view comment above
//*/
void deplacement(int *tourActuelle,int numMenu[],int numTour[],int *newTour)
{
if(*tourActuelle == 1)
{
if(*newTour == 2)
{
if(numMenu[0] < numMenu[1] || numMenu[1] == 0)
numTour[numMenu[0]-1] = 2;
else
{
printf("Erreur, rappel: On ne peut deplacer une palette que sur une palette plus grande.\n\n");
}
}
else
{
if(numMenu[0] < numMenu[2] || numMenu[2] == 0)
numTour[numMenu[0]-1] = 3;
else
{
printf("Erreur, rappel: On ne peut deplacer une palette que sur une palette plus grande.\n\n");
}
}
}
else if(*tourActuelle == 2)
{
if(*newTour == 1)
{
if(numMenu[1] < numMenu[0] || numMenu[0] == 0)
numTour[numMenu[1]-1] = 1;
else
{
printf("Erreur, rappel: On ne peut deplacer une palette que sur une palette plus grande.\n\n");
}
}
else
{
if(numMenu[1] < numMenu[2] || numMenu[2] == 0)
numTour[numMenu[1]-1] = 3;
else
{
printf("Erreur, rappel: On ne peut deplacer une palette que sur une palette plus grande.\n\n");
}
}
}
else
{
if(*newTour == 1)
{
if(numMenu[2] < numMenu[0] || numMenu[0] == 0)
numTour[numMenu[2]-1] = 1;
else
{
printf("Erreur, rappel: On ne peut deplacer une palette que sur une palette plus grande.\n\n");
}
}
else
{
if(numMenu[2] < numMenu[1] || numMenu[1] == 0)
numTour[numMenu[2]-1] = 2;
else
{
printf("Erreur, rappel: On ne peut deplacer une palette que sur une palette plus grande.\n\n");
}
}
}
//*/
}
/*
Check if the player win the game. if Yes ask if he want to restart the game.
@param numTour view comment above
@param rejouer A boolean if true replay the game if false stop the game
@param continuer A boolean if true replay the game if false stop the game
@param niveau Numbers of discs the player play with.
@param showLevel A boolean if true (replay) so call the level function
@param coups numbers of turn minimum you need to win the game
@param countTurns numbers of turn you have done until now.
//*/
void checkWin(int numTour[],int *rejouer,int *conitnuer,int *niveau,int *showLevel,int *coups,int *countTurns)
{
int i=0, y=0;
while(i < *niveau)
{
//if one disc is not on the tower 3 so we continue a new turn of the game
//else the geme is finished
if(numTour[i] != 3)
break;
i++;
}
if(i == *niveau)
{
counter(&(*niveau),&(*coups),&(*countTurns));
disposeTour(&numTour,&(*niveau));
printf("\n\nBravo vous avez gagner\n\n");
//Special end when terminates the game in minimum of turns
if(*countTurns-1 == *coups)
{
printf("\t\t*******************\n");
printf("\t\t* *\n");
printf("\t\t* You win in *\n");
printf("\t\t* the minimum of *\n");
printf("\t\t* %d coups *\n",(*coups));
printf("\t\t* *\n");
printf("\t\t*******************\n");
}
//menu replay
do
{
printf("Voulez vous rejouez?\n\n");
printf("0. NON\n");
printf("1. OUI\n");
*rejouer = lireLong();
}
while(*rejouer < 0 || *rejouer > 1);
//exit the game if not replay the game
if(*rejouer == 0)
*conitnuer = 0;
//get bak the discs to the first tower
while(y < *niveau)
{
numTour[y]=1;
y++;
}
*showLevel=1;
}
}
/*
This function ask with how much discs the player want to play
and initialize the number minimum of turns to win
@param niveau number of discs to play with
@coups numbers of minimum turn to win
//*/
void level(int *niveau,int *coups)
{
//menu number of discs
do
{
printf("Choisissez le nombre de palette:\n\n");
printf("3. 3 Palettes\n");
printf("4. 4 Palettes\n");
printf("5. 5 Palettes\n");
printf("6. 6 Palettes\n");
printf("7. 7 Palettes\n");
printf("8. 8 Palettes\n");
*niveau = lireLong();
if(*niveau < 3 || *niveau > 8)
printf("\n\n\t\t----This answer is not in the menu----\n\n");
}
while(*niveau < 3 || *niveau > 8);
//initialise the minimum number of turn to win
switch(*niveau)
{
case 4:
*coups=15;
break;
case 5:
*coups=31;
break;
case 6:
*coups=63;
break;
case 7:
*coups=127;
break;
case 8:
*coups=255;
break;
default:
*coups=7;
break;
}
}
/*
This function count and show the numbers of turn you done.
@param niveau number of discs to play with
@param coups number of minimum turns to win
@param countTurns number of turns played
//*/
void counter(int *niveau,int *coups,int *countTurns)
{
printf("\n\nVous jouez avec %d Palettes.\n",*niveau);
printf("Le jeu se joue en %d coups minimum\n",*coups);
printf("Vous jouez votre %d coups\n\n",*countTurns);
(*countTurns)++;
}
int main()
{
//welcome title
printf("\t\tBienvenue au tour de Hannoi!\n\n");
int conitnuer=1,rejouer=1,niveau=3,showLevel=1,coups=7;
int numTour[8]={1,1,1,1,1,1,1,1},tourActuelle=1,newTour=1;
int numMenu[3]={0,0,0},countTurns=0;
while(rejouer)
{
regles();
while(conitnuer)
{
if(showLevel)
{
level(&niveau,&coups);
showLevel=0;
countTurns=0;
}
counter(&niveau,&coups,&countTurns);
disposeTour(&numTour,&niveau);
recupere3firstNombre(&numTour,&numMenu,&niveau);
menuChoosePalette(&numMenu,&tourActuelle);
menuWhere(&tourActuelle,&numMenu,&newTour);
deplacement(&tourActuelle,&numMenu,&numTour,&newTour);
checkWin(&numTour,&rejouer,&conitnuer,&niveau,&showLevel,&coups,&countTurns);
}
}
return 0;
}
Conclusion
C'est mon premier code en C donc je demanderais votre indulgence. Je m'attaque tres prochainement a la bibliotheque SDL. Donc j espere pouvoir creer des petits logiciels en fenetre prochainement. A bientot Astro
Historique
- 10 octobre 2009 10:35:54 :
- - Enlever la protection multiple sur main.c
- Enlever le parametre pause dans la functions regles
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Jeu de boite [ par simo2x ]
Il faut réaliser un petit jeu que je l' appele le jeu des boîtes. Ce jeu sejoue de la façon suivante:On commence par dessiner un certain nombre de poi
Aide tour de hanoi [ par wassimkr ]
J'aimerai savoir si il y a une autre que la recursive pour resoudre le hanoi?merci d'avance
Bomberman... en c++ [ par shukaku ]
Bonjour,Récemment j'ai reçu comme projet à réaliser en c++ un bomberman avec prise en charge graphique à l'aide de QT.Le problème, qui me viens à l'es
programmation du jeu d'échecs [ par danyx ]
bonsoir à tousvoila ma passion c'est de développer mon prog d'échecs (en C) . S'il y a des personnes qui désirent discuter de ce s
Créer un jeu vidéo... [ par Crepuscule3 ]
Bonjour à tous, J'ai quelques compétences en C/C++ et je souhaiterai apprendre à créer un jeu vidéo. Je sais... certains ne vont pas pouvoir s'empêc
tour de hanoi [ par houcem001 ]
salut je suis entrain de programmer le tour de hanoi mais j'ai un probleme au deplacement automatique des disques. je souhaite que les disques se dep
code source jeux GTK [ par polly19 ]
Bonjour, Voila mon problème est simple je cherche le code source d'un jeu ! http://www.jeuxflashonline.fr/Jeux/Pipe-line,165.html Ce genre de jeux,
Mode Multijoueur pour un jeux ?? [ par SnOOpss ]
Salut !!Est ce que quelqu'un connaitrait des site avec des tutoriaux pour programmer en DirectPlay pour convertir en jeu en multijoueur via internet.O
Question réseau [ par LordBob ]
Bonjour,en fait j'ai fait un petit jeu tout con et tout !!! mais pour qu'il est l'air moins con, bah je voudrais le rendre jouable sur le net... mais
cherche programmeur c++ pour jeu en ogl (effets graphiques, gui) [ par nemezis ]
bonjour ! je suis le chef de projet d'une petite équipe de passionnés de jeu de rôle, le but est de créer un jeu open source en c++ et opengl. L'espr
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
RE : SAC A DOS RE : SAC A DOS par hadjkaddour
Cliquez pour lire la suite par hadjkaddour
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|