Adventure Games Studio fr
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.


Forum d'entraide à la création de jeux d'aventure
 
PortailAccueilRechercherS'enregistrerConnexion
Le Deal du moment : -28%
Cuiseur à pâtes pour micro-ondes ...
Voir le deal
17.99 €

 

 Lancer son premier jeu

Aller en bas 
Aller à la page : Précédent  1, 2, 3, 4, 5, 6, 7  Suivant
AuteurMessage
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue


Nombre de messages : 1721

Date d'inscription : 01/08/2011


Lancer son premier jeu - Page 2 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu - Page 2 EmptyDim 24 Mai 2020 - 21:08

Merci pour ces infos, @Arlann !

@Baguettator a écrit:

La solution avec la baseline j'ai pas bien saisi... A quoi ça fait référence ? sourire
C'est pour si tu utilise un objet pour contenir ton image, plutôt que la dessiner sur l'arrière plan de la room. Mais dans ton cas on va rester sur l'arrière plan, ça fera l'affaire (ceci dit c'est tout-à-fait faisable avec un objet à la place, c'est une simple question de choix).

Bon j'étais un peu frustré de te laisser dans l'expectative, donc finalement j'ai bûché sur une petite proposition détaillée. ^^ Je vais faire ça sous forme de tuto pas-à-pas pour que tu comprenne au mieux le système, mais libre à toi de l'adapter à ta guise ou de faire autrement. La solution n'est sûrement pas parfaite et tu auras sûrement besoin de la rendre conforme aux petites subtilités supplémentaires de ton jeu, mais ça te donnera une base. Comme tu as déjà eu le temps d'y réfléchir, tu seras mieux armé. clin d'oeil

Attention, ça va être un long post. Mais ça, tu le vois déjà. clin d'oeil

Commençons par déclarer en haut du global_script les variables et tableaux de variables dont on aura besoin (à ajouter à celles que tu as déjà créées) :
Code:
// main global script file
int nbCartes; //Le nombre de cartes dont disposera le joueur, en fonction des extensions possédées
int nbExtensions; //Le nombre d'extensions au total (inclut le jeu de base)
int tailleExtension[]; //Le nombre de cartes contenu dans chaque extention
int carte[]; //La carte qu'on tirera au sort et affichera à l'écran

Attention : comme précisé ci-dessus, le jeu de base est considéré ici comme une extension (en l'occurrence, l'extension 0, mais on va y venir). Le terme "Extension" désigne ici tout simplement un groupe de cartes (un paquet de cartes qu'on achète en magasin et dont on connaît le contenu, en gros). Libre à toi de modifier le nom des variables comme tu l'entends. Il faudra en tout cas avoir ça en tête quand j'utiliserai le mot "extension" par la suite.
Note : Il est d'usage de considérer que le premier élément d'une liste (ou la première ligne d'un tableau) est l'élément 0. Il vaut mieux faire comme ça pour pas trop s'emmêler les pinceaux avec le fonctionnement du script, même s'il faut garder en tête certaines subtilités (le numéro du dernier élément = la taille de l'élément - 1; et non la taille de l'élément tout court).

Les crochets ne contenant rien dans la déclaration d'un int (ex : tailleExtension[]) indiquent la création d'un tableau dynamique, c'est à dire un tableau dont on ne connaît pas encore le nombre de lignes. La création d'un tableau signifie que l'on crée en fait autant de variables qu'il y'aura de lignes, et qui deviendront tailleExtension[1], tailleExtension[2], etc... Ici on aurait aussi bien pu déclarer :
Code:
int tailleExtension[3]; //Tableau contenant 3 lignes numérotées de 0 à 2
...car on sait que le nombre de lignes correspondra au nombre d'extensions. Mais plutôt que d'avoir à tout modifier à chaque fois qu'on rajoutera une nouvelle extension, autant l'automatiser.

Du coup, il faut maintenant initialiser la taille du tableau tailleExtension (en ce qui concerne le tableau carte, ça viendra un peu plus tard). On va faire ça au lancement du jeu, donc dans la fonction game_start du global_script:
Code:
function game_start()
{
  tailleExtension = new int[nbExtensions];
}

C'est comme ça qu'on déclare le nombre de lignes que contiendra notre tableau dynamique. La taille du tableau vaudra donc automatiquement nbExtensions. EDIT : J'ai légèrement changé d'approche en cours de rédaction, donc à ce stade on n'a pas encore défini cette valeur. Ce sera fait de manière dynamique avec ce qu'on va faire plus bas.

Bon, maintenant il faut importer les cartes dans l'onglet Sprites de l'arborescence, si ce n'est pas déjà fait. Je te conseille de créer un nouveau dossier pour contenir les cartes afin de mieux t'y retrouver, mais à toi de voir.
Le souci c'est que, en fonction des autres images que tu auras importé ou importera plus tard, le numéro des sprites correspondant aux cartes risque d'être un peu aléatoire (en tout cas peu de chances que ça aille de 0 à x) surtout si tu en ajoutes dans le futur. Pour gruger et mieux organiser tout ça, je te propose de créer une view (vue) qui contiendra les cartes. Normalement il en existe déjà une par défaut, tu peux la renommer "VUECARTES" (les majuscules sont facultatives ici mais seront obligatoires dans le code) :
Lancer son premier jeu - Page 2 PS1K4Ni

Maintenant que c'est fait, retourne dans ton dossier de sprites, et sélectionne les images représentant les cartes du jeu de base (s'il y a une discontinuité, tu peux les sélectionner une à une en maintenant ctrl enfoncé). Clic droit >> Assign Sprites to View, et cette fenêtre va s'ouvrir :
Lancer son premier jeu - Page 2 Vf31O0S

Sélectionne le numéro de la vue que tu as nommé "VUECARTES" (normalement c'est la 1 - une fois n'est pas coutume il n'y a normalement pas de vue 0). La Loop, qui correspond normalement à une séquence d'animation, correspondra ici à une extension. Pour le jeu de base c'est l'extension 0, donc sélectionne la Loop 0.
Fais de même avec les autres extensions (extension 1 = Loop 1, etc.).
Si tu ouvre l'onglet "VUECARTES" tu devrais obtenir quelque chose comme ça avec 3 extensions de 3 cartes chacune :
Lancer son premier jeu - Page 2 WljazqR

Bon, moi j'ai rien trouvé de mieux à mettre que des screenshots de GTA V, mais c'est pour l'exemple. ^^
Important : Pense à supprimer les loops en trop (loops ne contenant aucune image) si il y en a.
On a maintenant nos groupes de cartes bien organisés.

Sauf que le nombre d'extensions peut varier si tu en ajoute dans le futur. On va donc dire que le nombre d'extensions est le nombre de loops disponibles dans la view "VUECARTES" (eh oui, ça s'adaptera donc automatiquement, c'est pas magique ? clin d'oeil ) Tu vas donc ajouter ça au début de ta fonction game_start (juste avant la ligne qu'on a entré précédemment) :
Code:
nbExtensions = Game.GetLoopCountForView(VUECARTES);

Il va maintenant falloir que le joueur renseigne les extensions en sa possession.
Pour cela je te laisse faire ton interface à ta convenance, moi j'imagine un écran "sélectionnez vos extensions", avec des boutons pour cliquer sur les extensions correspondantes, et un petit marqueur (sûrement un bouton non cliquable) en dessous de chaque pour indiquer les extensions sélectionnées, et ensuite un bouton "valider". Dans ce cas là, tu vas créer un event on_click pour quand le joueur sélectionne l'extension 0, par exemple. Ça va donner un truc comme ça :
Code:
function btnExt0_OnClick(GUIControl *control, MouseButton button)
{
}

Si le joueur clique sur ce bouton, alors ça veut dire qu'il ajoute l'extension à sa collection de cartes à utiliser, ou bien, si elle est déjà sélectionnée, qu'il la retire. On va donc ajouter (ou retirer) le nombre de cartes correspondant à l'extension 0 :
Code:
function btnExt0_OnClick(GUIControl *control, MouseButton button)
{
  if (tailleExtension[0] == 0) {
    tailleExtension[0] = Game.GetFrameCountForLoop(VUECARTES, 0);
    btnSelectExt0.Visible = true;
  }
  
  else {
    tailleExtension[0] = 0;
    btnSelectExt0.Visilbe = false;
  }
}
  }

Par défaut, la taille de l'extension est 0 (ne contient pas de cartes). Si on la sélectionne alors la taille de l'extension doit correspondre au nombre de cartes disponibles, qui correspond à la loop 0 de la view VUECARTES. On fait apparaître le bouton qui indique que l'extension est sélectionnée. Si c'est déjà le cas on fait l'inverse.

Note : Peut-être que tu veux que le jeu de base soit obligatoire, et ce serait logique. Dans ce cas tu as juste à recopier cette ligne dans le game_start, juste après ce qu'on y a déjà ajouté :
Code:
tailleExtension[0] = Game.GetFrameCountForLoop(VUECARTES, 0);

Pour les autres boutons d'extensions eh bien tu n'as plus qu'à reproduire la même chose que précédemment, en remplaçant le numéro de l'extension 0 par le numéro correspondant à chaque fois (et sur toutes les lignes !). De cette manière, tu n'auras jamais à définir la taille de chaque extension manuellement ! Ce sera automatiquement mis à jour si tu ajoute ou supprime des cartes dans la Loop correspondante.
Tout va bien ? Parfait, passons à la suite.

Les choses vont maintenant se corser. Quand le joueur clique sur "Valider", il va falloir initialiser les cartes, c'est-à-dire non seulement déterminer avec combien de cartes on va jouer au total, mais faire correspondre les cartes 0 à nbCartes-1 à leurs images respectives.

Tout ce qui va suivre est à mettre dans la fonction on_click du bouton "Valider".

Commençons déjà par déterminer le nombre de cartes. C'est simple, il suffit d'additionner la taille de chaque extension (étant donné que celles qui n'ont pas été sélectionnées sont égales à 0). On va donc dire à AGS d'additionner les extensions jusqu'à ce qu'on y soit arrivé à bout. Pour ça, il existe un mot-clé très pratique, le mot-clé while. Celui-ci exécute en boucle des instructions tant que les conditions sont vérifiés. On va donc partir de 0, et ajouter le nombre de cartes contenues dans l'extension 0, puis passer à 1 pour ajouter le nombre de cartes contenues dans l'extension 1, etc, et quand la valeur dépasse la dernière extension, on s'arrête. En code, ça ressemble à ça :
Code:
int i = 0; //la valeur de départ
  while (i < nbExtensions){ //tant que la valeur est en dessous du nombre total d'extensions existantes
    nbCartes = nbCartes + tailleExtension[i]; //on ajoute le nombre de cartes correspondante
    i++; //on passe à la valeur suivante
  }
  carte = new int[nbCartes]; //on connaît maintenant le nombre de cartes à utiliser, alors on peut mettre à jour le tableau
  

Maintenant qu'on connaît la taille du tableau contenant les cartes, il va falloir le remplir. Il faut imaginer un tableau dont la première colonne sera le numéro de la carte, allant de 0 à la dernière carte (8, dans notre exemple à 9 cartes avec toutes les extensions cochées), et la deuxième colonne sera le sprite correspondant à ladite carte. Le programme va remplir la deuxième colonne ligne par ligne, et pour se faire, nous allons encore une fois utiliser une boucle while. Pour la première ligne, on doit ajouter la première carte de la première extension, donc vérifier si le joueur utilise cette extension (normalement oui si la première est obligatoire mais peu importe) donc vérifier si cette extension contient des cartes. Si elle en contient, alors on met à la première ligne la première carte de l'extension. Sinon, on passe à l'extension suivante. Pour la deuxième ligne, on passe à la carte suivante de l'extension, et ainsi de suite. Quand on arrive au bout de l'extension, on passe encore une fois à l'extension suivante. On s'arrête quand il y a autant de lignes remplies qu'il y a de cartes utilisées par le joueur.
On va donc avoir besoin d'un peu plus de variables. Il faut déjà connaître le numéro de la ligne qu'on est en train de remplir, j'ai appelé ça "numCarte" (pour numéro de la carte). Il faut aussi avoir le numéro de l'extension correspondante, que j'ai appelé "numExtension". Enfin, il faut connaître la carte à laquelle on est rendu dans l'extension en cours (est-ce qu'on est à la première carte de l'extension, à la dernière ?) afin de savoir quelle carte attribuer et de pouvoir passer à l'extension suivante quand on a fini de "scanner" la précédente. On peut déclarer ces variables en une seule ligne, comme ça :

Code:
int numCarte = 0, numExtension = 0, rang = 0;

(attribuer une valeur 0 est facultatif, car c'est la valeur par défaut, mais ça permet d'y voir un peu plus clair)

Bien, maintenant qu'on a vu la théorie (encore un peu abstraite, j'entends bien) et défini les variables, on peut se lancer :

Code:
while (numCarte < nbCartes){
    if ((numExtension < 0) || (numExtension > nbExtensions)) AbortGame("numExtension invalide (%d)", numExtension); //Message d'erreur si on a une valeur inattendue ici. Rappel : || signifie "ou".
    if (rang >= tailleExtension[numExtension]) { //Si on a fini de "scanner" l'extension en cours, alors on passe au rang 0 de l'extension suivante
      numExtension++;
      rang = 0;
    }
    while (tailleExtension[numExtension] == 0) numExtension++; //Si l'extension n'est pas utilisée, alors on passe à la suivante, et on continue jusqu'à trouver une extension utilisée.
    ViewFrame* frame = Game.GetViewFrame(VUECARTES, numExtension, rang); //La carte correspondante dans la vue VUECARTES (on vient de déclarer un pointeur qui renverra une image contenue dans une Loop elle même contenue dans une View).
    carte[numCarte] = frame.Graphic; //On attribue à la carte le numéro du sprite correspondant
    rang++; //On passe à la carte suivante dans l'extension
    numCarte++; //On passe à la ligne suivante du tableau
  }//et on remonte au début du "while"

J'espère ne pas avoir fait d'erreur là dedans parce que c'est pas gagné. ^^ Mais dans mes tests rudimentaires ça fonctionnait.

On est arrivé à la fin du code de notre bouton valider ! Je remet ici à quoi ça doit ressembler dans son ensemble :

Code:
function btnValiderExtensions_OnClick(GUIControl *control, MouseButton button){
  nbExtensions = Game.GetLoopCountForView(VUECARTES);
  
  int i = 0; //la valeur de départ
  while (i < nbExtensions){ //tant que la valeur est en dessous du nombre total d'extensions existantes
    nbCartes = nbCartes + tailleExtension[i]; //on ajoute le nombre de cartes correspondante
    i++; //on passe à la valeur suivante
  }
  carte = new int[nbCartes]; //on connaît maintenant le nombre de cartes à utiliser, alors on peut mettre à jour le tableau
  
  int numCarte = 0, numExtension = 0, rang = 0;
 while (numCarte < nbCartes){
    if ((numExtension < 0) || (numExtension > nbExtensions)) AbortGame("numExtension invalide (%d)", numExtension); //Message d'erreur si on a une valeur inattendue ici. Rappel : || signifie "ou".
    if (rang >= tailleExtension[numExtension]) { //Si on a fini de "scanner" l'extension en cours, alors on passe au rang 0 de l'extension suivante
      numExtension++;
      rang = 0;
    }
    while (tailleExtension[numExtension] == 0) numExtension++; //Si l'extension n'est pas utilisée, alors on passe à la suivante, et on continue jusqu'à trouver une extension utilisée.
    ViewFrame* frame = Game.GetViewFrame(VUECARTES, numExtension, rang); //La carte correspondante dans la vue VUECARTES (on vient de déclarer un pointeur qui renverra une image contenue dans une Loop elle même contenue dans une View).
    carte[numCarte] = frame.Graphic; //On attribue à la carte le numéro du sprite correspondant
    rang++; //On passe à la carte suivante dans l'extension
    numCarte++; //On passe à la ligne suivante du tableau
  }//et on remonte au début du "while"
}

Bien sûr, il faudra que tu ajoutes ce que tu veux qu'il se passe pour le joueur quand il appuiera sur le bouton, parce que tout ça se passe en tâche de fond et le joueur aura l'impression que cliquer sur le bouton n'aura eu aucun effet.

Bien. Il ne reste plus qu'à tirer au sort les cartes et à les afficher. Ça je ne sais pas exactement comment tu vas procéder. Moi, pour mes tests j'ai fait ça en appuyant sur la touche espace, mais tu pourras adapter comme tu veux. J'ai aussi déterminé que le tirage se passerait dans la room 2. Voici comment mettre à jour l'arrière plan de la pièce en fonction du tirage :
Code:
else if (keycode == eKeySpace){
    if (player.Room != 2) player.ChangeRoom(2); //Si on n'est pas déjà dans la room de tirage, on s'y rend
    int tirage = Random(nbCartes - 1); //Si on a 9 cartes, alors on veut obtenir une valeur entre 0 et 8.
    DrawingSurface* surface = Room.GetDrawingSurfaceForBackground(); //On crée une surface de dessin nommée "surface" contenant l'arrière plan de la room.
    surface.DrawImage(0, 0, carte[tirage]); //On dessine au coordonnées x = 0, y = 0, le sprite correspondant à la carte qu'on vient de tirer
    surface.Release(); //On indique qu'on a fini de dessiner et on met à jour le nouvel arrière plan.
  }

Note : en fait on a pas forcément besoin de DynamicSprite, la DrawingSurface suffit.

Plusieurs choses importantes :
1. Le nouvel arrière plan doit avoir les mêmes propriétés de couleurs que l'ancien, aussi je te conseille de mettre une carte comme arrière plan par défaut. Mais si tu veux que l'écran soit noir avant de tirer la première carte, alors ajoute comme arrière plan de base une image noire en 32 bits (si tes cartes sont elles mêmes en 32 bits).
2. Par défaut, tu auras un fondu au noir au changement de room. Tu peux changer ça dans les General Settings >> Visual >> Default transition when changing room.
3. Si une même carte est tirée deux fois de suite, on aura l'impression qu'il ne s'est rien passé. Il faudra donc trouver un moyen de contourner le problème, au minimum en ajoutant une transition (oui car, en état, toutes les cartes sont remélangées à chaque fois, hein !).

Voilà, c'était assez massif, j'en conviens, j'espère ne pas t'avoir donné mal à la tête et surtout que ça te donnera des pistes pour arriver à tes fins, et apprendre des nouvelles choses sur le code. clin d'oeil
Revenir en haut Aller en bas
En ligne
Baguettator
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 108

Date d'inscription : 21/05/2020


Lancer son premier jeu - Page 2 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu - Page 2 EmptyLun 25 Mai 2020 - 9:05

C'est absolument génial  ! Bravo et merci !

Alors je viens de suivre ce tuto pas à pas, c'est très clair !

Seulement, j'ai visiblement fait une erreur. ça vient du fait que je n'utilises pas le même système que toi pour afficher la carte choisie, et je pense que j'ai pas copié le bon code quelque part.

Pour cela je t'explique comment j'ai organisé le jeu jusqu'à maintenant :

- déjà le jeu de base n'est pas vraiment obligatoire. A vrai dire je préfère ne pas m'occuper de ça, car les joueurs savent bien ce qui est obligatoire pour jouer. Il y a en réalité 3 jeux de base et (minimum) 3 extensions. Les jeux de base sont indispensables pour jouer (au moins l'un d'eux), mais peuvent aussi servir d'extension... Bref, c'est un jeu "bac à sable" comme on dit je crois, donc autant oublier définir ce qui est obligatoire ou non, vu que ça dépend de ce que chaque joueur aura sourire
(NOTE : il s'agit du jeu Zombicide (version moderne), au cas où tu connais !)

- Organisation des rooms : room 1 = menu principal (boutons new game, charger partie etc...)
Room 2 = en cas de nouvelle partie, choix des jeux/extensions
Room 3 = en cas de nouvelle partie, affichage d'un prologue (texte)
Room 4 = en cas de nouvelle partie, choix des persos
Room 5 = en cas de nouvelle partie, affichage des ressources (nourriture, carburant etc...)
Room 6 = "colonie" du joueur, c'est à dire le QG à partir d'où ils vont voir leurs persos disponibles, leurs quantité de ressources... Les sauvegardes se font ici, donc c'est le principal écran du jeu. Lorsqu'on charge sa partie, on attéri ici.Et c'est de là qu'ils peuvent partir en expédition. Il y a un hotspot au niveau de la porte (sur l'image de fond), lorsqu'on clique dessus : player.ChangeRoom (7).
C'est à ce moment que la carte est choisie. Et l'apparition de la carte choisie doit se faire en room7. Lorsque l'expédition est finie, le joueur clique sur le bouton "fin d'expédition", et il revient à la room6 (écran de colonie).

Je crois que j'ai pas réussi à bien placer le dernier code que tu as indiqué (celui qui choisit la carte). Car lorsque je lance le jeu pour tester, ça me dit "Error (line 14) : undifined symobl "carte"".

Moi j'ai fait comme ça : vu que c'est pas la touche espace qui lance l'expédition (et donc le choix de la carte), j'ai inséré le code lorsque je clique sur le hotspot "nouvelle expédition".

Code:
function hNouvelleexpedition_AnyClick()
{
if (player.Room != 7) player.ChangeRoom(7); //Si on n'est pas déjà dans la room de tirage, on s'y rend
    int tirage = Random(nbCartes - 1); //Si on a 9 cartes, alors on veut obtenir une valeur entre 0 et 8.
    DrawingSurface* surface = Room.GetDrawingSurfaceForBackground(); //On crée une surface de dessin nommée "surface" contenant l'arrière plan de la room.
    surface.DrawImage(0, 0, carte[tirage]); //On dessine au coordonnées x = 0, y = 0, le sprite correspondant à la carte qu'on vient de tirer
    surface.Release(); //On indique qu'on a fini de dessiner et on met à jour le nouvel arrière plan.
}

C'est là que visiblement il y a erreur. Je pense que le reste fonctionne. Du coup je m'y suis mal pris ?

J'ai pas bien compris l'origine du "else" en haut du dernier code "else if (keycode == eKeySpace){". ça fait référence à quoi ?

EDIT : of course, j'ai bien indiqué les variables en haut du global script (j'ai même évité de les mettre dans les global variable, alors que j'ai fait comme ça pour mes autres variables !)
Revenir en haut Aller en bas
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef

Nombre de messages : 1721

Age : 31

Localisation : Condate

Date d'inscription : 01/08/2011


Lancer son premier jeu - Page 2 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu - Page 2 EmptyLun 25 Mai 2020 - 11:21

Ah oui, j'aurais du repréciser ça. Les variables déclarées dans le global script ne sont pas accessibles aux autres scripts. Il faut les importer et les exporter (je l'avais évoqué plus haut mais ça fait beaucoup d'informations ^^). Donc, en bas de ton script :
Code:
export nbCartes, nbExtensions, tailleExtension, carte;

Dans le Header du GlobalScript (GlobalScript.ash) :
Code:
import int nbCartes;
import int nbExtensions;
import int tailleExtension[];
import int carte[];

Et normalement ça devrait rouler. clin d'oeil

Par contre tu devrais plutôt faire le tirage à l'entrée de la room 7 non ? Parce que là je sais pas trop ce que ça va donner. La code devrait s'exécuter avant le changement de room (je si ma mémoire est bonne) mais comme la room 7 n'est pas encore charger il risque de changer le background de la room 6.

@Baguettator a écrit:

J'ai pas bien compris l'origine du "else" en haut du dernier code "else if (keycode == eKeySpace){". ça fait référence à quoi ?

Simplement que j'ai mis ça à la suite de mon on_key_press où les différentes touches sont codées comme ça (ça fait référence aux touches codées plus haut, du coup).

_________________
"Je ne suis point cet assemblage de membres que l’on appelle le corps humain ; je ne suis point un air délié et pénétrant répandu dans tous ces membres ; je ne suis point un vent, un souffle, une vapeur, ni rien de tout ce que je puis feindre et m’imaginer, puisque j’ai supposé que tout cela n’était rien, et que, sans changer cette supposition, je trouve que je ne laisse pas d’être certain que je suis quelque chose."

René Descartes
Revenir en haut Aller en bas
En ligne
Baguettator
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Baguettator

Nombre de messages : 108

Date d'inscription : 21/05/2020


Lancer son premier jeu - Page 2 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu - Page 2 EmptyLun 25 Mai 2020 - 11:30

Pardon, mais du coup je commence à m'emmêler les pinceaux : de quel script tu parles quand tu dis "en bas de ton script" ? celui de la room où la map est choisie ? Celui de la room où la map apparaît ? Celui d'un bouton ? :S

EDIT : j'avoue que si c'est possible de resituer ces impots/exports dans le tuto que tu as fait, ça va m'aider parce que là, j'ai bien compris les procédés, mais je me perds dans les scripts... :S
Revenir en haut Aller en bas
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef

Nombre de messages : 1721

Age : 31

Localisation : Condate

Date d'inscription : 01/08/2011


Lancer son premier jeu - Page 2 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu - Page 2 EmptyLun 25 Mai 2020 - 12:03

Il faut exporter en bas du GlobalScript.asc (là ou tu as déclaré tes variables) et les importer dans le GlobalScript.ash (que tu ouvres en cliquant sur "Edit Header").

Tu n'as rien à ajouter dans le script de la room à ce sujet normalement.

Je ne sais pas bien où ajouter ça dans le message précédent, mais ça ne changerait pas grand chose, si ?

_________________
"Je ne suis point cet assemblage de membres que l’on appelle le corps humain ; je ne suis point un air délié et pénétrant répandu dans tous ces membres ; je ne suis point un vent, un souffle, une vapeur, ni rien de tout ce que je puis feindre et m’imaginer, puisque j’ai supposé que tout cela n’était rien, et que, sans changer cette supposition, je trouve que je ne laisse pas d’être certain que je suis quelque chose."

René Descartes
Revenir en haut Aller en bas
En ligne
Baguettator
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Baguettator

Nombre de messages : 108

Date d'inscription : 21/05/2020


Lancer son premier jeu - Page 2 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu - Page 2 EmptyLun 25 Mai 2020 - 12:09

Alors là il me dit : error line 22 : local variable cannot have the same name as an import

... Pardon pour ces problèmes...
Revenir en haut Aller en bas
Baguettator
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Baguettator

Nombre de messages : 108

Date d'inscription : 21/05/2020


Lancer son premier jeu - Page 2 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu - Page 2 EmptyLun 25 Mai 2020 - 12:11

là typiquement j'ai bien mis dans le Header du Global script les imports de variables
les variables sont bien inscrites en haut du global script (int nbcarte, int nbExtensions etc... avec les tableaux)
lorsque je valide les jeux sélectionnés j'ai mis :
Code:
function OK_OnClick(GUIControl *control, MouseButton button)
{
  while (numCarte < nbCartes){
    if ((numExtension < 0) || (numExtension > nbExtensions)) AbortGame("numExtension invalide (%d)", numExtension); //Message d'erreur si on a une valeur inattendue ici. Rappel : || signifie "ou".
    if (rang >= tailleExtension[numExtension]) { //Si on a fini de "scanner" l'extension en cours, alors on passe au rang 0 de l'extension suivante
      numExtension++;
      rang = 0;
  }
            while (tailleExtension[numExtension] == 0) numExtension++; //Si l'extension n'est pas utilisée, alors on passe à la suivante, et on continue jusqu'à trouver une extension utilisée.
            ViewFrame* frame = Game.GetViewFrame(VUECARTES, numExtension, rang); //La carte correspondante dans la vue VUECARTES (on vient de déclarer un pointeur qui renverra une image contenue dans une Loop elle même contenue dans une View).
            carte[numCarte] = frame.Graphic; //On attribue à la carte le numéro du sprite correspondant
            rang++; //On passe à la carte suivante dans l'extension
            numCarte++; //On passe à la ligne suivante du tableau
          }//et on remonte au début du "while"
player.ChangeRoom (3);

Lorsque j'arrive en room 7 (pour afficher la carte choisie) j'ai mis :
Code:
function room_Load()
{
 int tirage = Random(nbCartes - 1); //Si on a 9 cartes, alors on veut obtenir une valeur entre 0 et 8.
    DrawingSurface* surface = Room.GetDrawingSurfaceForBackground(); //On crée une surface de dessin nommée "surface" contenant l'arrière plan de la room.
    surface.DrawImage(0, 0, carte[tirage]); //On dessine au coordonnées x = 0, y = 0, le sprite correspondant à la carte qu'on vient de tirer
    surface.Release(); //On indique qu'on a fini de dessiner et on met à jour le nouvel arrière plan.
}
Revenir en haut Aller en bas
Baguettator
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Baguettator

Nombre de messages : 108

Date d'inscription : 21/05/2020


Lancer son premier jeu - Page 2 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu - Page 2 EmptyLun 25 Mai 2020 - 12:18

ALORS MEA CULPA !!

J'avais déclaré les variables et les tableaux dans la fonction "gamestart"... Je les ai mises au-dessus au tout début (en laissant les lignes de code qu'il fallait mettre dans la fonction "gamestart"), et ça a marché !

Par contre, il y a eu une erreur : au moment de charger la carte choisie (arrivée en room 7), il me dit que le Random doit être au minimum 0 dans cette ligne :
int tirage = Random(nbCartes - 1); //Si on a 9 cartes, alors on veut obtenir une valeur entre 0 et 8.

Il dit : "Random : invalid parameter passed -- must be at least 0". J'ai fait une bourde dans les scripts précédents ?

EDIT : je m'étais trompé dans un copier coller. ça a marché ! Néanmoins j'ai un problème d'affichage de l'image. Je pense que c'est la résolution des images des sprites, j'ai oublié de vérifier leur taille par rapport aux dimmensions du jeu...

EDIT 2 : effectivement, quand on met les bonnes résolutions, tout marche mieux sourire

Vraiment merci pour cette super aide ! J'ai appris plein de choses !

Question maintenant : si jamais on veut qu'une fois une carte a été choisie, elle ne le soit plus à l'avenir (pour éviter le risque que le joueur fasse deux expéditions sur la même carte), il y a une possibilité de le scripter en modifiant ce qu'on vient de faire ?
(peut-être j'aurai dû avoir cette idée un peu plus tôt, pardon...)
Revenir en haut Aller en bas
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef

Nombre de messages : 1721

Age : 31

Localisation : Condate

Date d'inscription : 01/08/2011


Lancer son premier jeu - Page 2 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu - Page 2 EmptyLun 25 Mai 2020 - 13:14

Pratique tous ces problèmes qui se règlent d'eux-même ^^

@Baguettator a écrit:
Question maintenant : si jamais on veut qu'une fois une carte a été choisie, elle ne le soit plus à l'avenir (pour éviter le risque que le joueur fasse deux expéditions sur la même carte), il y a une possibilité de le scripter en modifiant ce qu'on vient de faire ?

Je m'attendais à ce que cette question vienne sur le tapis. clin d'oeil C'est ici qu'on va revenir à la super fonction de Kitai (décidément cette nouvelle version est bien utile).

Pour l'instant on va juste avoir besoin de retirer une carte du paquet, donc utiliser TableauRetireInt. Du coup tu as juste à copier ça assez haut dans ton GlobalScript (juste avant ou juste après game_start, par exemple), et en dehors de toute fonction :
Code:
/// Cette fonction retournera une copie du tableau dont on aura supprimé la valeur à INDEX
int[] TableauRetireInt(tableau[], taille, int index) {
    if (taille <= 1) return null;
    if (index < 0) index = taille - index;
    // Si toujours inférieur à zéro, on n'a qu'à prendre le premier
    if (index < 0) index = 0;
    if (index >= taille) index = taille-1;
    int tmp[] = new int[taille-1];
    int i = 0, j = 0;
    while (j < taille-1) {
        if (i == index) i++;
        tmp[j] = tableau[i];
        i++;
        j++;
    }
    return tmp;
}

Bon, là c'est un peu technique, je te laisserai essayer de comprendre cette fonction si tu le souhaite une fois que tu l'auras implémentée dans AGS (si tu as des questions à ce sujet @Kitai se fera un plaisir de te répondre sur le topic concerné sourire ), mais en gros ça va nous permettre de retirer une ligne de notre tableau à 9 lignes (donc passer à 8 lignes) ce qui fait que si tu supprimes l'entrée de la ligne 4, alors la ligne 5 deviendra la ligne 4, la ligne 6 deviendra la 5, etc. Exactement comme si tu retirais une carte au milieu de ton paquet.

Dans le Header, ajoute ça pour l'importation :
Code:
import int[] TableauRetireInt(int tableau[], int taille, int index = -1); // 0 > retire du début par défaut (file)

Ensuite, après chaque tirage tu fais :
Code:
carte = TableauRetireInt(carte, nbCartes, tirage);
nbCartes--; //On n'oublie pas de mettre à jour le nombre de cartes

Il faut prévoir aussi ce qu'il se passe s'il n'y a plus de cartes disponibles. Tu peux faire un truc comme ça :
Code:
if (nbCartes = 0) Display("Partie terminée. Toutes les cartes ont été tirées")
Qui devra être placé avant le tirage suivant.

_________________
"Je ne suis point cet assemblage de membres que l’on appelle le corps humain ; je ne suis point un air délié et pénétrant répandu dans tous ces membres ; je ne suis point un vent, un souffle, une vapeur, ni rien de tout ce que je puis feindre et m’imaginer, puisque j’ai supposé que tout cela n’était rien, et que, sans changer cette supposition, je trouve que je ne laisse pas d’être certain que je suis quelque chose."

René Descartes
Revenir en haut Aller en bas
En ligne
Baguettator
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Baguettator

Nombre de messages : 108

Date d'inscription : 21/05/2020


Lancer son premier jeu - Page 2 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu - Page 2 EmptyLun 25 Mai 2020 - 13:21

Quel professionnalisme ! Tu penses à tout ! sourire

Vraiment merci !

Par contre, dans la fonction de Kitai à recopier, je dois changer quelques noms de variables et tableau je pense ?

Edit : parce que dans tout ce qu'on a fait précédemment, il n'y a aucun tableau qui comptabilise le nombre total de carte disponibles ? C'est une simple variable : nbCartes. Ou alors je me trompe sourire
Revenir en haut Aller en bas
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef

Nombre de messages : 1721

Age : 31

Localisation : Condate

Date d'inscription : 01/08/2011


Lancer son premier jeu - Page 2 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu - Page 2 EmptyLun 25 Mai 2020 - 13:26

Non non, c'est une fonction à part entière, ça marche pour mettre à jour n'importe quel tableau en procédant comme je t'ai expliqué, en l'occurrence là, tu pourras mettre à jour le tableau "carte". Il faut juste entrer les bons paramètres au bon endroit quand on y fait appel (dans mon exemple il s'agit de "carte" (le tableau concerné), "nbCartes" (le nombre de lignes que contient le tableau à mettre à jour) et "tirage" (la ligne à laquelle on veut supprimer une entrée).

@Baguettator a écrit:
parce que dans tout ce qu'on a fait précédemment, il n'y a aucun tableau qui comptabilise le nombre total de carte disponibles ? C'est une simple variable : nbCartes. Ou alors je me trompe sourire
C'est suffisant. clin d'oeil Le tableau qu'on met à jour c'est le tableau "carte" (qui continent le numéro de sprite de chaque cartes).

_________________
"Je ne suis point cet assemblage de membres que l’on appelle le corps humain ; je ne suis point un air délié et pénétrant répandu dans tous ces membres ; je ne suis point un vent, un souffle, une vapeur, ni rien de tout ce que je puis feindre et m’imaginer, puisque j’ai supposé que tout cela n’était rien, et que, sans changer cette supposition, je trouve que je ne laisse pas d’être certain que je suis quelque chose."

René Descartes


Dernière édition par valoulef le Lun 25 Mai 2020 - 13:32, édité 1 fois
Revenir en haut Aller en bas
En ligne
Baguettator
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Baguettator

Nombre de messages : 108

Date d'inscription : 21/05/2020


Lancer son premier jeu - Page 2 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu - Page 2 EmptyLun 25 Mai 2020 - 13:30

Hmm alors il y a un problème parce que j'ai collé exactement le code en haut au-dessus de la fonction gamestart, et lorsque je lance il me dit "Error line 14 : Parse error at 'tableau'  ".

Une idée ?

EDIT : si j'ai bien compris, je remplace "tableau" par "carte", "index" par "tirage" et "" par "taille" ?
Il me dit encore "parse error at 'carte' "...
et que faire de "tmp" ?


Dernière édition par Baguettator le Lun 25 Mai 2020 - 13:35, édité 1 fois
Revenir en haut Aller en bas
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef

Nombre de messages : 1721

Age : 31

Localisation : Condate

Date d'inscription : 01/08/2011


Lancer son premier jeu - Page 2 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu - Page 2 EmptyLun 25 Mai 2020 - 13:34

La ligne 14 correspond à quel ligne là dedans ?
Code:
/// Cette fonction retournera une copie du tableau dont on aura supprimé la valeur à INDEX
        int[] TableauRetireInt(tableau[], taille, int index) {
            if (taille <= 1) return null;
            if (index < 0) index = taille - index;
            // Si toujours inférieur à zéro, on n'a qu'à prendre le premier
            if (index < 0) index = 0;
            if (index >= taille) index = taille-1;
            int tmp[] = new int[taille-1];
            int i = 0, j = 0;
            while (j < taille-1) {
                if (i == index) i++;
                tmp[j] = tableau[i];
                i++;
                j++;
            }
            return tmp;
        }

_________________
"Je ne suis point cet assemblage de membres que l’on appelle le corps humain ; je ne suis point un air délié et pénétrant répandu dans tous ces membres ; je ne suis point un vent, un souffle, une vapeur, ni rien de tout ce que je puis feindre et m’imaginer, puisque j’ai supposé que tout cela n’était rien, et que, sans changer cette supposition, je trouve que je ne laisse pas d’être certain que je suis quelque chose."

René Descartes
Revenir en haut Aller en bas
En ligne
Baguettator
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Baguettator

Nombre de messages : 108

Date d'inscription : 21/05/2020


Lancer son premier jeu - Page 2 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu - Page 2 EmptyLun 25 Mai 2020 - 13:36

Ah oui pardon sourire

La ligne 14 c'est celle-ci :

Code:
int[] TableauRetireInt(carte[], nbCartes, int tirage) {

(j'ai remplacé les noms de la fonction de Kitai, peut-être que je me suis trompé là-dedans ?)
Revenir en haut Aller en bas
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef

Nombre de messages : 1721

Age : 31

Localisation : Condate

Date d'inscription : 01/08/2011


Lancer son premier jeu - Page 2 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu - Page 2 EmptyLun 25 Mai 2020 - 13:38

@Baguettator a écrit:
EDIT : si j'ai bien compris, je remplace "tableau" par "carte", "index" par "tirage" et "" par "taille" ?
Il me dit encore "parse error at 'carte'    "...
et que faire de "tmp" ?

Non non il n'y a rien à modifier, regarde mon message juste avant. clin d'oeil

Là ton erreur ne peut pas concerner cette ligne, parce qu'il n'y a marqué nulle part "tableau" confus Ou alors c'est dans le header ? Tu peux regarder dans quel script est indiquée l'erreur ? Edit : en fait si, c'est parce que tu as remplacé par "carte", ok.

_________________
"Je ne suis point cet assemblage de membres que l’on appelle le corps humain ; je ne suis point un air délié et pénétrant répandu dans tous ces membres ; je ne suis point un vent, un souffle, une vapeur, ni rien de tout ce que je puis feindre et m’imaginer, puisque j’ai supposé que tout cela n’était rien, et que, sans changer cette supposition, je trouve que je ne laisse pas d’être certain que je suis quelque chose."

René Descartes
Revenir en haut Aller en bas
En ligne
Baguettator
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Baguettator

Nombre de messages : 108

Date d'inscription : 21/05/2020


Lancer son premier jeu - Page 2 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu - Page 2 EmptyLun 25 Mai 2020 - 13:42

alors je viens de la replacer telle qu'elle dans le Globalscript.asc, tout en haut avant le gamestart, et il y a la même erreur : Parse error at 'tableau'

Et l'erreur est bien dans le "global script.asc" !!!
Revenir en haut Aller en bas
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef

Nombre de messages : 1721

Age : 31

Localisation : Condate

Date d'inscription : 01/08/2011


Lancer son premier jeu - Page 2 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu - Page 2 EmptyLun 25 Mai 2020 - 13:43

Bon tu peux me faire une capture d'écran de tout le haut de ton GlobalScript (incluant la ligne 14), stp ? Parce que là je vois pas trop.

_________________
"Je ne suis point cet assemblage de membres que l’on appelle le corps humain ; je ne suis point un air délié et pénétrant répandu dans tous ces membres ; je ne suis point un vent, un souffle, une vapeur, ni rien de tout ce que je puis feindre et m’imaginer, puisque j’ai supposé que tout cela n’était rien, et que, sans changer cette supposition, je trouve que je ne laisse pas d’être certain que je suis quelque chose."

René Descartes
Revenir en haut Aller en bas
En ligne
Baguettator
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Baguettator

Nombre de messages : 108

Date d'inscription : 21/05/2020


Lancer son premier jeu - Page 2 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu - Page 2 EmptyLun 25 Mai 2020 - 13:50

OK, la voici (j'ai modifié la mise en page du script, l'ancienne ligne 14 est désormais la 11, mais idem, parse error 'tableau' à la ligne 11). J'avoue que moi-même je ne comprends pas pourquoi !

Lancer son premier jeu - Page 2 Imprzo10
Revenir en haut Aller en bas
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef

Nombre de messages : 1721

Age : 31

Localisation : Condate

Date d'inscription : 01/08/2011


Lancer son premier jeu - Page 2 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu - Page 2 EmptyLun 25 Mai 2020 - 13:54

Oh c'est bon j'ai trouvé entre deux en fait ! Il y avait une erreur oubliée dans la version d'origine. Il faut mettre des "int" dans les parenthèse. Réessaye avec cette version :
Code:
/// Cette fonction retournera une copie du tableau dont on aura supprimé la valeur à INDEX
int[] TableauRetireInt(int tableau[], int taille, int index) {
    if (taille <= 1) return null;
    if (index < 0) index = taille - index;
    // Si toujours inférieur à zéro, on n'a qu'à prendre le premier
    if (index < 0) index = 0;
    if (index >= taille) index = taille-1;
    int tmp[] = new int[taille-1];
    int i = 0, j = 0;
    while (j < taille-1) {
        if (i == index) i++;
        tmp[j] = tableau[i];
        i++;
        j++;
    }
    return tmp; // Correction :  tableau >> tmp
}

_________________
"Je ne suis point cet assemblage de membres que l’on appelle le corps humain ; je ne suis point un air délié et pénétrant répandu dans tous ces membres ; je ne suis point un vent, un souffle, une vapeur, ni rien de tout ce que je puis feindre et m’imaginer, puisque j’ai supposé que tout cela n’était rien, et que, sans changer cette supposition, je trouve que je ne laisse pas d’être certain que je suis quelque chose."

René Descartes
Revenir en haut Aller en bas
En ligne
Baguettator
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Baguettator

Nombre de messages : 108

Date d'inscription : 21/05/2020


Lancer son premier jeu - Page 2 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu - Page 2 EmptyLun 25 Mai 2020 - 14:04

OK !

Alors au passage il manquait un "=" dans une des lignes de code que tu m'as donné :

Code:
if (nbCartes =[ICI] 0) Display("Partie terminée. Toutes les cartes ont été tirées")

Alors je viens de tester, ça enlève bien une carte à chaque fois, mais pas celle qui a été tirée. Là dans mon test, j'ai tiré la carte 2 en premier, puis encore la carte 2, puis encore la carte 2 (décidément), puis "partie terminée blabla" s'est affiché. Lorsque j'ai refait Nouvelle expédition, ça a crashé le jeu car évidemment y a plus de cartes disponibles.

Du coup, ça n'a jamais enlevé la carte qui était choisie triste

Bon après, c'est un luxe que je peux éviter cette fonction. Mais si on y arrive, ça peut être on ne peut mieux !
Revenir en haut Aller en bas
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef

Nombre de messages : 1721

Age : 31

Localisation : Condate

Date d'inscription : 01/08/2011


Lancer son premier jeu - Page 2 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu - Page 2 EmptyLun 25 Mai 2020 - 14:15

Arf, j'ai la mauvaise habitude d'oublier le double = (==) quand il s'agit de vérifier une valeur et non de la définir (il manquait aussi un ";", d'ailleurs).

@Baguettator a écrit:

Alors je viens de tester, ça enlève bien une carte à chaque fois, mais pas celle qui a été tirée. Là dans mon test, j'ai tiré la carte 2 en premier, puis encore la carte 2, puis encore la carte 2 (décidément), puis "partie terminée blabla" s'est affiché. Lorsque j'ai refait Nouvelle expédition, ça a crashé le jeu car évidemment y a plus de cartes disponibles.

Mais est-ce à chaque fois la même carte 2 ? Car après le premier tirage, la carte 3 devient la nouvelle carte 2 et ainsi de suite. Par contre s'il ne reste plus que 2 cartes, ça ne peut plus être que la carte 0 ou la carte 1 qui est tirée.

Pour recommencer une nouvelle partie, il faut à nouveau initialiser le tableau carte[].

_________________
"Je ne suis point cet assemblage de membres que l’on appelle le corps humain ; je ne suis point un air délié et pénétrant répandu dans tous ces membres ; je ne suis point un vent, un souffle, une vapeur, ni rien de tout ce que je puis feindre et m’imaginer, puisque j’ai supposé que tout cela n’était rien, et que, sans changer cette supposition, je trouve que je ne laisse pas d’être certain que je suis quelque chose."

René Descartes
Revenir en haut Aller en bas
En ligne
Baguettator
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Baguettator

Nombre de messages : 108

Date d'inscription : 21/05/2020


Lancer son premier jeu - Page 2 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu - Page 2 EmptyLun 25 Mai 2020 - 14:19

Oui le ";" je l'ai rajouté aussi sourire

Alors je confirme : ce n'est pas la carte choisie qui est retirée. Je viens de refaire un test, et j'ai eu ce résultat :

( je nomme les cartes par leur nom dans le jeu)

1- city blocks
2- Y zone
3 - Y zone

Donc Y zone n'a pas été enlevée. La première fois, j'ai eu trois fois Y zone, jamais enlevée.

Y a une faille dans la fonction de Kitai ?

EDIT : je pense avoir un indice : "Y zone" revient souvent. Je viens de faire un troisième test ça a donné ça :

1- 24H zombicity
2- Y zone
3- Y zone

Et comme par hasard : dans la VIEW loop 0, "Y zone" est la carte numéro...3 !!!

Donc on dirait que la fonction de Kitai vire la première carte après le premier tirage, puis la seconde, et ne reste que la troisième pour le dernier tirage, soit : Y zone.

Elle a 1/2 chance d'être tirée en deuxième choix. donc si elle sort si souvent c'est qu'à mon avis la fonction retire la première valeur (ou la mauvaise carte). On a peut-être oublier (ou mal caractérisé) une des variables dans la fonction ?
Revenir en haut Aller en bas
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef

Nombre de messages : 1721

Age : 31

Localisation : Condate

Date d'inscription : 01/08/2011


Lancer son premier jeu - Page 2 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu - Page 2 EmptyLun 25 Mai 2020 - 14:39

Hum non chez moi ça a l'air de marcher correctement.

@valoulef a écrit:

Ensuite, après chaque tirage tu fais :
Code:
carte = TableauRetireInt(carte, nbCartes, tirage);
nbCartes--; //On n'oublie pas de mettre à jour le nombre de cartes

Tu as bien entré "tirage" comme 3ème paramètre comme indiqué ci-dessus ? Parce que c'est ça qui détermine quelle carte doit être retirée. Ou alors tu as mis ça dans une autre fonction que la fonction de tirage, et mis tirage comme variable globale, qui est réinitialisée à 0 quelque part...

_________________
"Je ne suis point cet assemblage de membres que l’on appelle le corps humain ; je ne suis point un air délié et pénétrant répandu dans tous ces membres ; je ne suis point un vent, un souffle, une vapeur, ni rien de tout ce que je puis feindre et m’imaginer, puisque j’ai supposé que tout cela n’était rien, et que, sans changer cette supposition, je trouve que je ne laisse pas d’être certain que je suis quelque chose."

René Descartes
Revenir en haut Aller en bas
En ligne
Baguettator
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Baguettator

Nombre de messages : 108

Date d'inscription : 21/05/2020


Lancer son premier jeu - Page 2 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu - Page 2 EmptyLun 25 Mai 2020 - 14:46

OK, alors j'ai debusqué l'erreur ! En fait j'avais affilié ce petit code au bouton qui termine l'expédition. Je viens de remettre ces deux lignes juste après le tirage (donc à l'entrée de la room 7), et tout fonctionne.

MERCI !!! et pardon pour les bêtises... grand sourire

J'ai bientôt ebauché sur papier toutes les opérations que je veux que le jeu gère. Donc bientôt je mets les mains dans le camboui sourire

Prochaine étape : gérer les inventaires

Puis : mettre en place le système de sauvegarde/charger partie (pour l'instant j'ai que les boutons !)

Donc je te fais signe dès que j'avance !
Revenir en haut Aller en bas
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef

Nombre de messages : 1721

Age : 31

Localisation : Condate

Date d'inscription : 01/08/2011


Lancer son premier jeu - Page 2 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu - Page 2 EmptyLun 25 Mai 2020 - 14:52

Pas de souci, ce qui serait anormal serait plutôt de ne faire aucune erreur quand on manipule ce genre de trucs pour la première fois. clin d'oeil

Bon courage !

_________________
"Je ne suis point cet assemblage de membres que l’on appelle le corps humain ; je ne suis point un air délié et pénétrant répandu dans tous ces membres ; je ne suis point un vent, un souffle, une vapeur, ni rien de tout ce que je puis feindre et m’imaginer, puisque j’ai supposé que tout cela n’était rien, et que, sans changer cette supposition, je trouve que je ne laisse pas d’être certain que je suis quelque chose."

René Descartes
Revenir en haut Aller en bas
En ligne
Baguettator
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Baguettator

Nombre de messages : 108

Date d'inscription : 21/05/2020


Lancer son premier jeu - Page 2 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu - Page 2 EmptyLun 25 Mai 2020 - 15:59

Petite question au passage : quelle résolution me conseilles-tu pour créer le jeu ?

Pour l'instant j'ai fait ce "brouillon" de jeu avec une résolution de 800/600. Mais je trouve ça très petit. Je me dis que vu que ce que je veux faire ne vas pas être bourré d'animations et de trucs méga compliqués (y aura même aucune animation, voilà), je peux envisager de monter la résolution sans que ça alourdisse le jeu. Et vu que la plupart des ordi ont maintenant des résolutions élevées...

Parce que je pense tout reprendre de 0, refaire un jeu qui sera le bon, en recopiant tous les codes que j'ai pu écrire etc... Mais avec une résolution de 1920/1280 par exemple, pour que ça soit en plein écran, et avec des images en bonne qualité.

A moins que je puisse garder ce que j'ai fait jusqu'à présent, et juste changer la résolution ? A ce moment là, je change les images de boutons/sprites/background en mettant des images de la nouvelle résolution, et le tour est joué ?
Revenir en haut Aller en bas
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef

Nombre de messages : 1721

Age : 31

Localisation : Condate

Date d'inscription : 01/08/2011


Lancer son premier jeu - Page 2 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu - Page 2 EmptyLun 25 Mai 2020 - 18:04

1920*1080 est idéal mais je ne sais pas ce que ça donne pour les écrans aux résolutions plus petites. L'inconvénient c'est que tu ne peux pas vraiment jouer en fenêtré du coup (sauf sur un écran 2K et 4K par exemple). Après ça reste une bonne option, même si 1280*720 ou 1600*900 feraient l'affaire aussi.

Tu n'auras pas besoin de tout reprendre à zéro, par contre tu devras changer toutes les positions et dimensions de tes éléments d'interface, en plus de leurs images.

_________________
"Je ne suis point cet assemblage de membres que l’on appelle le corps humain ; je ne suis point un air délié et pénétrant répandu dans tous ces membres ; je ne suis point un vent, un souffle, une vapeur, ni rien de tout ce que je puis feindre et m’imaginer, puisque j’ai supposé que tout cela n’était rien, et que, sans changer cette supposition, je trouve que je ne laisse pas d’être certain que je suis quelque chose."

René Descartes
Revenir en haut Aller en bas
En ligne
Contenu sponsorisé




Lancer son premier jeu - Page 2 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu - Page 2 Empty

Revenir en haut Aller en bas
 
Lancer son premier jeu
Revenir en haut 
Page 2 sur 7Aller à la page : Précédent  1, 2, 3, 4, 5, 6, 7  Suivant
 Sujets similaires
-
» MTGO Sealed Premier event.
» Le premier jour du reste de leur vie.
» Mon premier Nabaztag:tag
» Justice : Mon premier procès (Conseil, et discussion)
» Premier maître l'Her

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Adventure Games Studio fr :: CREATION DE JEUX :: Questions / Réponses-
Sauter vers: