begin process at 2012 05 27 21:00:07
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Jeux

 > TOUR DE HANOI EN C

TOUR DE HANOI EN C


 Information sur la source

Note :
Aucune note
Catégorie :Jeux Classé sous :Hanoi, Tour, Tours, Jeu, Jeux Niveau :Débutant Date de création :08/10/2009 Date de mise à jour :10/10/2009 10:35:53 Vu / téléchargé :4 949 / 373

Auteur : astro53

Ecrire un message privé
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

 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

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 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

Source avec Zip LIBRAIRIE LANGUAGES
Source avec Zip JEU: MARIO SOKOBAN

 Sources de la même categorie

Source avec Zip Source avec une capture JEU DES CARTES par eapaceinfo
PROGRAMME DE JEU DE MPT par KerizGarmm
Source avec Zip Source avec une capture JEUX SERPENT par antho974
Source avec Zip Source avec une capture PENDU EN SDL par Damsou91
Source avec Zip STATE MACHINE MODIFICATION MATH BUCKHAM par billybones79

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture BASE/MOTEUR 3D EN QT/OPENGL (COMPLET ET FONCTIONNEL!) POUR U... par envi33
Source avec Zip PUCKMAN PROJET C GEII par aurelbo
Source avec Zip JEU: MARIO SOKOBAN par astro53
Source avec Zip JEU PENDU + GRAPH par kaibacom
Source avec Zip Source avec une capture AZTEC TOWER par nisaloncaje

Commentaires et avis

Commentaire de Matt67 le 10/10/2009 08:53:46

Bonjour,

Deux, trois remarques pour commencer :

La protection contre les inclusions multiples se fait au niveau des fichiers d'entêtes donc les #ifdef, #define et #endif n'ont rien à faire ici.

Pourquoi passes tu un paramêtre à la fonction regles ?

En général, pourquoi passes tu tous tes paramêtres par référence ?
Par exemple dans la fonction counter, tu passes tes paramêtres par valeur et tu retournes countTurns.

IL faudrait aussi que tu mets tous les fichiers pour pouvoir compiler et le tester, ça serait bien...

Matt...

Commentaire de astro53 le 10/10/2009 09:53:58

Salut Matt67,

Tout dabord merci pour ton commentaire.

Je vais enlever les protections dans les fichiers.c Mais pourquoi il ne peut pas y avoir d inclusion multiple dans un fichier.c?

Pour la fonction regles tu as raisons il n y a pas besoin de ce parametre. Je vais l'enlever.

Je passe mes parametres par reference parce que dans des fonctions je vais modifier plus d une variables et comme je veux les reutiliser dans une fonction suivante avec les nouvelles valeurs je ne peut pas le faire en utilisant les valeurs et return. Mais je suis sur qu il doit y avoir des fonctions ou je peut le faire avec valeur et return.

J ai telecharger ces trois fichiers a partir d'un ordinateur ou je n ai pas ecris le jeu j ai ouvert code::blocks et je les ai compiler sans aucun souci.
Quels fichiers veut tu que je rajoute?

A bientot
Astro

Commentaire de Matt67 le 14/10/2009 06:19:53

Bonjour,

Je n'avais pas vu le zip, désolé...
Il ne peut pas y avoir d'inclusion multiple dans un .c car tu n'inclus jamais un .c mais seulement des .h

Bonne continuation,

Matt...

Commentaire de astro53 le 14/10/2009 06:51:37

Salut Matt67,

Merci pour ton explication.
Bonne continuation a toi aussi.

A bientot
Astro

Commentaire de meksoft002 le 20/10/2009 00:10:28

passer par des fonctions récursives économisera enormément !!

Commentaire de astro53 le 20/10/2009 06:51:00

Salut MEKSOFT002,

Pourrais tu m'expliquer ce que sont des fonctions recursives et peut etre me donner un exemple?
En meme temps pourrais tu developpez l idee que tu as par rapport a ma source?

Merci
A bientot
Astro

 Ajouter un commentaire


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 &#224; tousvoila ma passion c'est de d&#233;velopper mon prog d'&#233;checs (en C) . S'il y a des personnes qui d&#233;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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,749 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales