Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1692 connectés 

  FORUM HardWare.fr
  Programmation

  Question de debutant...

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Question de debutant...

n°120505
red factio​n
Posté le 02-04-2002 à 21:15:23  profilanswer
 

Voila jsuis entrain de faire un ptit jeu en c++ (mode console) et ya quelques truc que jarrive pas a faire.
 
- ds une fonction, comment renvoyer un tableau ????
 
- char diff[]="facile";
printf("Difficulte : %s \n",diff);
 
comment peut-t-on changer diff au cours du programme ??
 
- existe til une commande qui permet de placer une caract a une position x,y ??

mood
Publicité
Posté le 02-04-2002 à 21:15:23  profilanswer
 

n°120510
massanu
Posté le 02-04-2002 à 21:21:14  profilanswer
 

pour renvoyé un tableau de caractere par exemple c'est :
 
char * fonction()

n°120514
[SDF]Poire
Vive Grumly
Posté le 02-04-2002 à 21:25:08  profilanswer
 

Une fonction ne peux pas renvoyer un tableau... tout ce quelle peut faire C renvoyer un pointeur sur le tableau (le 1er élément du tableau en vrai)


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
n°120518
red factio​n
Posté le 02-04-2002 à 21:41:21  profilanswer
 

et pour changer la chaine de caract de fait comment ?
 
 char diff[]="facile";
printf("Difficulte : %s \n",diff);
 
par exemple si je veut imprimer moyen je fait  
diff="moyen";
 
mais ca marche pas

n°120519
[SDF]Poire
Vive Grumly
Posté le 02-04-2002 à 21:43:56  profilanswer
 

strcpy(diff, "moyen" );
 
mais attention au dépacement de capacité diff doit être de taille suffisante pour acceuillir la chaine


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
n°120614
LeGreg
Posté le 03-04-2002 à 00:37:19  profilanswer
 

red faction a écrit a écrit :

Voila jsuis entrain de faire un ptit jeu en c++ (mode console) et ya quelques truc que jarrive pas a faire.
- ds une fonction, comment renvoyer un tableau ????
- char diff[]="facile";
printf("Difficulte : %s \n",diff);
comment peut-t-on changer diff au cours du programme ??
- existe til une commande qui permet de placer une caract a une position x,y ??  




 
avant de commencer a coder un jeu, je te conseille vivement
de te mettre avec un bouquin sur le C ou le C++ (mais c'est plus complique)
genre le truc toujours utile: le langage C par Kernighan et Ritchie
 
Parce que tu vas vite buter sur tous les problemes lies
a l'apprentissage du langage et ton projet va pas beaucoup avancer du coup :(.
 
Il faut que tu apprennes les notions de base du C:
pointeurs, variables, struct, tableaux, gestion de memoire,  
pile, tas, librairie standard, references etc.. etc..
 
Apres tu pourras te poser des questions liees a l'implantation de ton jeu .
 
LEGREG

n°120615
LeGreg
Posté le 03-04-2002 à 00:45:30  profilanswer
 

[SDF]Poire a écrit a écrit :

Une fonction ne peux pas renvoyer un tableau... tout ce quelle peut faire C renvoyer un pointeur sur le tableau (le 1er élément du tableau en vrai)  




 
oui mais moyen.
Il faut que quelqu'un l'alloue sa chaine et il est evidemment hors de question que ce soit sur la pile de la fonction appelee.
Il faut donc, qu'elle soit allouee de maniere globale ou localement dans le scope de la fonction appelante et dans ce cas le pointeur est passe en argument de la fonction.
soit qu'elle soit allouee sur le tas par la fonction appelee mais il faut veiller a ce que la fonction appelante libere correctement la memoire (ou n'importe qui d'autre pourvu qu'elle soit liberee).
 
De plus si tu prevois de la modifier et que tu connais a l'avance la taille des modifications tu changes ta declaration
pour reserver un espace suffisant pour toutes les modifications:
char diff[MAX_SIZE]; par exemple.
Ou alors tu utilises le type std::string qui n'existe qu'en C++.
Mais attention aux surcouts lies a ce type d'objets.
 
A+
LEGREG

n°121029
red factio​n
Posté le 03-04-2002 à 19:13:30  profilanswer
 

//reste a faire :
// ameliorer le menu option
// plus que des variables locales (!)
 
 
 
 
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h> // pour la generation de nombres aleatoires
#include <windows.h> // pour les fonctions console
 
void movexy(int x,int y);
void putchr(int x, int y, char i);
int setcolor(int b,int c);
void titre(void);
void noms(void);
void regles(void);
void jeu(void);
void options(void);
void joueur2(void);
void tirage(void);
void saisie(void);
void analyse(void);
void menu(void);
void drawboard(void);
void gameover(void);
void youwin(void);
 
int nbchi=8,nbpos=5,nbjoueur=1;
int code[15],coded[15];
int essai[15],essaid[15];
int nbok,nbplac;
int nbessaid=15,nbessai;
int dif=2;
 
 
 
main(){
noms();
menu();
return 0;
}
 
 
 
 
void noms(void){
printf("                            Laboratoire No4  \n\n" );
printf("                            ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ\n\n\n" );
_getch();
}
 
 
void titre(void){
system("cls" );
printf("\n     _____                   __                       .__            .___ \n" );
printf("    /     \\ _____    _______/  |_  ___________  _____ |__| ____    __| _/\n" );
printf("   /  \\ /  \\\\__  \\  /  ___/\\   __\\/ __ \\_  __ \\/     \\|  |/    \\  / __ |\n" );  
printf("  /    Y    \\/ __ \\_\\___ \\  |  | \\  ___/|  | \\/  Y Y  \\  |   |  \\/ /_/ |\n" );  
printf("  \\____|__  (____  /____  > |__|  \\___  >__|  |__|_|  /__|___|  /\\____ | \n" );
printf("         \\/     \\/     \\/            \\/            \\/        \\/      \\/\n\n\n" );  
printf("        ____  _______ ___.    \n" );
printf("       /_   | \\   _  \\\\_ |__ \n" );  
printf("        |   | /  /_\\  \\| __ \\ \n" );
printf("        |   | \\  \\_/   \\ \\_\\ \\\n" );
printf("        |___| /\\_____  /___  /\n" );
printf("              \\/     \\/    \\/ \n" );
printf("  ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿\n" );
printf("  ³   1. Regles du jeu      ³\n" );
printf("  ³                         ³\n" );
printf("  ³   2. Lancer une partie  ³\n" );
printf("  ³                         ³\n" );
printf("  ³   3. Options            ³\n" );
printf("  ³                         ³\n" );
printf("  ³   4. Quitter            ³\n" );
printf("  ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ" );
}
 
 
 
// regles du jeu
void regles(void){
 system("cls" );
 printf("\n\n\n  ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿\n" );
 printf("  ³   Regles du jeu    ³\n" );
 printf("  ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ\n\n\n" );
 printf("     L'ordinateur choisit un code. Votre but est de retrouver,\n" );
 printf("     en faisant des propositions, les couleurs choisies ainsi que leurs\n" );
 printf("     places correctes dans le code. Pour chacune des propositions\n" );
 printf("     l'ordinateur indiquera si les couleurs proposees sont bien ou mal\n" );
 printf("     placees. Le code secret choisi par l'ordinateur peut contenir\n" );
 printf("     plusieurs fois la meme couleur.\n\n\n" );
 
 printf("     X est place pour chaque pion ayant la meme\n" );
 printf("     couleur et exactement la meme position que l'un des pions du code\n" );
 printf("     \n\n" );
 
 printf("     O est place pour chaque pion ayant la\n" );
 printf("     meme couleur, mais pas la meme place que le pion.\n" );
_getch();
}
 
 
 
// le jeu lui meme (plateau + pions)
void jeu(void){
system("cls" );
int i;
nbok=0;
nbessai=nbessaid;
if (nbjoueur==2) joueur2(); else tirage();
 
drawboard();
while (!(nbok==nbpos || nbessai<=0)) {// tand quon a pas trouve la combinaison
 
   
 for (i=0;i<nbpos;i++)
  code[i]=coded[i];
 
   
 saisie();
 
 for (i=0;i<nbpos;i++)
  essai[i]=essaid[i];
 
 
// printf("code propose  = " );
// for (i=0;i<nbpos;i++)
// printf("%d",essai[i]);
// printf("\n" );
 analyse();  
 nbessai--;
// printf("essai=%d",nbessaid);
 
}
_getch();
if (nbok==nbpos) youwin(); else gameover();
}
 
// menu principal
void menu(void){
system("cls" );
titre();
 
int pos=16;
char choix=' ';
 
while (!(pos==22 && choix=='\r';)){
putchr(4,pos,'>';);
putchr(26,pos,'<';);
movexy(0,0);
 
// traitement de ce quon a entre au clavier
choix=_getch();
putchr(4,pos,' ';);
putchr(26,pos,' ';);
switch(choix)
 {
 case 80 :pos+=2;
  break;
 case 72 :pos-=2;
   break;
 case '1' :pos=16;
  break;
 case '2' :pos=18;
  break;
 case '3' :pos=20;
  break;
 case '4' :pos=22;
  break;
 case 27 : if (pos==22){ choix='\r';}  // quitte le programme
        else pos=4; // lorsquon appuie sur esc positionne le curseur sur quitter
  break;
 
 case '\r' :{      
   switch(pos)
  {
  case 16 :regles();titre();
   break;
  case 18 :jeu();titre();
   break;
  case 20 :options();
   break;  
   }
     
 }
 default : break;
}
 
if (pos>22) pos=16; // fait revenir le selecteur au debut ou a la fin  
if (pos<16) pos=22;
}
system("cls" );
}
 
 
// gestion du sous menu
void options(void){
char choix=' ';
int pos2=17;
char diff[10];
 
while (choix!=27) { //tant que different de escape
 
 
switch (choix){
case 72 : pos2--;
 break;
case 80:  pos2++;  
 break;
case 77:{  // si on appuie sur ->
 switch(pos2){
  case 17: nbjoueur=2;  
   break;
  case 18:if (dif<4) dif++;  
   break;
  case 20:if (nbpos<10) nbpos++;
   break;
  case 21:if (nbchi<9) nbchi++;  
   break;
  case 22:if (nbessaid<30) nbessaid++;
   break;}
break; }
 
case 75:{ // si on appuie sur <-
 switch(pos2){
  case 17: nbjoueur=1;
   break;
  case 18:if (dif>1) dif--;
   break;
  case 20:if (nbpos>1) nbpos--;
   break;
  case 21:if (nbchi>1) nbchi--;
   break;
  case 22:if (nbessaid>1) nbessaid--;
   break;}
  }
}
   
//permet d'utiliser les niveau de difficulte predefinis
if (pos2==18 || pos2==17){      
 switch(dif){
 case 1:
     nbpos=4;
  nbchi=4;
  nbessaid=15;
  strcpy(diff, "facile" );
  break;
 case 2:  
  nbpos=5;
  nbchi=8;
  nbessaid=15;
  strcpy(diff, "moyen" );
  break;
 case 3:
     nbpos=6;
  nbchi=9;
  nbessaid=10;
  strcpy(diff, "hardcore" );
  break;
 case 4: strcpy(diff, "perso" );
  break;
 }
}
// fait revenir le selecteur au debut ou a la fin  
if (pos2>22) pos2=17; else if (pos2<17) pos2=22;
// saute une ligne ds le menu
if (pos2==19) if (choix==72) pos2=18; else pos2=20;
// si on modifie une valeur soit mettre difficulty a perso soit mettre a jour le menu  
if (choix==75 || choix==77)
 if (pos2>=20 && dif!=4) {strcpy(diff, "perso" );dif=4;}
 else {
movexy(16,16);printf("ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿" );
movexy(16,17);printf("³  Nb joueurs   : %d        ³",nbjoueur);                    
movexy(16,18);printf("³  Difficulte   : %-8s ³",diff);
movexy(16,19);printf("³                          ³" );
movexy(16,20);printf("³  Nombre de positions %2d  ³",nbpos);
movexy(16,21);printf("³  Nombre de chiffres  %2d  ³",nbchi);
movexy(16,22);printf("³  Nombre d'essais     %2d  ³",nbessaid);
movexy(16,23);printf("ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Ù" );}
 
putchr(17,pos2,'>';);
putchr(42,pos2,'<';);
movexy(0,0);
 
choix=_getch();
 
putchr(17,pos2,' ';);
putchr(42,pos2,' ';);
}
}
 
 
// choisi au hasard un nombre de 1 à nbchi
void tirage(void){
 int i;
    srand (time(NULL)); // initialise le generateur aleatoire
 for (i=0;i<nbpos;i++)
  coded[i]=1+rand()%nbchi;
}
 
 
// traite ce que le joueur entre au clavier
void saisie (void){
int i=0,nb,j=0;
while (i<nbpos){
    nb=_getch();
 nb=nb-'0';  // converti le code ascii en chiffre
 if (nb>=1 && nb<=nbchi){
    setcolor(0,nb);printf("Û" );printf("Û  " );setcolor(0,7);
  essaid[i]=nb;    
  i++;
 }
 if (nb==-16){
   printf("Code a trouver " );
   for (j=0;j<nbpos;j++)
    printf("%d",code[j]);
    printf("\n" );
   // _getch();
   // drawboard();
 }
//printf("%d",nb);
 
}
 
while (_getch()!='\r';); //attend la confirmation de enter
}
 
 
void analyse(void){
 int i,j;
 nbok=0;nbplac=0;
// cherche les pions exacts et bien places
for (i=0;i<nbpos;i++)
if (essai[i]==code[i]){
 setcolor(0,8);
 printf ("ÛÛ" );
    setcolor(0,7);
 nbok++;
 code[i]=0;essai[i]=0;
}
// cherche les pions exacts et mal places
for (i=0;i<nbpos;i++)
for (j=0;j<nbpos;j++){
 if (essai[i]==code[j] && code[j]!=0 && essai[i]!=0){  // empeche de traiter les zeros
 printf ("ÛÛ" );
 nbplac++;
    code[j]=0;essai[i]=0;
 }
 
}
printf("\n\n" );
//printf(" bienplace=%d bonmais=%d\n",nbok,nbplac);
}
 
 
// dessine le plateau du jeu
void drawboard(void){
int i;
system("cls" );
for (i=1;i<=nbchi;i++){
    setcolor(0,i);
 printf (" %d ÛÛ",i);}
printf("\n\n\n" );
}
 
 
void gameover(void){
system("cls" );
printf("               .           .   ________________    .        .\n" );
printf("                     .    ____/ (  (    )   )  \\___\n" );
printf("              .         /( (  (  )   _    ))  )   )\\        .   .\n" );
printf("                       ((     (   )(    )  )   (   )  )   .\n" );
printf("            .    .   ((/  ( _(   )   (   _) ) (  () )  )        .   .\n" );
printf("                    ( (  ( (_)   ((    (   )  .((_ ) .  )_\n" );
printf("                                            )             )\n" );
printf("          #####  ####   ### ###  ###### ( _)    ####  #    # ###### #####\n" );
printf("        #      #    # #   #   # #       )     #    # #    # #      #    #\n" );
printf("       #  ### ###### #   #   # ######  ) (   #    # #    # ###### #####   .\n" );
printf("      #    # #    # #   #   # #        ( _  #    # #    # #      #   #\n" );
printf("      ##### #    # #   #   # ######  _  )   ####   ####  ###### #     #\n" );
printf("                                      _        _  _ _     _       .   .   .\n" );
printf("     .       .     (_((__(_(__(( ( ( |  ) ) ) )_))__))_)___)   .\n" );
printf("         .         ((__)        \\\\||lll|l||///          \\_))       .\n" );
printf("                  .       . / (  |(||(|)|||//  \\     .    .      .      .\n" );
printf("    .       .           .   (   /(/ (  )  ) )\\          .     .\n" );
printf("        .      .    .     (  . ( ( ( | | ) ) )\\   )               .\n" );
printf("    .     .       .  .   (  .  ( ((((_(|)_)))))     )   \n" );
printf("            .  .          (    . ||\\(|(|)|/|| . . )        .        .\n" );
printf("         .           .   (   .    |(||(||)||||   .    ) .      .         .  ." );
printf("    .      .      .       (     //|/l|||)|\\\\ \\     )      .      .   .\n" );
printf("                         (/ / //  /|//||||\\\\  \\ \\  \\ _)\n" );
}
 
 
void youwin(void){
}
 
void joueur2(void){
int nb,i=0;
system("cls" );
printf("joueur 2, entrez le code a retrouver\n" );
 
while (i<nbpos){
    nb=_getch();
 nb=nb-'0';  // converti le code ascii en chiffre
 if (nb>=1 && nb<=nbchi){
  coded[i]=nb;  
  i++;
  printf("*" );
 }
}
while (_getch()!='\r';); //attend la confirmation de enter
}
 
 
 
// deplace le curseur a la position x y  
void movexy( int x, int y )  
{  
HANDLE screen = GetStdHandle( STD_OUTPUT_HANDLE );  
COORD _ = { x, y }; SetConsoleCursorPosition( screen, _);  
}  
 
// place un charactere en position x y  
void putchr(int x, int y, char i)
{
HANDLE screen = GetStdHandle( STD_OUTPUT_HANDLE );  
DWORD NumberOfCharsWritten;  
COORD _ = { x, y };  
FillConsoleOutputCharacter ( screen, i, 1, _, &NumberOfCharsWritten );  
SetConsoleCursorPosition( screen, _);  
}
 
// change la couleur du background et du texte
int setcolor(int b,int c)
{
          HANDLE  hConsole;
     //  WORD    wAttributesOld;
     //CONSOLE_SCREEN_BUFFER_INFO csbi;
 
     // **  Open the current console input buffer.
     if( ( hConsole = CreateFile(
                        "CONOUT$", GENERIC_WRITE | GENERIC_READ,
                        FILE_SHARE_READ | FILE_SHARE_WRITE,
                        0L, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0L) )
                    == (HANDLE) -1 ) {
         printf("\nError: Unable to open console.\n" );
         return( -1 );
     }  
   
 
     // **  Get and Save information on the console screen buffer.
    // GetConsoleScreenBufferInfo( hConsole, &csbi );
    // wAttributesOld = csbi.wAttributes;
  SetConsoleTextAttribute( hConsole, (WORD) ( (b << 4) | c) );  
}
 
------------------------------------------------------------
 
voila ou ca en est, ca compile sous visual c++ il suffit de coller ds un nouveau projet en mode console. Si quelqun pouvait me donner des idees pour ameliorer ce jeu (ca doit rester en mode console)  merci a ceux qui mont deja aide

n°121032
[SDF]Poire
Vive Grumly
Posté le 03-04-2002 à 19:15:57  profilanswer
 

legreg a écrit a écrit :

 
 
oui mais moyen.
Il faut que quelqu'un l'alloue sa chaine et il est evidemment hors de question que ce soit sur la pile de la fonction appelee.
Il faut donc, qu'elle soit allouee de maniere globale ou localement dans le scope de la fonction appelante et dans ce cas le pointeur est passe en argument de la fonction.
soit qu'elle soit allouee sur le tas par la fonction appelee mais il faut veiller a ce que la fonction appelante libere correctement la memoire (ou n'importe qui d'autre pourvu qu'elle soit liberee).
 
De plus si tu prevois de la modifier et que tu connais a l'avance la taille des modifications tu changes ta declaration
pour reserver un espace suffisant pour toutes les modifications:
char diff[MAX_SIZE]; par exemple.
Ou alors tu utilises le type std::string qui n'existe qu'en C++.
Mais attention aux surcouts lies a ce type d'objets.
 
A+
LEGREG  




G jamais dis le contraire :)
Je suis tout à fait d'accord  :D  
 :hello:


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  Question de debutant...

 

Sujets relatifs
[debutant C++] question sur les caractères..Question idiote de débutant en pascal
[VB] question de débutant : evenement fermeture fenêtre[JAVA] Question de débutant : notion de "static"
[C++] Question de debutantune question de debutant
[ question de debutant ] petit compteurJavascript : Question de débutant
Juste une petit question de debutant svp[cgi] question de debutant
Plus de sujets relatifs à : Question de debutant...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR