Bienvenue sur JeuxOnLine - MMO, MMORPG et MOBA !
Les sites de JeuxOnLine...
 

Panneau de contrĂ´le

Recherche | Retour aux forums

JOL Archives

Ma solution pour la leçon 6

Par Maître Lapin le 14/7/2001 à 19:06:00 (#26328)

Je ne suis pas informaticien, c'est pour le plaisir d'entendre des critiques constructives que je poste mes trouvailles :p

//leçon 6

#include <stdio.h>
#include <NWScript.h>

int nHP=10; //variable sur les points de vie
int nOrcs=0; //variable sur le nombre d'Orcs
int Comptevie (int nInfo) //première fonction examinant les points de vie
{
if (nInfo==0)
PrintString ("Vous etes repartis vers votre quete, mais vous etes mort!");
else
{if (nInfo==1)PrintString ("Vous etes repartis,avez tue plusieurs monstres et etes restes en vie.");
else
PrintString ("Vous etes repartis,vous n'avez trouve aucun monstres, mais vous etes toujours en vie.");}
}

int Orcs (int nInfo2) //seconde fonction, examinant le nombre d'Orcs
{
if (nInfo2>=10)
{PrintString ("Il y a trop d'orques... Je suis mort."); nHP=0;}
else
{
if (nInfo2==0)
PrintString ("Il n'y a pas de monstres ici.");
else
{PrintString ("Prends ca, camarade!");
nHP=1;}
}
}

main () //début du programme
{
Orcs (nOrcs); //appel de la fonction Orcs
Comptevie (nHP); //appel de la fonction Comptevie
PrintString ("\n"); //aller Ă  la ligne
nOrcs+=8; //augmentation du nombre des orcs
Orcs (nOrcs);
Comptevie (nHP);
PrintString ("\n");
nOrcs+=12; //seconde augmentation du nombre d'Orcs
Orcs (nOrcs);
Comptevie (nHP);
}

Ce script fonctionne.

Par Myvain le 14/7/2001 Ă  19:12:00 (#26329)

Tu ne devrais pas mettre ta solution sur le forum, il vaut mieux éviter de dévoiler les solutions à tout le monde trop tôt. Mieux vaut laisser chacun chercher un peu, c'est comme ça qu'on progresse...

[ 14 juillet 2001: Message édité par : Myvain ]

Par Darkmore le druide le 14/7/2001 Ă  19:43:00 (#26330)

Débat lancé par Mariane:
Prends ca, camarade!

Euh t'accepte les critiques non constructive ... :D :D :D .. non oublie c'est une private joke !

Sinon Myvain a un peu raison mieux vaut ne pa tenter les newB de lire ta solution !!

Pour répondre rapidemment sache qu'un script qui marche n'est pas preuve d'un code parfait .. certaines erreurs se compensent parfois ou tu as simplement de la chance .. ;)

Heu Myvain j'ai droit de répondre plus clairement ??

Par Maître Lapin le 14/7/2001 à 20:48:00 (#26331)

Je suis désolé, je n'avais pas pensé à ça. Je voulais simplement savoir si ce que j'avais fait été correct, parce que n'étant pas informaticien, je n'ai aucun moyen de le savoir.
N'hésitez pas à effacer mon post précédent, et encore mille excuses!

Par Uther Pendragon le 14/7/2001 Ă  21:11:00 (#26332)

Hihi. Comme quoi mes traductions sont quand utiles Ă  certain(e)s. :p

Et perso, je trouve le titre du message assez explicite pour que qql'un n'ayant pas encore fait l'exercice passe son chemin, s'il le souhaite. :)

Sinon, concernant le script, je me trompe peut être (surement ;)), mais je me demande s'il n'y a pas des pairs d'accolades superflux (si qql'un de plus expérimenté pouvait confirmer / infirmer)...
Et je trouve que ce script (en général) serait plus intéressant si le nombre d'orques était généré aléatoirement... mais il est un peu tôt pour ce genre de choses. ;) Là encore, si qql'un à des infos sur la marche à suivre... :p

Par Korny le 14/7/2001 Ă  21:43:00 (#26333)

Heu... bonjour Ă  tous :)

Je vous previent d'avance: je suis un gros Newbie du programmage (mais je suis prince, alors respect quand meme :p)

J'ai une question:
j'ai remarqué qu'on était plus obligé de déclarer une "string" pour l'afficher depuis la mise a jour de "NWScript.h".
Pour afficher "Bonjour" par exemple, on peut mettre:

string sBonjour = "Bonjour";

main()
printstring (sBonjour);


Ou plus simplement:

Main()
printstring ("Bonjour");


Enfin, j'espere que je me suis pas trompé.

Alors ? Qu'est-ce qui est préférable de faire ??

[ 15 juillet 2001: Message édité par : Korny ]

Par Maître Lapin le 14/7/2001 à 22:16:00 (#26334)

Oui, tu peux bien écrire cela. Je ne sais pas si c'est mieux, mais c'est plus rapide et plus intuitif! ça ressemble à une fonction "print" du basic, moi en tout cas je préfère :)

Par Darkmore le druide le 14/7/2001 Ă  22:57:00 (#26335)

Pas grave Mariane pas grave ;)

Pour Korny -->
Les deux marchent (Ă  condition de ne pas oublier accolades et point virgule ;) )
Mais si tu utilises la première formule tu pourras assigner une autre valeur à sBonjour dans ton prog ce qui peut être intéressant ...

Pour Uther -->
En fait les nombreuses accolades (je n'en vois pas en trop :confused: ) viennent d'une utilisation abusive ( ;) ) de la structure if_else ..

La génération (??) de variables aléatoire en C se fait grace aux fonction srand et rand dans le header stdlib.h ...
Regarde dans l'aide de MiracleC il y a qq mots sur les fonctions fournies par les headers et leurs modes de fonctionnement

Pour Marianne --> il y a quand mĂŞme un truc bizarre dans tes fonctions ..

int CompteVie(int nInfo)

...c'est bien mais pas top :D
Comme ta fonction ne retourne rien et affiche seulement de truc tu peux te contenter de

void CompteVie(int nInfo)

Par contre la fonction Orcs (pour moi) doit bien retourner qq chose .. elle retourne le nombre de pt de vie ... d'après le scénario

Donc

int Orcs(int nInfo2)

c'est bon mais tu n'utilise pas le return ????? tel quel ta fonction ne renvoie rien du tout !!
De plus quand tu utilise cette fonction tu ne vas mĂŞme pas chercher la valeur qu'elle devrait te retourner d'ou

Orcs(nOrc) au lieu de

nHP=Orcs(nOrcs) !!!

Je "crois" que ça marche parce que tu utilises la même variable dant ton prog et dans ta fonction ... donc en appelant la fonction tu modifie la variabmle.
Mais si tu lance le prog en changeant lla déclaration du début nHP=10 en nVie=10 ça devrait pas être bon ...
A moins que je me trompe ce qui n'est pas a exclure ... :confused: :confused:

EDIT // erm j'ai vériffié et il "semble" que j'ai raison DSL !! :(

[ 14 juillet 2001: Message édité par : DaRKmore Le Druide ]

Par Korny le 15/7/2001 Ă  0:39:00 (#26336)

Merci DaRKmore, c'est ce que je pensais :).

Par Aliabastre le 15/7/2001 Ă  1:35:00 (#26337)

Débat lancé par Mariane:
Je suis désolé, je n'avais pas pensé à ça. Je voulais simplement savoir si ce que j'avais fait été correct, parce que n'étant pas informaticien, je n'ai aucun moyen de le savoir.

Personnellement, je suis incapable d'en vouloir Ă  quelqu'un qui met une citation de Desproges dans sa signature ;)

Par Maître Lapin le 15/7/2001 à 9:18:00 (#26338)

Houlà!! ça me semblait lourd, mais en fait c'était carrément faux!! Merci DarKMore. Je vais essayer de faire mieux!

Par Darkmore le druide le 15/7/2001 Ă  12:58:00 (#26339)

Mais de rien Mariane .. et c'est vrai que ta citation est tout Ă  fait lolesque :D :D !!

Je m'étonne par ailleurs que Aliabastre n'ait pas encore fait de la "pub" pour le NEXUS COMIC de Neverwinter nexus (hé oui) .. c'est bien tordu et bien fun ... hey macarenna arf j'adore :D

Par Myvain le 15/7/2001 Ă  13:19:00 (#26340)

Ouh là là, Marianne, surtout ne prend pas mal ma remarque, c'était juste une remarque comme ça :) . Et comme le dit Uther, on est pas obligé de regarder... Même si ça peut tenter certains (il y en a bien qui joue avec des soluces sous les yeux) :rolleyes: .

Sinon ,au niveau des accolades, je pense qu'Uther voulais parler de la ligne suivante:

{PrintString ("Il y a trop d'orques... Je suis mort."); nHP=0;}


Elle n'est pas en trop, c'est simplement qu'il manque le retour Ă  la ligne:

{
PrintString ("Il y a trop d'orques... Je suis mort.");
nHP=0;
}

Pour éviter ces petits désagréments, et faciliter la lecture, une convention veut qu'une accolade ouvrant se trouve allignée (verticalement) avec son accolade fermante respective. Celà nécessite donc de décaller les accolades chaque fois qu'on en ouvre une.
Ce n'est qu'un conseil et non une obligation, mais pour le script de Marianne, ça donnerait celà:

//leçon 6

#include <stdio.h>
#include <NWScript.h>

int nHP=10; //variable sur les points de vie
int nOrcs=0; //variable sur le nombre d'Orcs
int Comptevie (int nInfo) //première fonction examinant les points de vie
{
if (nInfo==0)
PrintString ("Vous etes repartis vers votre quete, mais vous etes mort!");
else
____{
if (nInfo==1)PrintString ("Vous etes repartis,avez tue plusieurs monstres et etes restes en vie.");
else
PrintString ("Vous etes repartis,vous n'avez trouve aucun monstres, mais vous etes toujours en vie.");
____}
}

int Orcs (int nInfo2) //seconde fonction, examinant le nombre d'Orcs
{
if (nInfo2>=10)
____{
PrintString ("Il y a trop d'orques... Je suis mort.");
nHP=0;
____}
else
____{
if (nInfo2==0)
PrintString ("Il n'y a pas de monstres ici.");
else
________{
PrintString ("Prends ca, camarade!");
nHP=1;
________}
____}
}

main () //début du programme
{
Orcs (nOrcs); //appel de la fonction Orcs
Comptevie (nHP); //appel de la fonction Comptevie
PrintString ("\n"); //aller Ă  la ligne
nOrcs+=8; //augmentation du nombre des orcs
Orcs (nOrcs);
Comptevie (nHP);
PrintString ("\n");
nOrcs+=12; //seconde augmentation du nombre d'Orcs
Orcs (nOrcs);
Comptevie (nHP);
}


Au niveau des nombres aleatoires, si mes souvenirs sont bons,cela se fait de la manière suivante:

#include <stdlib.h>
(...)
int nOrcs; //variable sur le nombre d'Orcs
(...)
nOrcs=rand(); //attibue un nombre aléatoire compris entre 0 et32767 à la variable nOrcs

Pour éviter d'avoir un 0 (zero orcs), mieux vaut donc incrémenter(+1) cette variable, soit après un test qui verifie que le chiffre est différent de 0,
soit en incrémentant à chaque fois:
nOrcs=rand();
nOrcs++; ou nOrcs=nOrcs+1;

J'espère ne pas mettre tromper :p et je prie Marianne de bien vouloir me pardonner d'avoir été "sévère" avec lui( ;) ) :)

//Edit: Je comprend maintenant ce qui est arrivé eu niveau des accolades, le forum ne gère pas les espaces pour alignée les accolades entre elles. J'ai donc mis des ____
pour simuler ces espaces et rendre le script plus lisible. C'est sans doute ce qui est arrivé à Marianne aussi....Tant pis un coup dans l'eau Myvain :rolleyes: :p

[ 15 juillet 2001: Message édité par : Myvain ]
;)

[ 15 juillet 2001: Message édité par : Myvain ]

Par Darkmore le druide le 15/7/2001 Ă  13:29:00 (#26341)

Et pis il faut alligner les fonctions avec les accolades pour faire de zolie bloque bien lisible ... :rolleyes:
Mais en fait le seul truc oĂą tu te trompe c'est que mariane est (apriori) un mec ... :D :D :D

Par Myvain le 15/7/2001 Ă  13:44:00 (#26342)

Hop, hop, relis les posts...va jeter un oeil dans le profil de Marianne...hop...une petite edition du message précedent...hop, hop, c'est réglé. :D

Merçi Darkmore, on a frôlé l'incident diplomatique :D

Maintenant tu as le droit de dire que je suis fort, beau et intelligent (et modeste :rolleyes: )

Sinon, pour l'alignement des fonctions, Darkmore le grand (Darkie ;) lol ) a raison, c'est plus lisible quand chaque bloc est aligné comme pour les accolades.
Que feriont nous sans lui!!!! (pommadepommade)

Par Darkmore le druide le 15/7/2001 Ă  14:59:00 (#26343)

Débat lancé par Myvain:
Maintenant tu as le droit de dire que je suis fort, beau et intelligent (et modeste :rolleyes: )

*Se jette au pieds de Myvain et lui embrasse les orteils dans le sens inverse des aiguilles d'une montre*


*comme le veut la tradition*
:D :D :D :D

Par Aliabastre le 15/7/2001 Ă  16:05:00 (#26344)

Débat lancé par DaRKmore Le Druide:
Je m'étonne par ailleurs que Aliabastre n'ait pas encore fait de la "pub" pour le NEXUS COMIC de Neverwinter nexus (hé oui) .. c'est bien tordu et bien fun ... hey macarenna arf j'adore :D


Bon, puisque tu me cherches ... ;)
Lukahn et Loghan se sont lâchés avec les Screenshots de Neverwinter Nights, et le résultat de leurs exactions a donné le "Nexus Comics" rebaptisé depuis "Two Subtle Crossroads". Bon évidemment, c'est en anglais, et il y a parfois des private jokes, mais sinon, c'est assez marrant :D
N'hésitez pas à visiter la Salle du Trésor du Nexus, elle est faite pour cela ;)
Toujours parmi les productions du Nexus, j'aime beaucoup le "Neverwinter Nights Triathlon" de Qwen :D

Par Darkmore le druide le 15/7/2001 Ă  17:02:00 (#26345)

Débat lancé par Aliabastre:
Toujours parmi les productions du Nexus, j'aime beaucoup le "Neverwinter Nights Triathlon" de Qwen :D
Arf je l'adore celle lĂ  encore mieux que Simple!
En fait c'est mieux que ça parce que c'est le Triathalon !!!
Il faut absolument que Uther voit ça !

Mais je suis par encore remis du Hey Macarenna :D :D :D

Par Aliabastre le 15/7/2001 Ă  21:38:00 (#26346)

Débat lancé par DaRKmore Le Druide:
Mais je suis par encore remis du Hey Macarenna :D :D :D


Pour ceux qui se souviennent, c'est un clin d'oeil suite au commentaire d'un gars de chez Bioware dont le premier exercice de script a été de faire danser la Macarena à une bande de Loup-Garous :D
Pour la private joke, "Olor" voulait faire référence à Rolo Kipp (Olor=Rolo inversé), un des pères fondateurs du Nexus, dont j'ai fait la connaissance sur les premiers forums officiels il y a 2 ans maintenant...

Par Korny le 15/7/2001 Ă  21:52:00 (#26347)

La solution de la leçon 6 est sorti.
Vous pouvez la trouver ICI

Moi, perso, j'y serai pas arrivé... j'ai trop de mal avec la leçon 5 et ses saletés de fonctions :( http://community.theunderdogs.org/smiley/misc/wzbigcry.gif

Par Darkmore le druide le 15/7/2001 Ă  23:32:00 (#26348)

Débat lancé par Korny:
La solution de la leçon 6 est sorti.
Vous pouvez la trouver ICI

Moi, perso, j'y serai pas arrivé... j'ai trop de mal avec la leçon 5 et ses saletés de fonctions :(

Bah si t'a un problème demande on est là pour ça mon ptit gnou ... on est tes amiiiiiiiis ... aller prend un kleenex

:D :D :D

Par Korny le 16/7/2001 Ă  0:09:00 (#26349)

Merci Darkmore (puissant Druide ou vieux retraité dans un potager ??)

Bah, au fait j'ai vraiment du mal avec les fonctions... c'est tout.

Par Korny le 16/7/2001 Ă  14:32:00 (#26350)

En fait, j'ai pas trop compris les trucs avec les "void" et les "return"....

Par Paoh le 16/7/2001 Ă  15:33:00 (#26351)

la syntaxe d'une fonction est

type_retour nom_fonction (parametres_fonction)
{
// Code de la fonction
return variable_de_retour; // Variable retournée dans le code
// cette variable doit être du type déclaré ci-dessus (type_retour)
}

Dans le cas ou ta fonction ne retournes pas d'information
(comme les fonctions qui sont dans NWScript.h)
au lieu de mettre le type de la variable que tu retournes, tu mets void (qui signifie "vide").
Cela veut dire qu'il n'y aura pas de return dans ta fonction.

Tentative d'exemple :D :

...
int AjouteTrois (int nChiffre) // fonction qui ajoute 3 Ă  un entier
{
int nNouveauChiffre;
nNouveauChiffre = nChiffre + 3;
return nNouveauChiffre;
}
...
int nChiffre = 2; // Appel de la fonction
if ((AjouteTrois(nChiffre)) == 5) PrintString("hum pourquoi pas");
...

Le code est dix fois trop lourd (et inutile) mais c'est pour l'exemple : le type de la variable retournée est int.
Le return sert à renvoyer la réponse là ou a été appelée la fonction !

J'espère ne pas avoir fait d'erreurs.. :D
Je suis sûr que c'est un peu bordélique comme explication alors n'hésites pas à continuer à poser des questions là-dessus, c'est important de comprendre ça :)

[ 16 juillet 2001: Message édité par : Paoh ]

Par Korny le 16/7/2001 Ă  17:15:00 (#26352)

merci Paoh, avec ce que j'ai lu un peu partout, tu sembles etre un expert de la programmation...

Sinon, je CROIS avoir compris.... mais je suis pas tout a fait sûr. j'ai cru lire que des nouveaux exercices sont préparés pour les debutants sur les leçon passées, on verra bien.... je vais ré-étudier la leçon 5. Y a que ça qui bloque, le reste ça va.

Par Paoh le 16/7/2001 Ă  17:18:00 (#26353)

Débat lancé par Korny:
tu sembles etre un expert de la programmation...


C'est très gentil, mais c'est pas sympa pour les vrais programmeurs. Je ne m'y remets que pour NWN ! :)

Par Maître Lapin le 16/7/2001 à 18:44:00 (#26354)

Euh oui, désolé, mais je suis un homme! Mariane est le premier personnage que j'ai joué à aD&D 1ère édition. J'avais remarqué qu'il n'y avait que des gars parmi les PJs et j'avais voulu équilibrer... ça a très (trop?) bien marché! Tout le monde était charmant avec moi lol
Au passage c'est la m^meme chose sur les jeux online: créez un perso féminin et tout le monde sera TRES gentil avec vous, car il y a une INFIME possibilité que vous soyiez une femme en Real Life! Dingue :)

Par Korny le 16/7/2001 Ă  18:50:00 (#26355)

Paoh:
Bah, faut bien que je te passe un peu de pommade si je veux réussir à profiter de toi ultérieurement http://community.theunderdogs.org/smiley/angry/saevil.gif http://community.theunderdogs.org/smiley/happy/lol.gif http://community.theunderdogs.org/smiley/happy/biggrin2.gif http://community.theunderdogs.org/smiley/happy/wink.gif

Par Paoh le 16/7/2001 Ă  23:42:00 (#26356)

je me disais... c'est trop bĂ´ *sob* *sob* :(

Mais bon :rolleyes: Ca va... je suis pas seul à qui tu pourras extirper la substantifique moëlle :p :p :eek: :p :p

Par Korny le 17/7/2001 Ă  16:45:00 (#26357)

Au fait, lors de la declaration d'une fonction, la variable entre parenthèse va etre remplacée par une autre variable de toute façon (donc, elle n'a pas trop d'importance), c'est ça ??

Ex:
int UpdateHits(int nMonsters)
nMonsters ne sert QUE pour la declaration.

nPlayerHP = UpdateHits(nNumberOfOrcs);
nMonsters à été remplacé par nNumberOfOrcs.

C'est un truc dans le genre, non ??

**espere avoir enfin compris**

[ 17 juillet 2001: Message édité par : Korny ]

Par Darkmore le druide le 17/7/2001 Ă  18:22:00 (#26358)

Débat lancé par Korny:
Au fait, lors de la declaration d'une fonction, la variable entre parenthèse va etre remplacée par une autre variable de toute façon (donc, elle n'a pas trop d'importance), c'est ça ??


Exact ... imagine que quand tu déclare une variable c'est en fait une boite dans laquelle tu met un peu ce que tu veux ..
A condition cependant pour que ça rentre (no comment) que la "forme" soit bonne c'est à dire que tu garde le bon type de variable.
LĂ  dans ta boite nMonsters qui est une boite Ă  integer tu places nNumberOfOrcs !! qui est un integer ...
;) ;) ouais ça parait bidon comme explication mais j'aime bien. ;) ;)


En fait il vaut mĂŞme mieux changer le nom de ta variable lors de l'utilisation ... voir pour cela l'erreur faite par mariane dans ce topic :
ça marche parce que tu utilises la même variable dans ton prog et dans ta fonction ... donc en appelant la fonction tu modifie la variable.
Mais si tu lance le prog en changeant la déclaration du début nHP=10 en nVie=10 ça devrait pas être bon ...

Par gui25 le 17/7/2001 Ă  20:46:00 (#26359)



[ 17 juillet 2001: Message édité par : gaeriel ]

JOL Archives 1.0.1
@ JOL / JeuxOnLine