Overclocking : guy68 Le salon de discussion : stef942, 1 utilisateur anonyme et 13 utilisateurs inconnus

 Mot :   Pseudo :  
 
 Page :  1  2  3  4
Page Suivante 
Auteur Sujet :

[C] Programmation en C;Besoin d'aide ;-°

n°7368
CaNDiCe SH​aFTeR
NoRVeGiaN
Posté le 30-05-2007 à 18:52:32  profilanswer
 

Reprise du message précédent :
Merci pour ces reponses, mais y a un truc que je comprend pas, c'est comment sortir de ma boucle?? do...while


---------------
Gigabyte a donfffffffff  
Norway
mood
Google
Posté le 30-05-2007 à 18:52:32  profilanswer
 

n°7369
halukard
Posté le 30-05-2007 à 18:55:54  profilanswer
 

do while en algo (et en francais ^^) c'est faire ... tant que
 
sur un while tu test une variable  
 
(exemple ligne 126 }while (nombreEntre != nombreMystere); )
 
dans l'exemple si dessus tant que le nombre saisie et different du nombre a trouver tu sors pas de ta boucle.
 
regarde deux trois petit truc d'algo pour faire la difference entre les differente structure conditionnel.

n°7370
CaNDiCe SH​aFTeR
NoRVeGiaN
Posté le 30-05-2007 à 21:36:57  profilanswer
 

et si je tape un nombre pas different, a ce moment je sortirais....
Donc si apres une partie, je veux mettre un menu genre :
1. refaire une partie
2. retour au menu du jeu
il faut que je fasse une boucle englobant toute ma fonction main.


---------------
Gigabyte a donfffffffff  
Norway
n°7371
xstephx
Sarah!
Posté le 30-05-2007 à 22:01:56  profilanswer
 

ou un jump/goto ou un appel à ta fonction principale, il y a plusieurs moyens d'arriver à un résultat qui sera identique du point de vue utilisateurs


---------------
* Rejoignez le groupe SOJ sur last.fm ! * Mes critiques de films *
n°7372
Logibilo
Total-tuning.net powered.
Posté le 30-05-2007 à 22:52:32  profilanswer
 

CaNDiCe je viens de finir ce programme pour me remettre au C, je peux te passer le code si tu veux voir deux trois truc ;)


---------------
------->>>>>> http://www.total-tuning.net/ <<<<<<<---------
n°7374
CaNDiCe SH​aFTeR
NoRVeGiaN
Posté le 31-05-2007 à 17:25:51  profilanswer
 

c'est a dire tu as fini le programme??
Avec les ameliorations, car si c'est le cas je veux bien.
La j'ai bien avancer dedans, il me reste a mettre un menu pour le niveau de difficultes.
Mais Logibilo, tu peux me repondre a cette question : moi le menu j'ai tout fait avec un sxitch, c'est la bonne solution??
Merci


---------------
Gigabyte a donfffffffff  
Norway
n°7375
G r i b o ​u i l l e
House Music
Posté le 31-05-2007 à 22:24:09  profilanswer
 

si t'as plus de deux choix, et une variable qui vien d'un utilisateur, oui :D


---------------
Web Agency : delta (connexion)™
Electro Podcast : white banana
n°7376
Logibilo
Total-tuning.net powered.
Posté le 01-06-2007 à 09:37:16  profilanswer
 

Bein moi je l'ai pas mal améliorer, et je crois que j'ai un peux puisé sur le cours juste d'après (les fonctions)... Je te laisse voir :

 

Fichier main.c :

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include "main.h"
  5. int main(int argc, char *argv[])
  6. {
  7.  
  8.   printf("***Bienvenue dans le jeu plus ou moins***\n\n" );
  9.   menu1();
  10.  
  11.  
  12.   system("PAUSE" );   
  13.   return 0;
  14. }
  15. void finding (long n1)
  16. {
  17.      long n2 = 0 , bol = 1, compt = 0, choix3 = 0;
  18.    
  19.      do
  20.   {
  21.   compt++;
  22.   printf("\n\nQuel est  le nombre mystere ?\t" );
  23.   scanf("%ld", &n2);
  24.   if (n1 == n2)
  25.   {
  26.         bol = 0;
  27.   }
  28.   else if (n1 < n2)
  29.   {
  30.        printf("C'est moins!" );
  31.   }
  32.   else
  33.   {
  34.       printf("C'est plus!" );
  35.   }
  36.   }
  37.   while (bol);
  38.  
  39.   printf("\n\nBravo ! Vous avez trouve le nombre mystere en %ld coups!\n\n", compt);
  40.   system("PAUSE" );
  41.   system("cls" );
  42.   printf("On recommence?\n\n" );
  43.   printf("1/Oui\n" );
  44.   printf("2/Non\n" );
  45.   scanf ("%ld", &choix3);
  46.   switch(choix3)
  47.   {
  48.                 case 1:
  49.                        system("cls" );
  50.                        menu1();
  51.                        break;
  52.                 default:
  53.                         printf("\nBye!\n" );
  54.                         break;
  55.   }
  56. }
  57. void menu1 ()
  58. {
  59.      
  60.   long choix1 = 0, n1 = 0;
  61.   printf("***Faites un choix***\n\n" );
  62.   printf("1/Mod 1 joueur\n" );
  63.   printf("2/Mod 2 joueurs\n" );
  64.   printf("Votre choix :\t" );
  65.   scanf("%ld", &choix1); 
  66.  
  67.    switch(choix1)
  68.   {
  69.                 case 1:
  70.                      system("cls" );
  71.                      menu2();
  72.                      break;
  73.                 case 2:
  74.                      printf("\n\nLe joueur 1 rentre le nombre mystere..." );
  75.                      scanf("%ld", &n1);
  76.                      system("cls" );
  77.                      finding(n1);
  78.                      break;
  79.                 default:
  80.                        system("cls" );
  81.                        menu1 ();
  82.                         break;
  83.    }
  84.                        
  85.  
  86.   }
  87.   void menu2 ()
  88.   {
  89.   long choix2 = 0, n1 = 0;
  90.   long MAX = 1, MIN = 1;
  91.   printf("\n***Faites un choix***\n\n" );
  92.   printf("1/Tres facile 10\n" );
  93.   printf("2/Facile 100\n" );
  94.   printf("3/Assez difficile 500\n" );
  95.   printf("4/Difficile 1000\n" );
  96.   printf("5/Warriors 10 000\n" );
  97.   scanf("%ld", &choix2);
  98.  
  99.   switch(choix2)
  100.   {
  101.                 case 1:
  102.                      MAX = 10;
  103.                      break;
  104.                 case 2:
  105.                      MAX = 100;
  106.                      break;
  107.                 case 3:
  108.                      MAX = 500;
  109.                      break;
  110.                 case 4:
  111.                      MAX = 1000;
  112.                      break;
  113.                 case 5:
  114.                      MAX = 10000;
  115.                      break;
  116.                 default:
  117.                        system("cls" );
  118.                         menu2 ();
  119.                         break;
  120.   }
  121.  
  122.   srand(time(NULL));
  123.   n1 = (rand() % (MAX - MIN + 1)) + MIN;
  124.  
  125.   system("cls" );
  126.   finding(n1);
  127.  
  128.   }
 

Et le fichier main.h

Code :
  1. void finding (long n1);
  2. void menu1 ();
  3. void menu2 ();
 

Il manque juste une chose, c'est lorsque l'utilisateurs fait une connerie, j'ai toujours pas trouvé comment fermer le programme...


Message édité par Logibilo le 01-06-2007 à 10:01:43

---------------
------->>>>>> http://www.total-tuning.net/ <<<<<<<---------
n°7377
halukard
Posté le 01-06-2007 à 09:45:28  profilanswer
 

sur ton default tu peu reboucle sur menu2() ca te reafiche ton menu sans que tu ai de rupture.

n°7378
Logibilo
Total-tuning.net powered.
Posté le 01-06-2007 à 09:59:38  profilanswer
 

Pas bête, avec un un  system("cls" ), ca va le faire merci  ;)

 

EDIT: Voila, code édité dans le message d'avant :o


Message édité par Logibilo le 01-06-2007 à 10:02:10

---------------
------->>>>>> http://www.total-tuning.net/ <<<<<<<---------
n°7380
CaNDiCe SH​aFTeR
NoRVeGiaN
Posté le 01-06-2007 à 21:06:51  profilanswer
 

lol oui, tu as pompe sur les fonctions...
Merci en tout cas...
Sinon pour ce qui est de fermer, c'est fermer le prog en entier ou juste refaire un ("CLS" ) ??


---------------
Gigabyte a donfffffffff  
Norway
n°7381
Logibilo
Total-tuning.net powered.
Posté le 01-06-2007 à 21:39:44  profilanswer
 

C'était pour fermer le programme mais avec la version de halukard marche parfaitement aussi (reboucler sur le débu du menu avec un effacement de la console)


---------------
------->>>>>> http://www.total-tuning.net/ <<<<<<<---------
n°7382
CaNDiCe SH​aFTeR
NoRVeGiaN
Posté le 01-06-2007 à 21:47:27  profilanswer
 

benh pour fermer le programme :
system ("PAUSE" );
return 0;

 

qu'en je met ton code source, moi il marche pas...
Mais maintenant que j'ai vu le principe, je referai le jeu.En tout cas on dirait que t'en as deja fait de la prog avant...


Message édité par CaNDiCe SHaFTeR le 01-06-2007 à 21:47:56

---------------
Gigabyte a donfffffffff  
Norway
n°7383
Logibilo
Total-tuning.net powered.
Posté le 01-06-2007 à 22:19:38  profilanswer
 

system ("PAUSE" );
return 0;
Ca a jamais fermé un prog :o
Ca met la console en pause et ca dit qu'il a bien fait son job mais c'est tout :)
 
Bein, c'est juste que... j'ai fait pas mal de tentative d'appréhension du C, mais à chaque fois je laisse tomber parce que j'ai plus le temps :D


---------------
------->>>>>> http://www.total-tuning.net/ <<<<<<<---------
n°7384
CaNDiCe SH​aFTeR
NoRVeGiaN
Posté le 02-06-2007 à 12:57:25  profilanswer
 

ben le
return 0; ca ferme le programe....
 moi j'en suis au pointeurs, pas facile, facile...

 


---------------
Gigabyte a donfffffffff  
Norway
n°7385
Logibilo
Total-tuning.net powered.
Posté le 02-06-2007 à 15:59:06  profilanswer
 

Wip les pointeurs c'est pas facile comprendre mais ca vient^^.
Si on peut me confimer mais le return 0 pour moi ca ferme pas le prog :o


---------------
------->>>>>> http://www.total-tuning.net/ <<<<<<<---------
n°7386
Blue Sn4ke
Zelda Fan
Posté le 02-06-2007 à 18:52:14  profilanswer
 

Ben si.
 
return, ça arrête immédiatement la fonction en cours.
Donc si cette fonction est la main, ça ferme le prog :)
 
 
Par contre il me semble que Code Blocks rajoute un "Appuyez sur une touche pour continuer" à la fin du prog. C'est peut-être ça que tu vois :)

n°7387
CaNDiCe SH​aFTeR
NoRVeGiaN
Posté le 03-06-2007 à 17:17:48  profilanswer
 

moi j'ai code::blocks, et a la fin de la fonction main, je met :
 
   system ("PAUSE" );

 

return 0;

 


---------------
Gigabyte a donfffffffff  
Norway
n°7407
CaNDiCe SH​aFTeR
NoRVeGiaN
Posté le 12-06-2007 à 19:58:36  profilanswer
 

La je suis en train d'apprendre (et de comprendre :d ) tout ce qui est pointeur, tableaux, chaine de caractere...enfin bref, c'est pas facile.Puis mormalement j'attaque bientot avec la librairy SDL.


---------------
Gigabyte a donfffffffff  
Norway
n°7434
CaNDiCe SH​aFTeR
NoRVeGiaN
Posté le 16-06-2007 à 21:28:21  profilanswer
 

Ca y est j'en suis a la sdl, donc je peux creer des fenetres !! (enfin  :D )
voila mes problemes :
Le code pour ouvrir une fenetre avec degrade noir=> blanc (noir en haut)) :

 


Code :
  1. int main(int argc, char *argv[])
  2. {
  3.     SDL_Surface *ecran = NULL, *lignes[256] = {NULL};
  4.     SDL_Rect position;
  5.     int i = 0;
  6.     SDL_Init(SDL_INIT_VIDEO);
  7.     ecran = SDL_SetVideoMode(640, 256, 32, SDL_HWSURFACE); // Hauteur de 256 pixels
  8.     for (i = 0 ; i <= 255 ; i++)
  9.         lignes[i] = SDL_CreateRGBSurface(SDL_HWSURFACE, 640, 1, 32, 0, 0, 0, 0); // Allocation des 256 surfaces
  10.     SDL_WM_SetCaption("Mon dégradé en SDL !", NULL);
  11.     SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
  12.     for (i = 0 ; i <= 255 ; i++)
  13.     {
  14.         position.x = 0; // Les lignes sont à gauche (abscisse de 0)
  15.         position.y = i; // La position verticale dépend du numéro de la ligne actuelle
  16.         SDL_FillRect(lignes[i], NULL, SDL_MapRGB(ecran->format, i, i, i)); // Remplissage
  17.         SDL_BlitSurface(lignes[i], NULL, ecran, &position); // Collage
  18.     }
  19.     SDL_Flip(ecran);
  20.     pause();
  21.     for (i = 0 ; i <= 255 ; i++) // N'oubliez pas de libérer chacune des 256 surfaces !
  22.         SDL_FreeSurface(lignes[i]);
  23.     SDL_Quit();
  24.     return EXIT_SUCCESS;
  25. }
  26. void pause()
  27. {
  28.     int continuer = 1;
  29.     SDL_Event event;
  30.     while (continuer)
  31.     {
  32.         SDL_WaitEvent(&event);
  33.         switch(event.type)
  34.         {
  35.             case SDL_QUIT:
  36.                 continuer = 0;
  37.         }
  38.     }
  39. }
 


et les exercices de la fin du chapitre, sont :

 
  • Créez le dégradé inverse, du blanc au noir. Il vous faudra peut-être réfléchir 10 secondes avant de trouver comment faire


  • Vous pouvez aussi faire un double dégradé, en allant du noir au

blanc comme on a fait ici puis du blanc au noir (la fenêtre fera alors
le double de hauteur).

 
  • Guère plus difficile, vous pouvez aussi vous entraîner à faire un dégradé horizontal au lieu d'un dégradé vertical


  • Faites des dégradés en utilisant d'autres couleurs que le blanc et

le noir. Essayez pour commencer du rouge au noir, du vert au noir et du
bleu au noir, puis du rouge au blanc etc...

 


Essayez de faire un dégradé pour d'autres couleurs allant du rouge au vert par exemple, ou encore du jaune au vert foncé etc.

 


Et je n'arrive pas a faire ces exercices...
Si vous pouviez m'aider pour coder ces exercices, Merci.

   


Message édité par CaNDiCe SHaFTeR le 16-06-2007 à 21:34:02

---------------
Gigabyte a donfffffffff  
Norway
n°7435
halukard
Posté le 17-06-2007 à 08:55:09  profilanswer
 

je connais pas mais a vu de nez la gestion du degrader doit etre ici
 

Code :
  1. for (i = 0 ; i <= 255 ; i++)
  2.     {
  3.         position.x = 0; // Les lignes sont à gauche (abscisse de 0)
  4.         position.y = i; // La position verticale dépend du numéro de la ligne actuelle
  5.         SDL_FillRect(lignes[i], NULL, SDL_MapRGB(ecran->format, i, i, i)); // Remplissage
  6.         SDL_BlitSurface(lignes[i], NULL, ecran, &position); // Collage
  7.     }
  8.     SDL_Flip(ecran);


 
1 - pour inverser ton degrader tu fais une boucle inverse (au pif faut tester)
 
2 - faire une fonction et l'appeler deux fois en passant des paramettre ? ou faire deux fois la meme fonction a l'arrache.
 
3 -

Code :
  1. position.x = 0; // Les lignes sont à gauche (abscisse de 0)
  2.         position.y = i; // La position verticale dépend du numéro de la ligne actuelle


 
position.x = i;
position.y = 0;
 
je pense.
 
4 - La il suffit de fixer une couleur dans cette fonction
 
SDL_FillRect(lignes[i], NULL, SDL_MapRGB(ecran->format, 0, 0, i)); // Remplissage
 
exemple : Nuance de bleu en partant du noir.  
 
 
Voila essais voir ce que ca donne ^^
 
 

n°7440
CaNDiCe SH​aFTeR
NoRVeGiaN
Posté le 18-06-2007 à 20:24:32  profilanswer
 

la boucle a l'envers, me donne une fenetre toute blanche, alors je suis en train de tout relre pour bien comrpendre et vais reeeesayer.


---------------
Gigabyte a donfffffffff  
Norway
n°7441
halukard
Posté le 18-06-2007 à 20:41:42  profilanswer
 

ah oui j'avais pas vu forcement l'index des ligne est pas bon il faut que mettre une variable en plus et l'incrementé a chaque fin de boucle
 
 

Code :
  1. nb_ligne = 0;
  2. for (i = 255 ; i <= 0 ; i--)
  3.     {
  4.         position.x = 0; // Les lignes sont à gauche (abscisse de 0)  
  5.         position.y = i; // La position verticale dépend du numéro de la ligne actuelle  
  6.         SDL_FillRect(lignes[nb_ligne], NULL, SDL_MapRGB(ecran->format, i, i, i)); // Remplissage  
  7.         SDL_BlitSurface(lignes[nb_ligne], NULL, ecran, &position); // Collage  
  8.         nb_ligne++
  9.     }
  10.     SDL_Flip(ecran);

n°7442
ced-2k
TODO : Insert text here.
Posté le 18-06-2007 à 23:13:18  profilanswer
 

halukard a écrit :

ah oui j'avais pas vu forcement l'index des ligne est pas bon il faut que mettre une variable en plus et l'incrementé a chaque fin de boucle


ca risque pas de boucler des masses qd meme avec i <= 0 dans le for :whistle:


Message édité par ced-2k le 18-06-2007 à 23:14:10
n°7443
halukard
Posté le 19-06-2007 à 08:03:22  profilanswer
 

oups j'ai pas fait gaff, c'est le danger des copier/coller  

n°7451
CaNDiCe SH​aFTeR
NoRVeGiaN
Posté le 23-06-2007 à 21:37:12  profilanswer
 

oui, ca va pas bien marcher^^.
Merci quand meme, je vais essayer ca.


---------------
Gigabyte a donfffffffff  
Norway
mood
Google
Posté le 23-06-2007 à 21:37:12  profilanswer
 

 Page :  1  2  3  4
Page Suivante 

Aller à :
Ajouter une réponse
 

Hit Parade