CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C] Aide !!!

LeBossPokemon
LeBossPokemon
Niveau 9
02 février 2014 à 13:05:51

Voilà j'ai fait un petit programme en console (en C) pour m'entrainer :

  1. include <stdio.h>
  2. include <stdlib.h>

int main(int argc, char *argv[])
{
int choixattaque = 0, niveau = 0, hasard = 0, pvsauvage = 80, pv = 80;
char nom[50] = "", nompokemon[50] = "";

printf("Quel est votre nom ?\n");
scanf("%s", &nom);
printf("Bonjour %s ! Le but de ce jeu est de faire monter son pokemon au niveau 10 !\n Choisissez-lui un prenom :\n", nom);
scanf("%s", &nompokemon);
printf("Vous vous appelez donc %s et votre pokemon %s !\n Il est pour l'instant au niveau 0.\n Le jeu commence !\n", nom, nompokemon);

while(niveau != 10)
{
printf("Entrez un chiffre entre 1 et 4 :\n");
scanf("%d", &hasard);

switch(hasard)
{
case 1:
printf("Un Yalomcombi sauvage vous attaque !\n");
break;
case 2:
printf("Un Baroula sauvage vous attaque !\n");
break;
case 3:
printf("Un Lomatok sauvage vous attaque !\n");
break;
case 4:
printf("Un Xomatalo sauvage vous attaque !\n");
break;
default:
printf("FATALE ERREUR\n");
exit(EXIT_SUCCESS);
break;
}
while(pvsauvage != 0 || pvsauvage > 0 && pv != 0 || pv > 0)
{
printf("Choisissez une attaque :\n\n 1.Charge 2.Rugissement\n Inflige 30 degats Inflige 40 degats tout en vous en enlevant 20\n\n");
scanf("%d", &choixattaque);

switch(choixattaque)
{
case 1:
pvsauvage -= 30;
printf("Le pokemon sauvage a maintenant %d PV !\n", pvsauvage);
break;
case 2:
pvsauvage -= 40;
pv -= 20;
printf("Le pokemon sauvage a maintenant %d PV !\n\n %s en perd 20 et en a donc %d !\n", pvsauvage, nompokemon, pv);
break;
default:
printf("FATALE ERREUR\n");
exit(EXIT_SUCCESS);
break;
}

if(pvsauvage == 0 || pvsauvage < 0)
{
printf("Bravo %s !\n Vous avez mis KO le pokemon sauvage !\n%s gagne un niveau !\n\n\n", nom, nompokemon);
niveau ++;
pv = 80, pvsauvage = 80, hasard = 0;
}
pv -= 30;
printf("Le pokemon sauvage vous attaque !\n Il utilise charge ! %s perd 30 PV ! Il en a maintenant %d !\n\n", nompokemon, pv);

if(pv == 0 || pv < 0)
{
printf("GAME OVER !!!");
exit(EXIT_SUCCESS);
}
if(niveau == 10)
{
printf("Bravo %s !\nVous avez fini le jeu !!!\n", nom);
exit(EXIT_SUCCESS);

}
}
}

return 0;
}

Le problème c'est que quand le pokemon sauvage est KO je remet les vies à 80 pour qu'un autre combat commence mais justement la boucle redevient vraie car les PV sont à 80, donc un autre combat ne commence pas.

Comment faire pour contourner le problème ? :svp:

godrik
godrik
Niveau 30
02 février 2014 à 17:50:46

Il faut que tu reinitialise ces variables APRES la boucle d'un combat. un truc du genre:
while (niveau != 10) {
//choix de l'adversaire

//combat a proprement parler
while (pv > 0 && pv_adversaire>0) {
}
//reinitialise varaible de combat.

}

CavalierAnal
CavalierAnal
Niveau 8
02 février 2014 à 18:03:12

Pas de rapport, mais tu peux aussi te renseigner sur la fonction rand() qui te donne un nombre aléatoire entre 0 et 1.

Ca te permettra de faire un choix vraiment aléatoire de l'adversaire, et de faire des attaques qui ne renvoient pas toujours le même résultat :)

Par exemple au lieu d'enlever "40", tu peux enlever "(int) 30 + 20*rand()" qui fera un entier entre 30 et 50.

Pseudo supprimé
Pseudo supprimé 02 février 2014 à 22:21:15

Salut :)

J'ai chipoté un peu dans ton code, j'ai amélioré certaines choses, j'ai résolu ton problème et j'ai enlevé tous tes warnings.

Je n'ai cependant pas vraiment changé ta structure logique pour que tu puisses t'y retrouver.

http://pastebin.com/AFTXD8X1

Compile, joue, et ensuite analyse-le pour voir ce qu'il y a de différents :ok:

Pseudo supprimé
Pseudo supprimé 02 février 2014 à 22:36:25

Désolée du double poste, mais des j'ai des suggestions à te proposer. Tu pourrais :

---

- Indiquer à quel niveau se trouve le pokémon du joueur à la fin d'un combat

- Utiliser la fonction de nombre pseudo-aléatoires citée ci dessus au lieu de laisser le choix au joueur

- Demander au joueur si il veut recommencer une partie quand le jeu se fini, c'est à dire soit si tu gagnes, soit si tu perds

- Indiquer à la fin d'un combat combien de tours ont été nécessaire pour tuer le pokémon

- Indiquer si le joueur a gagné combien de tours ont été effectués au total

- Faire attendre le programme quand tu effectues une action (pour que ça soit plus joli)

---

Plus tard quand tu auras vu les pointeurs :

---

- Créer un fichier qui contiendra le nom de tous tes pokémons. Effectuer un seul printf pour dire quel pokémon t'attaque.

---

Voilà, on pourrait encore trouver pleins de trucs de ce genre :oui:

dxtreme01
dxtreme01
Niveau 7
02 février 2014 à 23:13:01

Coucou :)
Même si ça ne va servir à rien je me suis amusée à refaire ton code C# en Java!
http://pastebin.com/UxVNmGex
C'est comme ça que je fait passer le temps quand je m'ennuie :p)

Sinon tu en as de la chance @lebosspokemon, @VampireGirl t'a donner de beau petit exercices moi je sauterais sur l'occasion de les faire :-)
Pour un passionné de Programmation c'est toujours amusant de ce faire des petits exercices comme ceux là :coeur:

Bref, bye bye Mrs lebosspokemon et Mlle VampireGirl ^,...,^

dxtreme01
dxtreme01
Niveau 7
02 février 2014 à 23:18:16

N’empêche pensez à faire attention à la convention de nommage, :ok: il y en à une en Java et je suppose qu'en C# aussi, et je pense qu'il faut quand une variable est composé de plusieurs mot écrire les premières lettres des autres mot en majuscule :
Exemple:
"pvsauvage" :d) "pvSauvage"
"nompokemon" :d) "nomPokemon"
"petitevoiturerouge" :d) "petiteVoitureRouge"

Bon j'y vais cette fois :-) Il se fait tard :cute:

Pseudo supprimé
Pseudo supprimé 02 février 2014 à 23:24:58

dxtreme01, c'est clair, je n'ai rien changé à ce niveau pour ne pas qu'il s'embrouille :p)

Mais en effet pour la clarté du code il vaudrait mieux que tu adoptes des conventions l'auteur. Par exemple :

pv_sauvage ou pvSauvage

Pseudo supprimé
Pseudo supprimé 02 février 2014 à 23:33:09

Pas mal sinon en java :p) Je n'en ai jamais fait mais c'est vrai que sa syntaxe ressemble fort au C.

dxtreme01
dxtreme01
Niveau 7
02 février 2014 à 23:58:28

@VampireGirl Oui justement :-) quand j'ai lut le code de @lebosspokemon ça m'a rappeler quand je commencais à programmer au tout début en console (Que de bon souvennir :cute: ) Et c'est ce qui m'a donner en plus d'avoir du temp libre envie de refaire son code en Java :)

Pseudo supprimé
Pseudo supprimé 03 février 2014 à 01:12:11

Oui je comprends :o))
Moi ça me donne envie de faire un jeu en console.

J'ai un ami qui a beaucoup d'idées en plus (choses qui me manque).

dark_drow
dark_drow
Niveau 15
03 février 2014 à 09:16:12

Juste une remarque au passage pour le code Java : le exit(1) signifie une sortie d'erreur, ce qui n'a pas l'air d'être le cas :)

dxtreme01
dxtreme01
Niveau 7
03 février 2014 à 17:22:37

@VampireGirl Pourtant tu en à lister pas mal dans ton commentaire plus haut! :-)
https://www.jeuxvideo.com/forums/1-47-95617-1-0-1-0-c-aide.htm#message_95657
J'ai du mal à croire que tu manque d'idée facilement toi. :o))
Mais c'est vrais que c'est toujours mieux de coder à partir d'une idée déjà toute prête, de ne pas coder au fur et à mesures quoi :)

@Dark_drow Merci pour l'info :-))) Personnellement j'utilise jamais les System.exit() on m'a dit que c'était trop "brutale" et donc la plus part du temps je m'arrange avec des procéder en cas d’erreurs :noel:
Peut-être que j'utiliserais plus souvent les exit() maintenant qui sait :-)
Ça pourrais rendre mes code plus léger :ok:

Pseudo supprimé
Pseudo supprimé 03 février 2014 à 19:54:11

Dark_drow, je crois savoir pourquoi il a fait cette erreur, ça vient du code original de l'auteur. La sortie en cas d'erreur était mise sur "EXIT_SUCCESS". Je me trompe peut être m'enfin :o))

dxtreme01, c'est surtout les idées d'histoire, de contexte qui me manque :o))

LeBossPokemon
LeBossPokemon
Niveau 9
03 février 2014 à 21:25:23

Merci pour tout, et si j'ai appris les pointeurs et je suis en train d'apprendre à se servir de la SDL mais j'avais envie de refaire un petit programme console :-)

LeBossPokemon
LeBossPokemon
Niveau 9
03 février 2014 à 21:50:10

Ah oui et comment faire attendre le programme ? En faisant un :

for(repeteur = 0 ; repeteur ‹ 99999999999999999999999999999999999999999999999999
99999999
; repeteur ++);

:question:

Pseudo supprimé
Pseudo supprimé 03 février 2014 à 22:11:46

Il y a pleins de façon de faire, j'imagine que certaines sont à éviter car trop de calculs demandés au processeur.
Tu pourrais utiliser la fonction delay par exemple.

Si tu as déjà vu les pointeurs, j'imagine que tu as déjà vu les structures alors.

Ca serait cool pour la clarté de ton code de créer une structure "entité" qui contiendrait le nom, la vie et le niveau de l'entité par exemple.

Pseudo supprimé
Pseudo supprimé 03 février 2014 à 22:20:40

Il existe apparemment la fonction sleep() mais elle est valable pour les environnements qui respectent la norme POSIX.

LeBossPokemon
LeBossPokemon
Niveau 9
03 février 2014 à 22:25:55

Ouais c'est vrai pour les structures, mais bon...

+ Je n'ai appris ni sleep() ni delay() (mais que je vais apprendre bientôt)

Est-ce que tu pourrais m'expliquer leur fonctionnement s'il-te-plaît ? :-)

Pseudo supprimé
Pseudo supprimé 03 février 2014 à 22:53:33

Ah je te raconte n'importe quoi :fou: La fonction existe bien mais n'est pas intégrée au langage en tant que tel. Sinon elle est simple d'utilisation. Il suffit de lui indiquer en milliseconde l'attente désirée.

Je vais te cherche autre chose.

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment