|
Dernière réponse | ||
---|---|---|
Sujet : Question de debutant... | ||
[SDF]Poire |
|
Aperçu |
---|
Vue Rapide de la discussion |
---|
[SDF]Poire |
|
red faction | //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 |
LeGreg |
|
LeGreg |
|
[SDF]Poire | strcpy(diff, "moyen" );
mais attention au dépacement de capacité diff doit être de taille suffisante pour acceuillir la chaine |
red faction | 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 |
[SDF]Poire | 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) |
massanu | pour renvoyé un tableau de caractere par exemple c'est :
char * fonction() |
red faction | 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 ?? |