Programmation/ Langage C

Résolu/Fermé
Signaler
Messages postés
71
Date d'inscription
dimanche 5 juillet 2009
Statut
Membre
Dernière intervention
14 octobre 2009
-
Messages postés
105
Date d'inscription
dimanche 28 juin 2009
Statut
Membre
Dernière intervention
28 mars 2014
-
Bonjour,
Ou plutôt Bonsoir :) !

Je suis en train d'apprendre a programmer en C, j'ai commencé hier soir, et j'ai a l'esprit quelque questions !
Pour le moment le seul programme que j'ai réaliser est le jeu du Plus ou moins (connut !). Je précise que j'utilise l'IDE Code::Blocks sous Windows XP Ed. Familial.

Je voudrais alors savoir :

1) Comment changer les couleur de police et d'arrière plan de la console MS-DOS dans un programme en C.

2) Savoir comment mettre sur mon Bureau un raccourcis de l'exécutable de mon programme.


EDIT : J'ai trouver, c'est dans bin/debug/etvoila. mais lorsque je lance l'exe et que je fini le jeu (gagné ou perdu), dès que le programme lit l'instruction "return 0;" la fenêtre se ferme instentanément, du coup on ne peut même pas voir si j'ai gagné ou perdu..why ? Ne peut-on pas m'être "pause" comme en batch ?



3) Et dernièrement (pour l'instant :p ), comment créer une instruction qui propose de recommencer une partie (Rejouer).

Toutes mes questions concerne ce code source :

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

int main()
{
int choixMenu;
int nombreMystere = 0;
int essaie = 0;
int nombreDessai = 10;
int nombreDevine = 0;
int MAX = 0, MIN = 0;
int LOTO = 0;
int maxL = 0, minL = 0;
int nombreDessaiH = 1;

printf( "\t\t\t\t=== MENU ===\n\n\n" );
printf( "\n 1.Niveau debutant\n" );
printf( "\n 2.Niveau intermediaire\n" );
printf( "\n 3.Niveau expert\n" );
printf( "\n 4.Loto !\n" );
printf( "\n 5.Mode HARD\n");
printf( "\n\n Votre choix ?\n Entrez le chiffre correspondant : " );
printf( "\n" );
scanf( "%d", &choixMenu);
printf("\n");

switch (choixMenu)

{


    //-----------------------------------------------------------------------------------------------------------



    case 1:
    MAX = 100, MIN = 1;
    printf( "\n Vous avez choisit debutant, le nombre mystere est compris entre 1 et 100\n" );
    srand (time(NULL));
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
printf ("\nDevinez le nombre mystere ! Vous possedez 10 essaie\n\n");

while (nombreDessai > 0)
{
    scanf ("%d" , &nombreDevine);
    if (nombreMystere> nombreDevine) { printf("Plus !\n"); nombreDessai-- ; essaie++ ; }
    if (nombreMystere< nombreDevine) { printf("Moins !\n"); nombreDessai-- ; essaie++ ; }
    if (nombreMystere!= nombreDevine) { printf("Il ne vous reste que %d essaie!\n", nombreDessai); }
    if (nombreMystere == nombreDevine) { printf("Felicitations ! Vous gagnez en %d coup !\n\n", essaie); return 0; }
}
printf("\t\t\t\tVous avez perdu !\n\n");

    return 0;
    break;



    //-----------------------------------------------------------------------------------------------------------



    case 2:
MAX = 250, MIN = 1;
    printf( "\n Vous avez choisit intermediaire, le nombre mystere est compris entre 1 et 250\n" );
    srand (time(NULL));
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
printf ("\nDevinez le nombre mystere ! Vous possedez 10 essaie\n\n");

while (nombreDessai > 0)
{
    scanf ("%d" , &nombreDevine);
    if (nombreMystere> nombreDevine) { printf("Plus !\n"); nombreDessai-- ; essaie++ ; }
    if (nombreMystere< nombreDevine) { printf("Moins !\n"); nombreDessai-- ; essaie++ ; }
    if (nombreMystere!= nombreDevine) { printf("Il ne vous reste que %d essaie!\n", nombreDessai); }
    if (nombreMystere == nombreDevine) { printf("Felicitations ! Vous gagnez en %d coup !\n\n", essaie); return 0; }
}
printf("\t\t\t\tVous avez perdu !\n\n");

    return 0;
    break;



    //-----------------------------------------------------------------------------------------------------------



    case 3:
MAX = 500, MIN = 1;
    printf( "\n Vous avez choisit expert, le nombre mystere est compris entre 1 et 500\n" );
    srand (time(NULL));
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
printf ("\nDevinez le nombre mystere ! Vous possedez 10 essaie\n\n");

while (nombreDessai > 0)
{
    scanf ("%d" , &nombreDevine);
    if (nombreMystere> nombreDevine) { printf("Plus !\n"); nombreDessai-- ; essaie++ ; }
    if (nombreMystere< nombreDevine) { printf("Moins !\n"); nombreDessai-- ; essaie++ ; }
    if (nombreMystere!= nombreDevine) { printf("Il ne vous reste que %d essaie!\n", nombreDessai); }
    if (nombreMystere == nombreDevine) { printf("Felicitations ! Vous gagnez en %d coup !\n\n", essaie); return 0; }
}
printf("\t\t\t\tVous avez perdu !\n\n");

    return 0;
    break;



    //-----------------------------------------------------------------------------------------------------------



    case 4:
    maxL = 47, minL = 1;
    MAX = 1000, MIN = 1;
    printf( "\n\n\tVous avez choisit le mode LOTO\n\nVous possedez un nombre aleatoire d'essaie !\nLe nombre mystere est compris entre 1 et 1000\n" );
    srand (time(NULL));
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
LOTO = (rand() % (maxL - minL + 1)) + minL;
printf ("\nDevinez le nombre mystere ! Vous possedez %d essaie\n\n", LOTO);
while (LOTO > 0)
{
    scanf ("%d" , &nombreDevine);
    if (nombreMystere> nombreDevine) { printf("Plus !\n"); LOTO-- ; essaie++ ; }
    if (nombreMystere< nombreDevine) { printf("Moins !\n"); LOTO-- ; essaie++ ; }
    if (nombreMystere!= nombreDevine) { printf("Il ne vous reste que %d essaie!\n", LOTO); }
    if (nombreMystere == nombreDevine) { printf("Felicitations ! Vous gagnez en %d coup !\n\n", essaie); return 0; }
}
printf("\t\t\t\tVous avez perdu !\n\n");

    return 0;
    break;



    //-----------------------------------------------------------------------------------------------------------



    case 5:
MAX = 100, MIN = 1;
    printf( "\n Vous avez choisit le mode HARD\nLe nombre mystere est compris entre 1 et 100\nEt vous n'avez que un seul essaie !\n" );
    srand (time(NULL));
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
printf ("\nDevinez le nombre mystere ! Vous possedez 1 essaie\n\n");

while (nombreDessaiH > 0)
{
    scanf ("%d" , &nombreDevine);
    if (nombreMystere> nombreDevine) { printf("Plus !\n"); nombreDessaiH-- ; essaie++ ; }
    if (nombreMystere< nombreDevine) { printf("Moins !\n"); nombreDessaiH-- ; essaie++ ; }
    if (nombreMystere!= nombreDevine) { printf("Il ne vous reste que %d essaie!\n", nombreDessaiH); }
    if (nombreMystere == nombreDevine) { printf("Felicitations ! Vous gagnez en %d coup !\n\n", essaie); return 0; }
}
printf("\t\t\t\tVous avez perdu !\n\n");

    return 0;
    break;


    //-----------------------------------------------------------------------------------------------------------






    default:
    printf( "\n Vous n'avez pas rentre un nombre correct, vous ne voulez pas jouez c'est ca !!?" );
    break;



    printf( "\n\n");
}
return 0;

//-----------------------------------------------------------------------------------------------------------
}

 


Merci beaucoup !

Cordialement,
Dark-beta69.

PS : Quelqu'un peut m'expliquer ces instructions :
 srand (time(NULL));
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;


On me les as données, j'ai compris comment les réutiliser, mes je ne sais pas ce quelles signifient.

Merci encore !

9 réponses

Messages postés
105
Date d'inscription
dimanche 28 juin 2009
Statut
Membre
Dernière intervention
28 mars 2014
8
salut
alors en ce qui concerne la couleur tu doit utilser system("color 80") : ici j'ai mis 80 pour du gris ou du noir je sais plus, mais si tu veu savoir quel couleur iil faut utiliser il te suffit d'aller dans paint dans l'outil pou les couleurs. tu regles ta couleur a partir des couleurs primaires RGB (exemple R=0, V=0, B=0, la tu aura du noir).
en ce qui concerne le'instruction pour recommencer une partie ben je te propose de faire:
printf(" Voulez vous faire une autre partie?\n");
printf("oui(1) ou non(2)");
scanf("%d", &reponse);
fflush(stdin);
if(reponse==OUI)
{
system("cls"); // cette commande sert a effacer la console => pas de traces de la partie précedentes.
main();
}
le principe ici est de revenir au main de ton programme donc de le recommencer.. si il ya des trucs pas clair dis le moi
a+
2
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 803
Salut,
Attention :
fflush(stdin);
Ca ne s'utilise pas, cela a un comportement indéterminé.
0
Messages postés
105
Date d'inscription
dimanche 28 juin 2009
Statut
Membre
Dernière intervention
28 mars 2014
8 >
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016

excuse moi pour le fflush(stdin), j'ai juste fait un copier/coller de l'un de mes programmes et j'ai oublié de l'enlevé.
A+
PS : cela à un comportement indéterminé s'il est mal utilisé :)
0
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 803 >
Messages postés
105
Date d'inscription
dimanche 28 juin 2009
Statut
Membre
Dernière intervention
28 mars 2014

Je t'excuse ;-)).

PS : cela à un comportement indéterminé s'il est mal utilisé :)
Non ! Cela a un comportement indéterminé dès que tu l'utilises. fflush ne pas pas être utilisé sur une entrée. Juste sur les sorties.
0
Messages postés
105
Date d'inscription
dimanche 28 juin 2009
Statut
Membre
Dernière intervention
28 mars 2014
8 >
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016

Oukey!!
Moi je l'avais utiliser a cause du scanf parceque j'ai créer un petit morpion (juste a la console) et si j'avais pas mis le fflush, je me retrouvais à devoir taper 2 fois les coordonnées de mon point pour qu'il puisse se placer.
On m'a expliqué pourquoi et on m'a dit comment ! lol
A+
0
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 803 >
Messages postés
105
Date d'inscription
dimanche 28 juin 2009
Statut
Membre
Dernière intervention
28 mars 2014

Si tu souhaites vider le buffer clavier, il faut utiliser : int c; while((c=getchar())!='\n' && c!=EOF);

Cela t'évitera que le '\n' provoqué lors de ta validation soit pris en compte dans la prochaine lecture clavier.
0
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 803
Salut,
Les booléens n'existent qu'en norme C99. Il faut inclure le header stdbool.h et le type est _Bool.
En C89, il est d'usage de se créer son type avec des directives préprocesseurs #define.

Mais bon, on peut très bien utiliser des int pour stocker un 0 ou un 1. Ce ne sont pas des booléens mais des int. Mais à moins de faire de l'embarqué cela n'est absolument pas gênant.

Pour ce qui est de la génération d'un pseudo-aléatoire, il se fait dans tous les cas entre 0 et RAND_MAX.
C'est à toi de faire une règle de trois (et non un modulo sous peine de ne pas avoir une répartition équiprobable) suivi d'une translation (soustraction ou addition) pour obtenir un nombre dans l'ensemble désiré.
2
Messages postés
105
Date d'inscription
dimanche 28 juin 2009
Statut
Membre
Dernière intervention
28 mars 2014
8
Re.
Dis moi fiddy j'ai cru comprendre que la biliothèque conio.h n'existait pas sous linux. A la place il ya un truc comme "[n]curses, si tu as une doc ou un lien qui puisse me fournir les fonctions de cette bibliothèque, cela me servirait beaucoup. A+
0
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 803 >
Messages postés
105
Date d'inscription
dimanche 28 juin 2009
Statut
Membre
Dernière intervention
28 mars 2014

Oui conio.h n'existe pas sur linux.
Tu peux utiliser ncurses sous Linux : http://www.faqs.org/docs/Linux-HOWTO/NCURSES-Programming-HOWTO.html

Cdlt
0
Messages postés
105
Date d'inscription
dimanche 28 juin 2009
Statut
Membre
Dernière intervention
28 mars 2014
8 >
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016

merci ;)
0
Messages postés
105
Date d'inscription
dimanche 28 juin 2009
Statut
Membre
Dernière intervention
28 mars 2014
8
re :)
en ce qui concerne le fait que la console lise l'instruction return 0 et que la fenètre se ferme :
system("pause"); juste avant le return 0;
sa va stopper la lecture du programme ( sans effacer la console ne t'inquiete pas) et sa va le reprendre quand tu appuira sur une touche.
Voila pour le ptit plus lol :)
1
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 803
Salut,

Alors le mieux pour les couleurs est l'utilisation des API : https://openclassrooms.com/fr/courses Evite d'utiliser la solution avec system, ce n'est vraiment pas top.

Pour reprendre ton programme, tout ceci est question de boucle. Tu peux faire un do while (rep=='o'); en demandant juste avant le while à l'utilisateur de rentrer o/n s'il souhaite continuer ou non.

Pour le raccourci, tu fais clique droit sur ton programme : envoyer vers, bureau (créer un raccourci).

cdlt
1
Messages postés
105
Date d'inscription
dimanche 28 juin 2009
Statut
Membre
Dernière intervention
28 mars 2014
8
tu va croire que je suis collant :)

PS : Quelqu'un peut m'expliquer ces instructions :

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

en faite c'est une fonction hasard. la premiere ligne sert a initialiser le timer. et la seconde utilise la notion de modulo qui serait un peu compliquer à t'expliquer dans ce message ( à cette heure ci lol), mais je te file un exemple pour comprendre.
Je veux avoir un nombre au hasard entre 0 et 1 :
int i;
srand(time(0));
i=rand()%2+0;
return i;
ici "i" sera soit égal à 0 soit à 1, et c'est indépendant de l'utilisateur.
A+
1
Messages postés
71
Date d'inscription
dimanche 5 juillet 2009
Statut
Membre
Dernière intervention
14 octobre 2009
1
Bonjour,

Merci beaucoup à tout les deux.
Alors hier soir avant d'aller dodo j'ai fait ça :

int rejouer()
{
    int choix = 0;

    while (choix < 1 || choix > 2)
    {
        printf("\t\t\t\t === REJOUER ? === \n");
        printf("1 : OUI\t\t\t\t\t\t\t\t\t2: NON\n");
        printf("Votre choix ? ");
        scanf("%d", &choix);
        if (choix == 1) { return main();}
        if (choix == 2) { return 0;}
    }

    return choix;
} 


Et j'ai modifié tout les return o; en return rejouer(); du coup la fênetre ne se ferme plus et pas besoin du system("pause")
:)

Mais l'instruction "system("cls");" m'intéresse je vais la mettre.

Aussi j'aimerais savoir si c'est possible de changer de couleur a chaque niveau : du genre a chaque fin de partie avant mon return rejouer(); je met system("cls");
puis une instruction pour changer la couleur ?

Merci a vous deux pour les explications/conseil et merci fiddy pour le lien !

Petite question :
printf(" Voulez vous faire une autre partie?\n");
printf("oui(1) ou non(2)");
scanf("%d", &reponse);

c'est ca une conditions Booléen ? parceque j'ai pas bien compris ce chapitre :s

Et j'aimerais rajouter une mode "spéciale" a mon code source, sa je sais comment faire mais j'aimerais qu'il génère un nombre mystère entre -500 et 500, c'est possible ?

Merci.
0
Messages postés
105
Date d'inscription
dimanche 28 juin 2009
Statut
Membre
Dernière intervention
28 mars 2014
8
salut.
alors non ce ne sont pas des booléens , les booléens sont des variables auxquels tu affectes une valeurs.
Mais cela dit tu peux en utiliser :
int oui= 1, non = 2; ( ici ce sont des booléens)

En ce qui concerne ton probleme de couleur je ne sais pas si tu as choisi la méthode de fiddy ou la mienne. Donc peut-être que ma solution ne te conviendrait pas.
Quant au nombre mystère entre -500 et 500 je ne sais pas si il est possible de sortir un nombre négatif dsl :s

Pour finir, j'aimerais savoir si tu n'as pas un " warning" avec ton return rejouer(), j'ai bien compris ce que tu voulais faire mais si tu regarde le prototype de ta fonction, ( int rejouer() ) tu doit normalement renvoyer un entier, mais là tu ne renvoie rien.
A+
0
Messages postés
105
Date d'inscription
dimanche 28 juin 2009
Statut
Membre
Dernière intervention
28 mars 2014
8
sans vouloir t'offenser fiddy, Dark-Beta69 vient de commencer le C :) il faut pas trop l'embrouiller lol.
A+
0
Messages postés
71
Date d'inscription
dimanche 5 juillet 2009
Statut
Membre
Dernière intervention
14 octobre 2009
1
D'accord j'ai pas tout compris mais j'irais chercher sur "google" donc sa ira, merci beaucoup !

Maintenant je voudrais savoir s'il est possible de modifier l'icône du raccourcis sur le bureau ?

et de changer le titre de la fenêtre du jeu, car la j'ai C:/Documents.../bureau/...

Merci encore.
Dark-Beta69
0