Aller au contenu

One more


Invité Boomer901

Messages recommandés

Invité p-e
Invités, Posté(e)
Invité p-e
Invité p-e Invités 0 message
Posté(e)

Explication: Pour m'entraîner j'ai fait un "jeu" DOS, on a 300 crédits, on choisis les unités, puis le 2ème joueur fait de même et la c'est la guerre, on compare attaque défense + une part de chance. mais la je bloque au moment de passer la main à J2

	 int main()
 {
	 srand(time(NULL));
	 int credit = 300, tank = 0, avion = 0, soldat = 0, boomker = 0, banque = 0, choix = 0, MIN = 2, MAX = 16, lu = 0, J = 1,oui = 0;
 do
 {
   do
   {
   printf("\n===ARMY===\n\n");
   printf(" J%d Composez votre armee\n", J);

   printf("\nUnitees:\n");
   printf("\nTank:20$:1, Avion:30$:2, soldat:1$:3, boomker:15$:4, banque:10$:5, terminer:6,  Regles:7\n\n\n");


  printf("\nCredit: %d\n", credit);
  printf("Unites achetes");
  printf("\nTank:%d, Avion:%d, Soldat:%d, Boomker:%d", tank, avion, soldat, boomker);
  printf("\nChoix: \n");
   scanf("%d", &choix);

  switch (choix)
  {
 case 1:
 credit = (credit - 20);
 tank = (tank + 1);
 break;
 case 2:
 credit = (credit - 30);
 avion = (avion + 1);
 break;
 case 3:
 credit = (credit - 1);
 soldat = (soldat + 1);
 break;
 case 4:
 credit = (credit - 15);
 boomker = (boomker + 1);
 break;
 case 5:
 credit = (credit - 10);
 banque = (rand() % (MAX - MIN + 1)) + MIN;
 credit = (credit + banque);
 break;
 case 6:
 printf("\neffectue");
 break;
 case 7:
 printf("Composez une armee en selectionant vos unites (1-5), la banque vous rapporte aleatoirement entre 2$ et 16$ (Lu:1)");
 scanf("%d", &lu);
 if (lu = 1);
 printf("ok");
 break;
 default:
 printf("erreur");
 break;
  }
  system ("cls");
  } while (choix != 6 && credit >= 0);

 if (J == 1)
 {
  printf("Armee:\n");
   printf("\nTank:%d, Avion:%d, Soldat:%d, Boomker:%d", tank, avion, soldat, boomker);
   printf("\nPasser la main  a J2? (oui=1)");
   scanf("%d", &oui);

Le problème est juste au dessus, quand je rentre 1 windows affiche: "le programme a cessé de fonctionner" .

	 switch (oui).
 {
 case 1:
 J = 2;
 choix = 0;
 credit = 300;
 oui = 0;
 break;
 default:
 printf("erreur")
 break;
 }
 }
 } while (J == 1 || J  == 2);

	 return 0;
 }

Lien à poster
Partager sur d’autres sites

Annonces
Maintenant
Invité p-e
Invités, Posté(e)
Invité p-e
Invité p-e Invités 0 message
Posté(e)

HELP !!!

Lien à poster
Partager sur d’autres sites

Invité I feel you
Invités, Posté(e)
Invité I feel you
Invité I feel you Invités 0 message
Posté(e)

Tu peux pas jouer à autre chose...??? :rtfm:

Lien à poster
Partager sur d’autres sites

Invité p-e
Invités, Posté(e)
Invité p-e
Invité p-e Invités 0 message
Posté(e)

Non :rtfm: . Non sérieusement quelqu'un peut m'aider?

Lien à poster
Partager sur d’autres sites

Membre, 32ans Posté(e)
Bobzy Membre 79 messages
Baby Forumeur‚ 32ans‚
Posté(e)

Laisse nous le temps de décortiquer ton code ^^

(Tu codes comme un gros salaud en passant :yahoo: M'enfin j'vais essayer de m'y mettre ^^)

Edit :

Bon bah je confirme, va falloir faire des efforts pour essayer d'être un peu plus compréhensible :o°

Enfin bref :rtfm: Je pense que tu te compliques grandement la vie, à moins que je sois rouillé ^^

Je te pique ton code, je fais quelques tests, j'essaie de te répondre ce soir, au pire demain soir :o°

Lien à poster
Partager sur d’autres sites

Membre, 32ans Posté(e)
Bobzy Membre 79 messages
Baby Forumeur‚ 32ans‚
Posté(e)

switch (oui).

Y a un . là ? C'est normal ? ^^

default:
 printf("erreur")
 break;

T'as oublié le ; derrière le printf...

J'sais pas si c'est une erreur en recopiant, mais elle est là :yahoo:

Sinon c'est pas trop mal, j'attend d'avoir la suite pour pouvoir jouer :o°

(Par contre corrige les fautes d'orthographe ! Et essaie de présenter un peu mieux les choix :rtfm: )

Lien à poster
Partager sur d’autres sites

Membre, 90°, 49ans Posté(e)
miq75 Membre 2 862 messages
49ans‚ 90°,
Posté(e)

chez moi (linux, gcc) ça marche après les modifs suivantes :

-les 2 modifs syntaxiques de bobzy,

-en ajoutant en premiere ligne le #include "stdio.h" qu'il faut pour déclarer entre autres printfs et scanf, (il me semble que certains environnements sous win se passent de cette ligne, mais ce n'est pas propre en terme de portabilité)

-en remplacant cls par clear (l'équivalent en terminal linux)

Ce qui ne vas pas, en revanche :

-tu fait 2 boucles DO imbriquées, la "grande" pour passer d'un joueur a l'autre, mais tu ne sort jamais du second joueur. En ligne 70 tu met J=2, met plutot J=J+1, tu sortira de la grande boucle après avoir géré le second joueurs. Le test final de cette boucle pourrait d'ailleur être j>2.

-tu utilise les memes variables pour les 2 joueurs (nombre de tanks, etc) alors que chacun devrait avoir les siennes.

-tu ferais mieux d'utiliser des tableaux d'int plutot que des int, pour ne pas avoir a dissocier tous les cas avec des switch (une structure a éviter au max) (des matrices ce serait encore mieux, genre une ligne par joueur, une colonne par type d'unité). Avec des matrices, tu n'a plus besoin d'une imbrication de 2 boucles, juste d'une gestion correcte des indices de coordonnées des matrices. (il te faut en revanche un tableau de prix également)

sinon : indente ton code, n'appelle pas une variable "oui", mais appelle là plutot "confirmation", c'est plus lisible.

Puisque c'est pour t'entrainer, je te conseille vivement d'en profiter pour mettre des tableaux. J'insiste sur les tableaux parce que il faut veiller à limiter au maximum la répétition de code très proche, pour des questions de lisibilité.

Lien à poster
Partager sur d’autres sites

Membre, 90°, 49ans Posté(e)
miq75 Membre 2 862 messages
49ans‚ 90°,
Posté(e)

Voilà comment j'aurais fait :

#include "stdio.h"
int main()
{
srand(time(NULL));
int choix, J = 1, MIN = 2, MAX = 16;
int armee[2][4] = {0,0,0,0,0,0,0,0};
int prix[4] = {20,30,1,15};
int credit[2] = {300,300};
char unites[4][10] = {"Tank\0","Avion\0","Soldat\0","Boomker\0"};
int i;
do
{
	printf("\nJoueur n° %d votre armée est composée de\n", J);
	for (i=0; i<4; i++)
		printf("\n%7s(%2d):%2d$:%d", unites[i], armee[J-1][i], prix[i], i+1);
	printf("\nAutres choix : banque:10$:5, terminer:6, Aide:0\n");
	printf("\nVos crédits: %d\n", credit[J-1]);

	printf("\nVeuillez entrer votre choix: \n");
	scanf("%d", &choix);

	if (choix > 0 && choix <= 4)
	{
		if (credit[J-1] < prix[choix-1]) printf(" --- Vous n'êtes pas assez riche ! ---");
		else
		{
			credit[J-1] -= prix[choix-1];
			armee[J-1][choix-1]++;
		}
	}
	else if (choix == 5) credit[J-1] -= ((rand() % (MAX - MIN + 1)) + MIN - 10);
	else if (choix == 6)
	{
			printf("\nVous avez terminé ? (oui=1)");
			scanf("%d", &choix);
			if (choix==1) J++;
	}
	else if (choix == 0)
	{
			printf("\nComposez une armee en selectionant vos unites (1-5), la banque vous coute 10$ mais vous rapporte aleatoirement entre %d$ et %d$", MIN, MAX);
			scanf("%d", &choix);
	}
	else printf(" --- Commande inconnue ---");
} while (J < 3);

return 0;
}

Lien à poster
Partager sur d’autres sites

Membre, 32ans Posté(e)
Bobzy Membre 79 messages
Baby Forumeur‚ 32ans‚
Posté(e)

Ah oui, j'ai pas pensé à le préciser pour les includes, m'enfin ça me paraît logique qu'il les ait mis, sinon ça ne marcherait pas du tout.

(Tu crois que CodeBlocks les inclue directement ? Oo)

Fallait pas lui dire pour les variables et la boucle ! ^^

Il l'aurait appris à ses dépens :rtfm:

Je trouve que les "do" ça sert un peu à rien, à mon humble avis, c'est plus compréhensible en mettant directement les "while"... Enfin c'est une question d'habitude je suppose.

+1 pour les tableaux et l'indentation :D (c'est pour ça que je disais que tu codais comme un gros salaud :yahoo: )

Enfin il démarre seulement, donc pour l'instant ça va encore... Il comprendra que ça devient vite chiant quand on s'attaque à des plus gros projets :o°

Et un petit truc aussi...

Découpe quelques fois ton programme en plusieurs petites fonctions, c'est plus agréable et plus lisible :o°

Lien à poster
Partager sur d’autres sites

Membre, 90°, 49ans Posté(e)
miq75 Membre 2 862 messages
49ans‚ 90°,
Posté(e)

Codeblocks, je connait pas (en meme temps, vim/Makefile/linux power), mais j'ai un vague souvenir d'un truc dans le genre il y a longtemps, sur un environnement win très gourmand, mais je ne sais plus lequel.

pour le reste, +1000

(sauf parfois le do qui se justifie, si son évaluation a besoin d'une initialisation particulière et que celle ci se trouve être le cas particulier du premier passage dans la boucle, ou encore lorsque l'évaluation du critère d'arret de la boucle est gourmand en ressources. Mais c'est très rare.)

Lien à poster
Partager sur d’autres sites

Invité p-e
Invités, Posté(e)
Invité p-e
Invité p-e Invités 0 message
Posté(e)

Merci, en fait j'ai oublié le & après un scanf :rtfm:. je connais pas encore les matrices, je me suis arrêté avant les "fonctions" du site du zéro.

Lien à poster
Partager sur d’autres sites

Membre, 90°, 49ans Posté(e)
miq75 Membre 2 862 messages
49ans‚ 90°,
Posté(e)

Alors avance dans les cours avant de chercher à faire des choses trop complexes. (au moins fonctions et tableaux)

Après, si tu aprends tout seul, sans contrainte sur le choix du langage, "c" n'est pas forcément le meilleur choix. Notamment parce qu'il est réputé pour son absence de messages d'erreurs intelligibles dus aux erreurs d'adressages de pointeurs.

Je te conseillerais plutot python, beaucoup plus user friendly a mon gout. Et tu fera la meme chose avec, voire beaucoup plus.

Enfin, de toute facon, les deux sont a connaitre, et les bases de la programmation sont toujours grosso modo les mêmes, quelque soit le langage.

Lien à poster
Partager sur d’autres sites

Membre, 32ans Posté(e)
Bobzy Membre 79 messages
Baby Forumeur‚ 32ans‚
Posté(e)

Ah oui, mais le C c'est la base de tout :yahoo:

Seulement c'est assez compliqué ^^

Ca demande beaucoup de rigueur et d'attention !

Mais au moins tu feras normalement beaucoup moins d'erreurs par la suite si tu t'accroches avec ce langage :rtfm:

Courage :o°

Lien à poster
Partager sur d’autres sites

Membre, 45ans Posté(e)
nataxie Membre 757 messages
Baby Forumeur‚ 45ans‚
Posté(e)
:rtfm: alors la je dis BRAVO
Lien à poster
Partager sur d’autres sites

Membre, 32ans Posté(e)
Bobzy Membre 79 messages
Baby Forumeur‚ 32ans‚
Posté(e)

Bravo à quoi ? :rtfm:

Lien à poster
Partager sur d’autres sites

Membre, 45ans Posté(e)
nataxie Membre 757 messages
Baby Forumeur‚ 45ans‚
Posté(e)

De l'avoir aidé !!! T'es bon en info mais pour le reste .... :rtfm:

Lien à poster
Partager sur d’autres sites

Membre, 32ans Posté(e)
Bobzy Membre 79 messages
Baby Forumeur‚ 32ans‚
Posté(e)

Pour le reste aussi... :rtfm:

Enfin c'est pas le sujet, vindediouss !!

Lien à poster
Partager sur d’autres sites

Annonces
Maintenant

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×