Création
d'entreprise
Posez votre question Signaler

Au secour!!:Jeu d'allumette en language C

Rulliette - Dernière réponse le 9 avril 2010 à 14:29
Bonjour,
Alors je vais essayer de bien m'exprimer...:p
J'ai un gros problème...je suis actuellement étudiante en seconde année de physique chimie..Et j'ai aussi de la programmation impérative au programme...
Malheureusement pour moi c'est vraiment du chinois!!J'aurrai besoin d'aide pour réaliser un programme se nommant: 'la dernière du tas' , c'est un jeu d'allumettes.
Il faut que je crée entièrement le programme...ce qui me fait bien peur...vu le temps que il me reste...
J'ai peu d'idées pour créer ce programme. On nous donne le sujet suivant:
La donnée du programme en ligne de commande devra être le nombre maximal d'allumettes, ainsi que la mention du joueur qui commence (l'utilisateur ou bien votre programme).
Ensuite votre programme initialisera le nombre d'allumettes, puis engagera une boucle d'interaction avec l'utilisateur, terminée lorsqu'il ne reste plus aucune allumette. Le gagnant est alors celui qui n'a pas la main.
Un exemple d'exécution pourrait être le suivant :
> derniere
Usage : derniere <nb allumettes> <trait>
<nb allumettes> entier < 1000,
<trait> = u(tilisateur) ou p(rogramme)
> nim 16 p
Il y a 16 allumettes.
J'enlève 2 allumettes.
Il y a 14 allumettes.
Combien en enlevez-vous (entre 1 et 4) : 8
On vous demande un entier compris entre 1 et 4 !!!
Combien en enlevez-vous (entre 1 et 4) : 1
Il y a 13 allumettes.
J'enlève 1 allumette.
Il y a 12 allumettes.
Combien en enlevez-vous (entre 1 et 2) : 1
Il y a 11 allumettes.
J'enlève 2 allumettes.
Il y a 9 allumettes.
Combien en enlevez-vous (entre 1 et 4) : 1
Il y a 8 allumettes.
J'enlève 1 allumette.
Il y a 7 allumettes.
Combien en enlevez-vous (entre 1 et 2) : 2
Il y a 5 allumettes.
J'enlève 2 allumettes.
Il y a 3 allumettes.
Combien en enlevez-vous (entre 1 et 4) : 3
Il ne reste plus d'allumettes, vous avez gagne.
>
La forme de l'affichage est libre, pourvu qu'elle soit claire (il y aurait à redire sur l'exemple ci-dessus, mais je ne vais quand même pas faire votre travail !).
Remarquez le contrôle effectué lors de l'entrée par l'utilisateur : il est réalisé par la fonction de lecture d'un entier au clavier, lire_entier.

( nous n'avons pas besoin de creer la fonction de lecture d'un entier, il faut juste l'incrémenter dans le programme...)
J'aurrai bien aimer un petit peu d'aide de votre part!!
Merci d'avance a tous ceux qui peuvent m'aider!!!

Je ne suis pas desperée...mais presque...:p
Lire la suite 

Au secour!!:Jeu d'allumette en language C »

6 réponses
Réponse
+2
moins plus
Salut,

J'ai fait vite fait le squelette du programme. Il te reste quelques points à travailler :
Gestion du nombre d'allumettes par l'humain : entre 1 et 4, vérifier qu'il reste un nombre positif ou nul d'allumettes sur la table.
Gestion de l'IA, il existe une petite formule bien utile sur ce jeu, à base de modulo. Je te laisse réfléchir un peu ;)

#include <stdio.h>

void coup(int *nb_allumettes, int trait) {
    int nb; 
    
    if(trait==0){
        printf("Combien en prenez-vous : ");
        scanf("%d",&nb);
    }
    else{
        nb=1;
        printf("J'en prends %d\n",nb);
    }
    *nb_allumettes-=nb;
}



int main(int argc, char **argv) {
    
    int nb_allumettes;
    int trait;
    
    if(argc != 3) {
            puts("nim nombre tour");
            exit(-1);
    }
    
    nb_allumettes=atoi(argv[1]);
    trait=argv[2][0]=='p'?0:1;
    while(nb_allumettes > 0) {
                        coup(&nb_allumettes,trait);
                        printf("Il en reste %d.\n",nb_allumettes);
                        trait=(trait+1)%2; 
    }
    if(trait==0)
        puts("Vouz gagnez !");
    else
        puts("Je gagne !");
    
    system("pause");
    
    return 0;
}



Je reste à ta disposition, si tu as besoin d'aide ;)
Ajouter un commentaire
Réponse
+0
moins plus
Selon ton niveau de désespoir et de dévotion je pourrais t'aider :p

Par contre je vais pas tout faire et en particulier l'IA. D'autant que ça risque de ce voir si tu fais un programme parfait ^_^

Donne moi l'algorithme de l'IA et je fais le reste. J'entends par là à partir de combien d'allumettes restantes l'IA est sure de gagner, et la routine à appliquer.

Pour le reste le programme est une simple boucle while tant qu'il reste des allumettes on demande tour a tour au joueur à l'IA d'en enlever.
rulliette- 29 nov. 2007 à 23:25
Oulala...ca parle encore bien chinois pour moi...j'ai meme eu du mal a comprendre ce que voulais dire IA..mais c'est bon..j'y suis tout de meme arrivé!
Alors pour ce qui est de l'algorithme de l'IA je sais juste que lorsque il ne reste que 5 allumettes alors l'ordinateur gagne a coup sur!...pour ce qui est du reste..
J'ai peu etre oublier de dire que je n'étais pas une fleche non plus en infomatique!Mais je crois que ca peu aussi se voir!
En tout cas merci pour ton aide!
Pour le reste du programme...je crois avoir compris qq petits trucs...mais alors je ne suis vraiment pas sure...
Il me manque surtout les fonctions qui se trouvent avant ma fonction main!Et du coup je ne sais pas forcement quelles bibliothèques de données utiliser...
Ps: le jour ou je ferai un programme parfait le monde entier le sera ^^
Ajouter un commentaire
Réponse
+0
moins plus
voila j'ai attaqué le programme pour le jeu des allumettes ne connaissant que tres peu la prog ce n'est pas au point mais ca pourré etre simpa bref!!si vous avez des idées j'ai un problemes je n'ai pas reussi a bloqué les coup entre 1 et 3 par exemple si je tape le nombre d'allumettes quil reste je gagne théoriquement il doit resté une allumettes et celui qui a la main perd !!!voila



#include<stdio.h>

#define ORDI 0
#define HUMAIN 1

main()
{
int coup, pos, joueur;

printf("combien d'allumettes : ");
scanf("%i", &pos);
printf("Qui commence (%i pour l'ordi, %i pour vous) : ",ORDI, HUMAIN);
scanf("%i", &joueur);

while(pos!=0)
{
if (joueur == ORDI)
{
coup = pos%7;
if (coup == 0) coup = 1;
printf("Il y a %i allumettes, j en enleve %i.\n", pos, coup);
}
else
{
printf("Il y a %i allumettes. Votre coup svp : ", pos);
scanf("%i", &coup);

}
pos = pos - coup;
joueur = !joueur;
}

if (joueur == ORDI) printf("Vous avez gagne !\n");
else printf("Vous avez perdu...\n");

return 0;
}
Dj Clyme - 29 avril 2008 à 14:32
Ceci est le code source du projet jeu d'allumetes que j'avais a rendre le tas de depart est de 21 allumettes et chaque joueur peut en retirer 1, 2 ou 3, le choix du joueur qui commence est "pseudo aleatoire". L'ensemble de ce code est parfaitement juste "normalement". Je le met à disposition pour que les feignant de base le recopie entierement et que les élèves consciencieux ne tire seulement les techniques qu'ils n'avaient pas trouver.
Le travail avant tout et la musique apres...
Bonne continuation a vous tous.
DJ Clyme







#include<stdio.h>
#include<math.h>
#include<time.h>/*Nous incluons cette bibliotheque car elle permet l'acces de visual a l'horloge de l'ordinateur.*/
#include <stdlib.h> /*Nous incluons cette bibliotheque car elle contient la fonction random>> rand()*/

int main ( void )
{
int tas,n,y,b;

srand( (unsigned)time( NULL ) ); /*La fonction srand se base sur l'horloge interne du processeur
au moment du demarrage du programme ce qui
permet la creation d'une fonction pseudo
aleatoire plus realiste; car apres l'elaboration de notre programme
nous nous sommes rendu compte que c'est le choix du joueur
debutant la partie qui conditionnait l'issue de la partie.*/

/*########################################################################################*/

tas=21;


/*########################################################################################*/
/*Partie qui contient le choix "pseudo aléatoire" du joueur qui debutera*/



do
{
y=rand();

}
while(y>1); /*Comme la fonction rand ne fournit que des entiers et que la condition est y>1,
les deux seules valeurs sont 0 ou 1, c'est en quelques sortes un generateur
pseudo aleatoire de 0 ou de 1.*/
/*#####################################################################################*/


if (y==1) /* Comme il n'y a que deux possibilités ( 0 ou 1) il y
a autant de chances que le joueur commence que l'ordinateur.(normalement)*/
{
printf("Le joueur humain debutera la partie.\n");
goto debuthumain;
}
if (y==0)
{
printf("L'ordinateur debutera la partie.\n");
goto debutordi;
}
/*#####################################################################################*/


do
{
debuthumain:
do
{
printf("Combien d'allumettes le joueur veut il retirer ?\n");
scanf("%d",&n);
}
while ((n!=1)^(n!=2)^(n!=3));


b=0; /*b est le bit de jeu qui defini a chaque instant
le dernier joueurce qui nous permettra a la in de
definir le gagnant et le perdant.*/
tas=(tas-n);


/*Verification du tas d'allumettes apres chaque tour*/

if((tas==1)&(b==0))
goto fingagne;
else if((tas==1)&(b==1))
goto finperdu;


printf("Il reste %d allumettes dans le tas.\n\n",tas);
printf("Au tour de l'ordinateur...\n");




debutordi:


if (tas<5) /*On sait que le joueur qui doit jouer alors que le tas
d'allumettes est a 5 va obligatoirement perdre si l'adversaire
n'est pas trop stupide,donc il suffit de continuer ce
raisonnement en intuitant le nombre d'allumettes du tas sur
lequel "On ne doit pas tomber".C'est a dire les
nombres 5, donc >>9 donc >> 13 >> 17 >> 21. Cela
veut aussi dire que celui qui commence NE peut PAS gagner
SI ET SEULEMENT SI l'adversaire joue bien.*/

n=(tas-1); /*Inversement si l'on ne commence pas il suffit de
suivre une methode simple pour s'assurer la victoire,
voila ce que realise l'ordinateur.*/
if ((tas<9)&(tas>5))
n=(tas-5);
if ((tas<13)&(tas>9))
n=(tas-9);
if ((tas<17)&(tas>13))
n=(tas-13);
if ((tas<21)&(tas>17))
n=(tas-17);
if (tas==21)
n=1; /*On sait que si l'ordinateur commence c'est
a dire tas=21 et que le joueur
joue bien la partie sera perdu par l'ordinateur,
c'est pour ca que nous definissons arbitraitrement
car cela ne changera en rien le futur du jeu.*/






printf("L'ordinateur retire %d allumettes.\n\n",n);


b=1; /*Marqueur de "dernier joueur a avoir retire une ou
plusieurs allumettes ce qui nous servira a la fin pour afficher le vainqueur.*/

tas=(tas-n); /*Mise a jour du tas d'allumettes*/

printf("Il reste %d allumettes dans le tas.\n\n",tas);

/*Verification du tas d'allumettes apres chaque tour*/

if((tas==1)&(b==0))
goto fingagne;
else if((tas==1)&(b==1))
goto finperdu;

}


while (tas>1);

fingagne:
printf("Seul un joueur experimente peut gagner, en ayant eu la chance de ne pas debuter la partie :-)");
goto fin; /*Ceci est un moyen simple de rapide d'eviter l'affichage des deux
printf sans effectuer de IN CASE ou IF ELSE IF.*/

finperdu:
printf("Desole vous avez perdu,\n notre programme est sans faille ou presque ...\n\n\n\n");
fin:
printf("Ce devoir est aussi la preuve que les projets revelent mieux une capacité d'analyse ");
printf("et de reflexion qu'un simple devoir surveille bourres de definitions.....\n\n");
return 0;
}
Ajouter un commentaire
Réponse
+0
moins plus
cai bien
Ajouter un commentaire
Ce document intitulé « Au secour!!:Jeu d'allumette en language C » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?