JeuWeb - Crée ton jeu par navigateur
TP: sur le C - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : TP: sur le C (/showthread.php?tid=5078)



TP: sur le C - Dark-Slade - 12-08-2010

Salut , alors je me suis mis au c et y a un tp de faire un jeu plus ou moins sur le sdz et je l'ai grandement améliorer , malheureusement y a un p'tit hic , voyez par vous même :

Code PHP :
<?php 
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
int main()
{
int max=0, min=1;
int modechoix=0, niveauchoix=0;
int compteur=0;
int nombremystere=0;
int nbutilisateur=0;
int continuerpartie=0;
srand(time(NULL));
do
{
compteur=0;
printf("Salut , te voila dans le jeu Plus ou moins !\n");
printf("1: Mode un seul joueur\n");
printf("2: Mode multijoueur\n");
do
{
printf("Entrez le mode de joueur desirez ! :\n ");
scanf("%d",&modechoix);
switch(
modechoix)
{
case
1:
{
printf("1: Niveau Amateur 1 a 50 !\n");
printf("2: Niveau Facile 1 a 100 !\n");
printf("3: Niveau Normale 1 a 200 !\n");
printf("4: Niveau Difficile 1 a 400 !\n");
printf("5: Niveaux Commando , surprisee !\n ");
do
{
printf("Entrer le niveau:");
scanf("%d",&niveauchoix);
switch(
niveauchoix)
{
case
1:
{
max=50 , min=0;
srand(time(NULL));
nombremystere=(rand()%(max-min+1))+min;
} break;
case
2:
{
max=100;
nombremystere=(rand()%(max-min+1))+min;
} break;
case
3:
{
max=200;
nombremystere=(rand()%(max-min+1))+min;
} break;

case
4:
{
max=400 , min=1;
nombremystere=(rand()%(max-min+1))+min;
} break;
case
5:
{
max=1000 , min=1;
}
default:
printf("choix invalide\n");
break;
}
} while(
niveauchoix!=1 && niveauchoix!=2);
do
{
compteur++;
printf("Entrer un nombre:");
scanf("%d",&nbutilisateur);
if(
nbutilisateur>nombremystere)
printf("c'est plus !\n");
else if(
nbutilisateur<nombremystere)
printf("c'est moins !\n");
else
printf("vous avez trouve la bonne reponse qui etait %d en :%d coups ",nombremystere ,compteur);
} while(
nbutilisateur!= nombremystere);
do
{
printf("Vous voulez rejouer: 1:Oui 2:Non \n");
scanf("%d",&continuerpartie);
switch(
continuerpartie)
{
case
1:
continuerpartie=1;
break;
case
2:
continuerpartie=0;
break;
default:
printf("Merci d'entrer un choix valide");
break;
}
} while(
continuerpartie!=1 && continuerpartie!=2 && continuerpartie!=0);
} break;
case
2:
{
printf("bienvenue dans le mode multijoueur:\n");
printf("entrer le nombre Mystere:");
scanf("%d",&nombremystere);
do
{
printf("Entrer un nombre:");
scanf("%d",&nbutilisateur);
compteur++;
if(
nbutilisateur>nombremystere)
printf("c'est plus !\n");
else if(
nbutilisateur<nombremystere)
printf("c'est moins !\n");
else
printf("vous avez trouve la bonne reponse qui etait %d en :%d coups ",nombremystere ,compteur);
} while(
nbutilisateur!=nombremystere);
do
{
printf("Vous voulez rejouer: 1:Oui 2:Non \n");
scanf("%d",&continuerpartie);
switch(
continuerpartie)
{
case
1:
continuerpartie=1;
break;
case
2:
continuerpartie=0;
break;
default:
printf("Merci d'entrer un choix valide\n");
break;
}
} while(
continuerpartie!=1 && continuerpartie!=2 && continuerpartie!=0);

} break;
default:
printf("choix invalide");
} break;
} while (
modechoix!=1 && modechoix!=2);

} while(
continuerpartie!=0);
return
0;
}

Alors , au début sa fait choisissez le mode , vous tapez 1 , puis le niveau tapez 1 aussi , puis voila le problème vous faites par exemple 0 sa fait "c'est moins ", vous faites -15255415 sa fait"c'est moins" , vous faites 3 sa fait " c'est plus" je vois pas du tout ou est le problème alors merci de m'aider ^^

EDIT:Sa me le fait aussi sur le mode multi joueur :/


RE: TP: sur le C - Foxglove - 13-08-2010

Je n'ai pas encore localisé le problème que tu décris, mais il y a plusieurs autres problèmes :
- le code est très dur à lire, et notamment les switch/case, il faudrait que tu découpes en fonctions par exemple
- il y a beaucoup de code dupliqué, il faut l'éviter en général
- il faut faire "srand(time(NULL))" une seule fois dans le programme, pas plusieurs fois
- dans le "case 5" du "monojoueur", tu as oublié de mettre à jour la variable "nombremystere" (en fait, il faudrait factoriser l'affectation après le switch)
- pourquoi tu remets des fois "min" à 1 et des fois à 0 ?
- compteur devrait être réinitialisé à 0 avant chaque partie
- tu utilises l'opérateur "," pour affecter "max" et "min", mais a ta place, je séparerais plutôt les deux instructions

(12-08-2010, 11:50 PM)Dark-Slade a écrit : case 1: {
max=50 , min=0;
nombremystere=(rand()%(max-min+1))+min;
} break;

A cet endroit, si tu affiches la valeur de "max", de "min" et la valeur de "nombremystere", tu devrais voir immédiatement ce qui pose problème.

Si tu ne trouves pas, peux-tu recoller une version allégée du programme (qui ne marche pas) ? Un programme où tu n'as pas le mode multijoueur, et où tu n'as pas de choix du niveau de difficulté.


RE: TP: sur le C - Dark-Slade - 13-08-2010

Sans amélioration sa donne :

Code PHP :
<?php 
/*
#include <stdio.h>
#include <stdlib.h>
#include <time.h>


int main ( int argc, char** argv )
{
int nombreMystere = 0, nombreEntre = 0;
const int MAX = 100, MIN = 1;


srand(time(NULL));
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;


do
{
// On demande le nombre
printf("Quel est le nombre ? ");
scanf("%d", &nombreEntre);

// On compare le nombre entré avec le nombre mystère

if (nombreMystere > nombreEntre)
printf("C'est plus !\n\n");
else if (nombreMystere < nombreEntre)
printf("C'est moins !\n\n");
else
printf ("Bravo, tu as trouve le nombre mystere qui etait %d !!!\n\n",nombreMystere);
} while (nombreEntre != nombreMystere);

}

Comment faire pour ne pas copier toujours les codes ?
Je n'ai pas encore appris les fonctions :p


RE: TP: sur le C - Plume - 13-08-2010

Je pense que popayan a mis le doigt sur le problème.
(13-08-2010, 09:07 AM)popayan a écrit :
Code :
if(nbutilisateur>nombremystere)
  printf("c'est plus !\n");
else if(nbutilisateur<nombremystere)
  printf("c'est moins !\n");

Si ton nombre utilisateur est supérieur au nombre à trouver, c'est moins qu'il faut afficher?