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 : -53%
Bosh Readyy’y – Aspirateur Balai sans fil ...
Voir le deal
71 €

 

 Lancer son premier jeu

Aller en bas 
Aller à la page : 1, 2, 3, 4, 5, 6, 7  Suivant
AuteurMessage
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 Empty
MessageSujet: Lancer son premier jeu   Lancer son premier jeu EmptyJeu 21 Mai 2020 - 14:38

Bonjour !

ça y est je me lance, j'ai épluché plusieurs tutoriels et de nombreuses pages de lecture. Maintenant l'heure de la pratique, pour que je me lance dans l'élaboration de mon premier jeu !

Et déjà des ennuis :S

J'ai du mal à comprendre comment fonctionne l'interface GUI et comment l'utiliser.

Je voudrais que lorsque le jeu se lance, le jeu commence donc dans la Room 1 qui est un "menu principal" avec plusieurs boutons : "new game", "load", "options" etc...

Du coup, j'ai mis une image qui sera le fond d'écran de la room (le décor du menu, on va dire).

J'ai créé un GUI avec ces boutons et les différentes fonctions. Le bouton "new game" envoie vers la Room 2 qui va initialiser la partie, lancer l'histoire etc... Le bouton options fait apparaître les différents règlages (pas encore codé ça pour l'instant, mais c'est l'idée).

Du coup, j'ai voulu afficher ce GUI dans la Room 1. Du coup, dans le script de la room 1, j'ai écrit le code pour afficher le GUI à certaines coordonnées, comme j'ai pu voir : "gMenuprincipal.SetPosition(150, 130);

Selon ce que j'ai compris, ça doit mettre le GUI (donc le menu avec les boutons) à ces coordonnées, au beau milieu du décor que je lui ai fait. Mais y aune erreur, qui dit 'unexpected gMenuprincipal'...

Ai-je mal compris quelque chose ?

A vrai dire, je débute dans la programmation, donc forcément faut pas que ça marche du premier coup ! sourire

Si quelqu'un peut m'aider dans la réalisation de cette première étape, ça pourra sans doute bien me lancer pour la suite !
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 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu EmptyJeu 21 Mai 2020 - 17:11

Déjà tu as la bonne démarche dans ta conception du menu principal, c'est un bon début ! clin d'oeil

Quand tu dis que tu as mis la commande dans la Room 1, tu l'as mis où exactement ? Parce que tu ne peux pas mettre une ligne comme ça n'importe où dans le script, il faut la mettre dans une fonction. Fonction que tu peux créer notamment via les events Lancer son premier jeu 3053503851 de ta room.

Mais si ton GUI "gMenuprincipal" n'est pas amené à bouger, tu ferais mieux de définir ses coordonnées dans les paramètres du GUI, et au besoin de l'afficher/masquer avec gMenuprincipal.Visible. Si ton GUI n'a ni vocation à bouger, ni à disparaître, alors tu n'a besoin de rien de tout ça, simplement, de définir tout dans les paramètres.

_________________
"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 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu EmptyJeu 21 Mai 2020 - 17:29

Whaoo effectivement ça a marché !

Donc j'ai compris l'usage des fonctions, effectivement, c'était juste ça qui m'avait échappé sourire

Du coup, tout est plus simple ! Je crois que je comprends comment ça marche. Je me prépare à créer un interface d'inventaire pour les différents personnages du jeu. Du coup, je pourrais les faire s'afficher lorsque je clique sur le perso concerné j'imagine ?

Je vais continuer mes expérimentations ! Quelle joie de voir ce début qui commence à marcher !

Mais je suis pas au bout de mes peines je pense ! Merci beaucoup !

EDIT : au passage, il y a un petit truc que je ne retrouve plus : comment indiquer dans le code que le menu ne s'affiche que dans la room 1 ? Je ne me retrouve plus du Code pour dire cela... Pardon, j'espère que ce sera la dernière question bête !
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 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu EmptyJeu 21 Mai 2020 - 17:38

@Baguettator a écrit:
Du coup, je pourrais les faire s'afficher lorsque je clique sur le perso concerné j'imagine ?
Oui, par exemple avec cPerso1_onclick() et gInventoryX.Visible (cPerso1 et gInventoryX sont ici des exemples).

_________________
"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 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu EmptyJeu 21 Mai 2020 - 19:13

Trop super !

Alors plusieurs petites questions avant de finir de vous embêter :

- quelles sont les limites de AGS ? en terme de nombre de rooms, nombre de variables etc...? (surtout les rooms !)

- comment on demande à un GUI de n'apparaître qu'à une seule room ? J'ai l'impression de devoir chaque fois préciser "beforefadein => visibletrue", puis "leaveroom => visiblefalse"... Et est-ce qu'on doit laisser sur False le "Visible whether the game start" dans les "propriétés" du GUI ? J'ai l'impression que si je laisse ça sur false, le GUI n'apparaît jamais...
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 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu EmptyJeu 21 Mai 2020 - 19:49

Il y a une page de l'aide en ligne dédiée aux limites du système, mais elle n'est pas tout-à-fait complète et à jour. Pour une version plus exhaustive et d'actualité, tu peux rechercher "system limits" dans l'aide d'AGS. Les deux versions ne semblent pas donner l'information du nombre de rooms (ce qui est assez ironique vu que l'intro dit précisément "Si vous vous êtes demandé “combien de pièces je peux avoir ?” ou quelque chose de similaire, cette section peut contenir votre réponse.") mais il y a une ligne qui dit dans la version anglaise "299 state-saving rooms per game", sauf que je ne comprends pas ce que ça signifie. Peut-être que quelqu'un d'autre saura mieux que moi.
Dans tous les cas, normalement, il y a de la marge, à moins d'avoir des besoins vraiment très spécifiques.

Pour ton GUI, tu peux créer deux fonctions en passant par les events de ta room "Enters Room before Fade-in" et "Leaves Room", ici :
Lancer son premier jeu PbArTqH

Dans les fonctions crées du script, tu peux rendre ton GUI visible à l'entrée dans la Room, puis invisible à la sortie (le code de la première fonction que j'ai citée sera exécuté dès l'entrée dans la room, et le second à la sortie).

_________________
"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 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu EmptyVen 22 Mai 2020 - 13:45

Re-bonjour,

Merci pour ces aides ! Effectivement, j'ai compris comment ça marche, j'ai pu déjà créer quelques menus qui se succèdent dans plusieurs rooms, aucun problème pour tout ça maintenant !

Pour les limites, j'essayerai de rester en-dessous de 299 rooms, on verra si ça fonctionne sourire

Nouvelle question, je ne trouve pas la réponse : comment peut-on afficher des scores ? J'ai vu que c'est possible d'afficher un score, mais moi j'aurai besoin de stocker plusieurs scores, à savoir : quantité de nourriture, quantité de carburant, quantité d'outils etc...

Peut-être que c'est possible de faire afficher des variables numériques (qui évoluent au cours du jeu) dans un GUI ? J'ai commencé à créer un LABEL GUI, est-ce la bonne solution ?

Le top, serait que chaque "ressource" (nourriture, outils, carburant... 9 en tout) ait sa propre variable, qui serait affichée dans un GUI (LABEL ?), avec deux petits boutons à côté qui permettent au joueur de faire +1 ou -1 à chaque ressource (donc à chaque variable).

Sinon, je peux tenter un GUI avec des boîtes de Texte où le joueur peut écrire dedans (si j'ai bien compris, c'est des GUI TEXT BOX), mais je trouve ça moins canon... 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 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu EmptyVen 22 Mai 2020 - 18:52

@Baguettator a écrit:

Pour les limites, j'essayerai de rester en-dessous de 299 rooms, on verra si ça fonctionne sourire

Tu penses réellement pouvoir attendre ce chiffre avec ton projet ?

@Baguettator a écrit:
Peut-être que c'est possible de faire afficher des variables numériques (qui évoluent au cours du jeu) dans un GUI ? J'ai commencé à créer un LABEL GUI, est-ce la bonne solution ?

Exactement ! Tu visualises bien l'approche. Et c'est pas très compliqué.
Commence par déclarer tes variables en haut du script global :
Code:
// main global script file
int nourriture;
int carburant;
int outils;
//etc...

Tu peux aussi les déclarer dans l'onglet "Global Variables" de l’arborescence (notamment si tu veux les utiliser dans différents scripts, mais tu peux aussi les exporter, et les importer dans le header).

Ensuite, dans ton repeatedly_execute tu vas mettre à jour le texte de tes labels comme ceci :
Code:
function repeatedly_execute()
{
Label1.Text = String.Format("%d", nourriture);
Label2.Text = String.Format("%d", carburant);
Label3.Text = String.Format("%d", outils);
}

Le code "%d" placé dans une chaîne de caractère indique que tu veux afficher un int. La variable est définie après la virgule. Pour info tu peux placer plusieurs variables dans une chaîne de caractère, par exemple comme ça :
Code:
String.Format("Variable 1 : %d, Variabale 2 : %d", variable1, variable2);
//fonctionne aussi avec la commande "Display"

Remplace "Label1", "Label2" et "Label3" par le nom de tes labels le cas échéant. Ainsi tes labels seront mis continuellement à jour avec l'évolution de la valeur des variables concernées.

Une fois que tu as créé tes boutons, tu peux déterminer ce qu'il se passe quand tu cliques dessus en créant l'event "on_click" (exactement comme tu l'as fait pour ta room). Ensuite, selon le bouton, tu as juste a incrémenter ou décrémenter la valeur de la variable dans la fonction ainsi créée en choisissant une des méthodes suivantes :
Code:
nourriture--; //Enlèvera 1 à la variable "nourriture"
nourriture++; //Ajoutera 1 à la variable "nourriture"
nourriture += 10; //Ajoutera 10 à la variable "nourriture"
nourriture = nourriture + 10; //Idem
nourriture -= 10; //Retirera 10 à la variable "nourriture"
nourriture = nourriture - 10; //Idem

_________________
"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 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu EmptySam 23 Mai 2020 - 8:40

Pour le nombre de room : c'est possible, car comme j'ai dit, je compte faire une application (jeu) qui accompagne et héberge un mode de jeu pour un jeu de société (à savoir : un mode campagne de jeu de plateau/figurines). Comme le jeu de société fonctionne avec un système de "cartes" et qu'il en existe plein (entre les officielles et les créées par la communauté), j'incorporerai ces cartes, une par room, choisies aléatoirement lorsque le joueur part en expédition. Donc, ça peut aller largement jusqu'à 300 sourire

Merci pour l'aide sur les label GUI ! Content d'avoir visé juste. Concernant la fonction repetable execute, il faut la rentrer dans le script de la room ? Dans le script global ? Ou plutôt dans le Label GUI ?

Outre cela, j'ai commencé à scripter un tas de petites choses, et là, BAM, le premier grand problème arrive : j'ai utilisé des variables, et un système de compte pour définir quand on passe à la room suivante, et visiblement le jeu compte pas comme moi :S

Je vous explique ce que j'ai fait, et si quelqu'un arrive à déceler l'erreur ou peut me dire s'il n'y a pas un moyen beaucoup plus simple pour faire ce que j'ai voulu faire, je serais aux anges, parce que là je bloque !

En gros, après avoir lancé une nouvelle partie, le joueur doit choisir des personnages pour faire son équipe et l'équipe adverse (3 persos par équipe). J'ai donc créé un GUI avec plein de boutons : chaque perso est représenté sur un bouton.

Quand on clique sur un bouton de personnage, la description (biographie) du personnage apparaît à droite (c'est un bouton qui ne peut pas être cliqué) avec un bouton "OK" qui lorsqu'on clique dessus valide le choix du perso. Si on veut pas ce perso, on reclique sur le bouton du personnage, et sa biographie + le bouton "OK" disparaissent.

Si on clique sur "OK", le bouton du personnage disparaît, et à la place apparaît un bouton identique avec une petite étoile verte pour dire qu'on l'a choisi. Si on clique sur le bouton avec l'étoile verte, ça veut dire qu'on veut finalement pas le choisir, donc le bouton avec étoile verte disparaît, le bouton de base réapparaît, et on peut recommencer.

Lorsque 3 persos ont été choisis (donc on voit trois étoiles vertes à l'écran), un bouton "valider" apparaît. Si on clique dessus, ça confirme les persos du joueur, on peut maintenant choisir ceux de l'équipe adverse. Les boutons "étoile verte" sont donc figés.

Pour choisir les persos adverses, même chose que précédemment sauf que si on clique sur le bouton de base d'un personnage, ça fait apparaître un bouton avec une étoile rouge.

Lorsque les 3 persos adverses ont été choisis, le bouton "valider" apparaît et permet de confirmer leur sélection. Tous les persos étant choisis, on passe à la room suivante.

Le problème est que le jeu compte les persos adverses d'une manière étrange, il compte un de plus que prévu, et je ne vois vraiment pas pourquoi... Du coup le bouton "valider" apparaît trop tôt, et le compte qui doit permettre de passer à la room suivante n'est pas bon, donc impossible de changer de room...

Voici le code qui concerne ces opérations :

Code:
// Choix des personnages entre amy, phil, wanda, josh, ned et doug (chacun a une variable à son nom, et des boutons à son nom.
// Amybio est le bouton qui affiche sa bio. Amycolonie est le bouton qui affiche l'étoile verte. Amyadverse est le bouton qui affiche l'étoile rouge.
// idem pour chaque perso
// persochoisi est la variable qui compte le nombre de persos choisis pour la colonie du joueur (donc 3 maximum)
// adversechoisi est la variable qui compte le nombre de persos choisis pour l'équipe adverse (donc 3 maximum)
//ci-dessous, lorsqu'on clique sur le bouton d'un perso, ça fait apparaître sa bio et le bouton "Choixperso" qui permet de valider le choix
function Amy_OnClick(GUIControl *control, MouseButton button)
{
if (amy == 0)
{
  Amybio.Visible=true;
Choixperso.Visible=true;
amy=1;
}
else
{
  Amybio.Visible=false;
Choixperso.Visible=false;
amy=0;
}
}


function Doug_OnClick(GUIControl *control, MouseButton button)
{
if (doug == 0)
{
  Dougbio.Visible=true;
Choixperso.Visible=true;
doug=1;
}
else
{
  Dougbio.Visible=false;
Choixperso.Visible=false;
doug=0;
}
}

function Josh_OnClick(GUIControl *control, MouseButton button)
{
if (josh == 0)
{
  Joshbio.Visible=true;
Choixperso.Visible=true;
josh=1;
}
else
{
  Joshbio.Visible=false;
Choixperso.Visible=false;
josh=0;
}
}

function Wanda_OnClick(GUIControl *control, MouseButton button)
{
if (wanda == 0)
{
  Wandabio.Visible=true;
Choixperso.Visible=true;
wanda=1;
}
else
{
  Wandabio.Visible=false;
Choixperso.Visible=false;
wanda=0;
}
}

function Ned_OnClick(GUIControl *control, MouseButton button)
{
if (ned == 0)
{
  Nedbio.Visible=true;
Choixperso.Visible=true;
ned=1;
}
else
{
  Nedbio.Visible=false;
Choixperso.Visible=false;
ned=0;
}
}

function Phil_OnClick(GUIControl *control, MouseButton button)
{
if (phil == 0)
{
  Philbio.Visible=true;
Choixperso.Visible=true;
phil=1;
}
else
{
  Philbio.Visible=false;
Choixperso.Visible=false;
phil=0;
}
}

// Ci-dessous, sans doute là qu'il y a l'erreur : lorsqu'on clique sur le bouton Choixperso (qui confirme le choix du perso)
// cela fait que si on est en train de choisir les trois persos du joueur, ça fait apparaître le bouton étoile verte du perso
// et la variable persochoisi compte 1 perso sélectionné de plus, tant qu'on n'a pas sélectionné les trois persos et cliqué sur valider

function Choixperso_OnClick(GUIControl *control, MouseButton button)
{
if (persochoisi < 3)
{
  if (amy == 1)
  {
    Amybio.Visible=false;
    Amy.Visible=false;
    Amycolonie.Visible=true;
    Choixperso.Visible=false;
    persochoisi=persochoisi + 1;
    amy=amy + 1;
  }
  if (wanda == 1)
  {
    Wandabio.Visible=false;
    Wanda.Visible=false;
    Wandacolonie.Visible=true;
    Choixperso.Visible=false;
    persochoisi=persochoisi + 1;
    wanda=wanda + 1;
  }
  if (josh == 1)
  {
    Joshbio.Visible=false;
    Josh.Visible=false;
    Joshcolonie.Visible=true;
    Choixperso.Visible=false;
    persochoisi=persochoisi + 1;
    josh=josh + 1;
  }
  if (doug == 1)
  {
    Dougbio.Visible=false;
    Doug.Visible=false;
    Dougcolonie.Visible=true;
    Choixperso.Visible=false;
    persochoisi=persochoisi + 1;
    doug=doug + 1;
  }
  if (phil == 1)
  {
    Philbio.Visible=false;
    Phil.Visible=false;
    Philcolonie.Visible=true;
    Choixperso.Visible=false;
    persochoisi=persochoisi + 1;
    phil=phil + 1;
  }
  if (ned == 1)
  {
    Nedbio.Visible=false;
    Ned.Visible=false;
    Nedcolonie.Visible=true;
    Choixperso.Visible=false;
    persochoisi=persochoisi + 1;
    ned=ned + 1;
  }
}
if (persochoisi > 3) // une fois les 3 persos choisis pour le joueur, les prochaines fois qu'on clique sur ce bouton permettront de choisir les persos adverses, et donc de faire apparaître les boutons avec l'étoile rouge et faire compter la variable adversechoisi
{
  if (amy == 1)
  {
    Amybio.Visible=false;
    Amy.Visible=false;
    Amyadverse.Visible=true;
    Choixperso.Visible=false;
    adversechoisi=adversechoisi + 1;
  }
  if (wanda == 1)
  {
    Wandabio.Visible=false;
    Wanda.Visible=false;
    Wandaadverse.Visible=true;
    Choixperso.Visible=false;
    adversechoisi=adversechoisi + 1;
  }
  if (josh == 1)
  {
    Joshbio.Visible=false;
    Josh.Visible=false;
    Joshadverse.Visible=true;
    Choixperso.Visible=false;
    adversechoisi=adversechoisi + 1;
  }
  if (doug == 1)
  {
    Dougbio.Visible=false;
    Doug.Visible=false;
    Dougadverse.Visible=true;
    Choixperso.Visible=false;
    adversechoisi=adversechoisi + 1;
  }
  if (phil == 1)
  {
    Philbio.Visible=false;
    Phil.Visible=false;
    Philadverse.Visible=true;
    Choixperso.Visible=false;
    adversechoisi=adversechoisi + 1;
  }
  if (ned == 1)
  {
    Nedbio.Visible=false;
    Ned.Visible=false;
    Nedadverse.Visible=true;
    Choixperso.Visible=false;
    adversechoisi=adversechoisi + 1;
  }
}
if (persochoisi == 3) // lorsque trois étoiles vertes sont sélectionnées, "valider" apparaît
{
  Valider.Visible=true;
}

if (adversechoisi == 3) // lorsque trois étoiles rouges sont sélectionnées, "valideradverse" apparaît (et c'est LA que le problème réside, ce bouton apparaît au bout de deux persos choisis, je comprends pas !)
{
  Valideradverse.Visible=true;
}
}

function Choixmessage1_OnClick(GUIControl *control, MouseButton button) // un petit bouton message qui apparaît pour dire de choisir les persos du joueur
{
Choixmessage1.Visible=false;
}

function Choixmessage2_OnClick(GUIControl *control, MouseButton button) // un petit bouton message qui apparaît pour dire de choisir les persos adverses
{
Choixmessage2.Visible=false;
}

function Dougcolonie_OnClick(GUIControl *control, MouseButton button) // lorsqu'on clique sur le bouton avec l'étoile verte de ce personnage, ça veut dire qu'on annule sa sélection. L'étoiel verte disparaît, le bouton de base réapparaît. Si on a validé nos 3 persos, le bouton étoile verte devient inactif car persochoisi sera supérieur à 3
{
if (persochoisi <= 3)
{
  persochoisi=persochoisi - 1;
  doug=0;
  Doug.Visible=true;
  Dougcolonie.Visible=false;
  Valider.Visible=false;
}
}

function Joshcolonie_OnClick(GUIControl *control, MouseButton button)
{
if (persochoisi <= 3)
{
  persochoisi=persochoisi - 1;
  josh=0;
  Josh.Visible=true;
  Joshcolonie.Visible=false;
  Valider.Visible=false;
}
}

function Amycolonie_OnClick(GUIControl *control, MouseButton button)
{
if (persochoisi <= 3)
{
  persochoisi=persochoisi - 1;
  amy=0;
  Amy.Visible=true;
  Amycolonie.Visible=false;
  Valider.Visible=false;
}
}

function Wandacolonie_OnClick(GUIControl *control, MouseButton button)
{
if (persochoisi <= 3)
{
  persochoisi=persochoisi - 1;
  wanda=0;
  Wanda.Visible=true;
  Wandacolonie.Visible=false;
  Valider.Visible=false;
}
}

function Nedcolonie_OnClick(GUIControl *control, MouseButton button)
{
if (persochoisi <= 3)
{
  persochoisi=persochoisi - 1;
  ned=0;
  Ned.Visible=true;
  Nedcolonie.Visible=false;
  Valider.Visible=false;
}
}

function Philcolonie_OnClick(GUIControl *control, MouseButton button)
{
if (persochoisi <= 3)
{
  persochoisi=persochoisi - 1;
  phil=0;
  Phil.Visible=true;
  Philcolonie.Visible=false;
  Valider.Visible=false;
}
}



function Amyadverse_OnClick(GUIControl *control, MouseButton button) // lorsqu'on clique sur le bouton avec l'étoile rouge de ce personnage, ça veut dire qu'on annule sa sélection. L'étoiel rouge disparaît, le bouton de base réapparaît.
{
adversechoisi=adversechoisi - 1;
amy=0;
Amy.Visible=true;
Amyadverse.Visible=false;
Valideradverse.Visible=false;
}

function Dougadverse_OnClick(GUIControl *control, MouseButton button)
{
adversechoisi=adversechoisi - 1;
doug=0;
Doug.Visible=true;
Dougadverse.Visible=false;
Valideradverse.Visible=false;
}

function Joshadverse_OnClick(GUIControl *control, MouseButton button)
{
adversechoisi=adversechoisi - 1;
josh=0;
Josh.Visible=true;
Joshadverse.Visible=false;
Valideradverse.Visible=false;
}

function Nedadverse_OnClick(GUIControl *control, MouseButton button)
{
adversechoisi=adversechoisi - 1;
ned=0;
Ned.Visible=true;
Nedadverse.Visible=false;
Valideradverse.Visible=false;
}

function Philadverse_OnClick(GUIControl *control, MouseButton button)
{
adversechoisi=adversechoisi - 1;
phil=0;
Phil.Visible=true;
Philadverse.Visible=false;
Valideradverse.Visible=false;
}

function Wandaadverse_OnClick(GUIControl *control, MouseButton button)
{
adversechoisi=adversechoisi - 1;
wanda=0;
Wanda.Visible=true;
Wandaadverse.Visible=false;
Valideradverse.Visible=false;
}

function Valider_OnClick(GUIControl *control, MouseButton button) // "valider" pour confirmer la sélection des persos du joueur. Si on clique dessus, persochoisi a une valeur de 4, donc les boutons étoile verte ne peuvent plus être actionnés
{
Valider.Visible=false;
Choixmessage2.Visible=true;
persochoisi=persochoisi + 1;
}

function Valideradverse_OnClick(GUIControl *control, MouseButton button) // "valider" pour confirmer la sélection des persos adverses. Cela fait changer de room, car tous les persos ont été choisis !
{
player.ChangeRoom (5);
}
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 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu EmptySam 23 Mai 2020 - 12:43

@Baguettator a écrit:
Pour le nombre de room : c'est possible, car comme j'ai dit, je compte faire une application (jeu) qui accompagne et héberge un mode de jeu pour un jeu de société (à savoir : un mode campagne de jeu de plateau/figurines). Comme le jeu de société fonctionne avec un système de "cartes" et qu'il en existe plein (entre les officielles et les créées par la communauté), j'incorporerai ces cartes, une par room, choisies aléatoirement lorsque le joueur part en expédition. Donc, ça peut aller largement jusqu'à 300 sourire

Alors peut-être qu'il serait plus simple, et surtout économique, de changer le background plutôt que de faire autant de rooms que de cartes. À condition de ne pas utiliser d'hotspot/waklable areas/regions/walk-behinds (ou en tout cas qu'ils ne changent pas de forme d'une room à l'autre). Si chacune de tes "rooms" est structurée de manière similaire (ou pas, d'ailleurs) tu peux éventuellement utiliser des tableaux pour une variable qui aurait une valeur différente par carte. Après ça dépend ce que tu veux faire précisément.

@Baguettator a écrit:
Content d'avoir visé juste. Concernant la fonction repetable execute, il faut la rentrer dans le script de la room ? Dans le script global ?

C'est comme tu veux ! Tu peux créer une fonction repeatedly_execute spécifique à ta room via les events (tout comme Leaves Room, etc.) ou  faire ça dans la fonction déjà présente dans le global_script. Si tu fais ça dans la room, déclare plutôt tes variables en haut du script de la room, c'est plus logique. Évidemment le repeatedly_execute de la room sera exécuté uniquement lorsque le joueur se trouve dans la pièce concernée, alors que celui du global_script s'exécutera partout.


Pour ton problème de choix de personnages je vois pas trop pour le moment (tu as bien vérifié que adversechoisi est à 0 au début ?) mais effectivement il doit y avoir moyen de faire plus simple. Je vais regarder ça.

Edit : Est-ce que tu tiens à ce qu'il y ait un bouton par perso ? Plutôt que faire 6 emplacements, un par perso (3 joueur, 3 adversaire), et switcher de l'un à l'autre jusqu'à trouver le personnage adéquat ? Sinon effectivement ça doit être plus ou moins ça qu'il faut faire, mais je vois pas trop d'où vient ton problème sans tester.

Edit2 : Ah si je l'ai, ça doit venir de cette condition là :
Code:
if (persochoisi > 3) // une fois les 3 persos choisis pour le joueur, les prochaines fois qu'on clique sur ce bouton permettront de choisir les persos adverses, et donc de faire apparaître les boutons avec l'étoile rouge et faire compter la variable adversechoisi

Pour que la condition persochoisi > 3 soit vérifiée, et à partir du moment où "persochoisi" est un int, la valeur doit être au moins de 4. Pour que ce soit 3 ou plus il faut plutôt mettre
Code:
if (persochoisi >= 3)

_________________
"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 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu EmptySam 23 Mai 2020 - 14:54

Alors pour le nombre de rooms, si je comprends bien, au lieu d'aller piocher une room parmi 150, ce serait piocher une variable "room" qui peut être chiffrée de 1 à 150, cette variable serait alors reliée à un GUI qui afficherait la "carte" du jeu ?

A priori pour ce que je veux faire, je ne vais utiliser que des GUI et des rooms (les GUI seront majoritairement des boutons pour cliquer/lancer des événements, ou des scores à afficher).

Pour le problème de variable, vraiment je ne comprends pas. La variable adversechoisi est bien de 0 au début. La condition persochoisi ne pose pas problème, elle fonctionne nickel. C'est le adversechoisi qui, pour une raison qui m'échappe, arrive un click trop tôt ! Comme si effectivement elle commençait à 1, alors que ce n'est pas le cas. J'ai beau relire le script en boucle, je ne vois aucun souci de script (un +2 au lieu d'un +1, ou une inversion persochoisi/adversechoisi...).

J'ai même créé un bouton "Choixadverse", qui est l'équivalent de "Choixperso" mais pour le choix des persos de l'adversaire, donc il apparaît que quand adversechoisi == 3. Et il apparaît toujours quand j'ai choisi 2 persos adverses, donc selon moi quand adversechoisi == 2 !!!!!

Vraiment je vois pas... Si vraiment le problème persiste, je ferai une room pour le choix des persos du joueur, et une autre room pour le choix des persos adverses, comme ça fini les problèmes !
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 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu EmptySam 23 Mai 2020 - 15:41

@Baguettator a écrit:
Alors pour le nombre de rooms, si je comprends bien, au lieu d'aller piocher une room parmi 150, ce serait piocher une variable "room" qui peut être chiffrée de 1 à 150, cette variable serait alors reliée à un GUI qui afficherait la "carte" du jeu ?

Plus ou moins, mais je ne sais pas assez précisément comment ton projet se présente pour être plus concret. Disons que, si la seule différence entre les rooms ce sont les sprites et la valeur des variables, alors on pourrait alors on pourrait probablement faire plus concis. Mais ce n'est sûrement pas le cas, donc je ne sais pas trop en l'état.

Je n'arrive pas à voir non plus où est l'erreur dans ton code (mais il y en a une, AGS sait compter correctement jusqu'à 3, je te rassure ^^). Tu devais afficher la valeur de "adversechoisi" sur un Label, de la même manière qu'on l'a vu précédemment, ou alors choisir une touche du clavier et lui attribuer le code suivant (via on_key_press) :
Code:
Display("%d", adversechoisi)

Comme ça tu pourras vérifier l'évolution de la valeur de la variable et repérer à quel endroit ça commence à déconner. Si la valeur se comporte normalement, alors c'est dans la structure de ton code que tu as fait une erreur (un if qui n'arrive pas au bon moment, par exemple).

_________________
"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 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu EmptySam 23 Mai 2020 - 15:48

Merci du conseil effectivement ça pourra permettre d'identifier l'erreur ! Comment on met en place le on key press par contre ? :S

Vous m'aidez beaucoup, vraiment merci pour votre patience !
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 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu EmptySam 23 Mai 2020 - 15:54

La fonction on_key_press est présente dans le global_script par défaut. Il suffit d'ajouter un "else if (keycode == xxx)" en remplaçant "xxx" par le bon code (qu'on peut trouver facilement avec l'autocomplétion). Par exemple, pour la touche espace :
Code:
else if (keycode == eKeySpace){
  //Insérer ici le code à exécuter.
}

_________________
"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 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu EmptySam 23 Mai 2020 - 16:08

OK ! Désolé d'avoir posé cette question, en fait j'ai effectivement vu cette partie du script, et entre-temps vous aviez déjà répondu... triste

Alors ça y est, le on_key_press a révélé le stratagème ! Quand je choisis le premier perso adverse, c'est bien 1. Quand je choisis le deuxième perso adverse, ça passe à 3 !!! Je ne sais pas d'où vient ce +2... Et de manière générale quand je choisis un deuxième perso adverse, ça fait +2...

Edit : PUREE je crois que j'ai compris ! Je reviens dans un instant... Je pense que j'ai trouvé !

Edit2 : ça marche !!!!

En fait, voilà ce que j'avais oublié : quand je clique sur choixadverse, le bouton qui valide le choix du perso adverse, il faut que je mette la variable du perso choisi à 2. Avant elle restait à 1, ce qui faisait que lors du choix du 2ème perso après avoir choisi wanda, appuyer sur le bouton de amy (par exemple) et valider le choix faisait +2 (amy = 1 et wanda = 1, donc deux fois persoadverse + 1, donc +2...). Alors que si une fois que le perso est choisi sa variable = 2, le adversechoisi ne sera qu'une fois +1 ! C'est ce que j'avais fait pour les persos du joueur, et manquait juste cette ligne pour les persos adverses...

Pas très clair tout ça hmm... grand sourire

BON maintenant je passe à la suite ! Merci pour le LABEL, j'ai réussi à l'intégrer, et à afficher la ressource nourriture avec deux boutons qui font +/- 1. C'est magique !

J'en suis bientôt au choix de la carte. Je décris mon idée.

Il s'agit d'un jeu de société avec des extensions. En début de partie, le joueur choisit les extensions qu'il possède. Certaines cartes ne lui seront pas accessibles s'il ne possède pas toutes les extensions (je rappelle que le jeu que je crée est un "compagnon" du jeu de société qui sera joué pour de vrai !). Du coup, lorsque le joueur part en expédition (=> rejoint une carte tirée au sort), l'idée c'est qu'il tombe pas sur une carte qu'il peut pas jouer. Le numéro de la carte tirée au sort devra être celui d'une carte parmi les extensions qu'il possède.

Du coup, je pensais faire un tirage au sort parmi les cartes jouables, donc parmi les room qui leur correspondent. Mais vous disiez qu'il y avait un autre moyen plus léger ?

Concrètement, une carte consistera en une image (représentation de la carte et règles écrites à côté, le tout en une image), quelques boutons ajoutés plus ou moins aléatoirement sur la carte (les fameux déclencheurs d'événement). C'est tout.
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 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu EmptySam 23 Mai 2020 - 20:06

Bravo !

Effectivement je sais pas si c'est très intéressant d'utiliser les rooms si t'as pas des trucs très spécifiques à scripter à chaque fois. Pour les boutons c'est très spécifique à chaque carte, ou alors c'est par type de carte, ou complètement aléatoire ? Mais bon de toute façon à ma connaissance tu peux pas coder les réactions des boutons dans le script d'une room, et tu peux changer le background depuis le script, donc là comme ça je vois pas trop l'utilité de faire des dizaines voire centaines de rooms.

Concernant le tirage au sort des cartes, est-ce qu'il y a beaucoup de solutions possibles sur les cartes possédées, ou c'est plutôt qu'il doit faire son choix entre deux trois extensions et ça détermine et donc quelques paramètres déterminent les groupes de cartes qu'il a en sa possession ? Peut-être que le mieux pour ton tirage au sort serait d'utiliser des tableaux (très) dynamiques mais il faut voir (j'ai mis des années à comprendre ce post, pas de panique. ^^ )

Est-ce que de base tu as une idée de l'approche pour tirer les cartes en fonction des extensions ?

PS : Ici tout le monde se tutoie, n'hésites pas. clin d'oeil

_________________
"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 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu EmptyDim 24 Mai 2020 - 9:21

Whaou, effectivement ce post, il déchire... sourire

Alors hier soir j'ai cogité, et voici l'idée que j'ai :

- en choisissant nouvelle partie, le joueur doit ensuite choisir les jeux de base et extensions qu'il possède pour pas se retrouver avec des éléments de jeu qu'il ne possède pas. Je possède 3 jeux de base et 4 extensions, je crois qu'il en existe encore davantage, mais pour tester je viens de préparer 9 cartes, 3 avec un jeu de base, 3 avec l'extension 1 et 3 avec l'extension 2.

- On clique sur les boutons des extensions/jeux qu'on possède, puis on clique sur "ok". Chaque jeu/extension a sa variable, et en cliquant sur "ok", le jeu enregistre/active les variables des jeux/extensions possédés. Les variables non activées vont permettre de retirer les cartes non accessibles au joueur.

- le jeu se déroule en "expéditions" qui se succèdent, donc 1 expédition = 1 carte, choisie au hasard parmi celles que le joueur peut jouer. Lorsqu'il lance une expédition, le jeu donne une valeur aléatoire à une variable (choixcarte), dans mon exemple, entre 1 et 9. Donc si j'ai bien compris : choixcarte=Random( 8 ) + 1.

- la valeur de choixcarte va indiquer de quelle carte il s'agit. Les cartes du jeu de base sont numérotées de 1 à 3, celles de l'extension 1 de 4 à 6, celles de l'extension 2 de 7 à 9. Chaque carte a une variable à son nom, qui correspond à son numéro : carte1=1, carte2=2 etc...

- si choixcarte=4, alors le joueur joue sur la carte 4. Pour l'apparition des boutons, je ferai un script spécifique adapté à chaque carte (ça risque d'être long, mais je suis courageux !). Disons que si choixcarte=4, la carte sera telle que j'aurai prévu que le bouton1 soit visible et aux coordonnées (x,y), idem le bouton 5, mais pas le bouton3 ni le bouton17 (exemple bien sûr !).

- du coup, j'ai pensé que de base, la limite du random est égale au nombre de cartes total. Dans l'exemple, la limite du random est 8 (9 cartes, et comme le random choisit parmi des valeurs de 0 à la limite, j'ai mis un +1 pour pas qu'il y ait le 0). Ainsi, je crée une variable qui a la valeurdu nombre total de cartes - 1. Ici, il y a 9 cartes, donc "totalcartes=8". Du coup lorsque le jeu doit choisir une expédition : "choixcarte=Random(totalcartes) +1.

- si on ne choisit pas l'extension 2, mais qu'on a le jeu de base et l'extension 1 : quand je valide les jeux que je possède, il se passe :
totalcartes=5
carte7=1000
carte8=1000
carte9=1000 // ces trois lignes a priori inutile, car la valeur de choixcarte sera jamais égal à leur valeur, vu qu'on a diminué totalcartes en fonction.

Ainsi : choixcarte=Random(totalcartes) + 1 => choixcarte=Random(5) + 1 => le jeu choisit entre les cartes numérotées 1 à 6 !

- si on a le jeu de base et l'extension 2, mais PAS l'extension 1 :
totalcarte=5
carte4=1000
carte5=1000
carte6=1000 // les cartes 4, 5 et 6 seront inaccessibles
carte7=carte7 - 3
carte8=carte8 - 3
carte9=carte9 - 3 // les cartes 7, 8 et 9 seront accessibles, car auront des valeurs respectives de 4, 5, 6. En gros, elles remplacent les cartes 4, 5 et 6 !

- à la fin de l'expédition, on remet choixcarte=0 (aucune carte affichée), et on revient à la room de sélection. La room de sélection serait par exemple la room 5, et la room 6 serait le support de la carte choisie, donc besoin que d'une room pour toutes les cartes.

Voilà ce que j'ai prévu de faire ! Comme j'ai dit, l'apparition des boutons propres à chaque carte se fait une fois la carte choisie. Idem s'il y a plusieurs variantes de la carte1, si elle est appelée (choixcarte=1), ensuite peut s'exécuter un tirage aléatoire de ses variantes (qui pourraient être numérotées 1001, 1002 etc...).

Tu penses que c'est jouable ainsi ? Je vais commencer à scripter et voir ce que ça donne.

Il y aurait une solution plus simple ? (notamment par le sujet incompréhensible que tu m'as indiqué ? sourire )

l'histoire peut se compliquer lorsqu'il faudra prendre en compte davantage d'extensions. Mais j'ai bon espoir de trouver la formule ! Ce sera une chaîne de soustractions pour que les cartes rejoignent le champ accessible du random, tandis que les autres prendront une valeur inaccessible à toutes les formules (1000 par exemple).
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 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu EmptyDim 24 Mai 2020 - 15:41

Ça va pour 9 cartes, mais s'il y a beaucoup de possibilités d'extensions idéalement il faudrait un peu automatiser l'attribution de l'ID de chaque carte parce que ça va vite être compliqué. Un conseil, plutôt que de créer des variables "carte1, carte2, carte3..." crées plutôt un tableau ou tableau dynamique, comme ça tu pourras faire des trucs comme ça :
Code:
if (carte[choixcarte] == 2){
//Etc
}

Exemple un peu bidon mais le chiffre n de carte[n] sera remplaçable par une variable ce qui peut être fort utile.

Pour l'instant, 2 rooms me semblent largement suffisantes pour faire tout ça.

_________________
"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 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu EmptyDim 24 Mai 2020 - 15:50

OK, alors je vais me pencher sur les tableaux dynamiques ! J'aurai sans doute besoin d'aide là-dessus, donc je reviendrai poser des questions si jamais je bloque à comprendre le mécanisme sourire

Après j'avais une autre idée : peut-être qu'une room peut être dédié par jeu/extension ? Genre les cartes du jeu de base sur la room 5, celles de l'extension 1 sur la room 6 etc...

ça permettrait pas d'alléger les scripts ?

Et quand tu dis 2 rooms, pourquoi 2 ?

J'ai regardé les "SetbackgroundFrame" pour changer le décor des rooms. Il n'y a aucune limite au nombre de "décors" possibles pour une room ? ça pourrait faire un frame par carte, et autant de frame par room que nécessaire ?
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 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu EmptyDim 24 Mai 2020 - 17:05

SetBackgroundFrame semble visiblement trop limité, car ça repose sur un maximum de 4 images importées dans la room. Il faudrait plutôt utiliser les Drawing Surface, notamment via GetDrawingSurfaceForBackground et DynamicSprite.CreateFromExistingSprite. Je te laisse commencer à regarder les détails là dessus, mais je sais que ça peut sembler un peu complexe donc je t'expliquerai plus en détails quand j'aurais l'esprit un peu plus clair. ^^

@Baguettator a écrit:

Après j'avais une autre idée : peut-être qu'une room peut être dédié par jeu/extension ? Genre les cartes du jeu de base sur la room 5, celles de l'extension 1 sur la room 6 etc...

ça permettrait pas d'alléger les scripts ?

Et quand tu dis 2 rooms, pourquoi 2 ?

2 parce que une pour le choix des extensions, et une pour les cartes affichées. Peut-être une de plus pour le choix des personnages. Mais je ne vois pas trop l'utilité de faire une room par extension vu que si j'ai bien compris l'ensemble des cartes sera une combinaison entre le jeu de base et les extensions possédées par le joueur. Après c'est peut-être juste que ça m'échappe, mais là comme ça 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
Arlann
Cliqueur Amateur
Cliqueur Amateur
Arlann

Nombre de messages : 265

Date d'inscription : 06/04/2016


Lancer son premier jeu Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu EmptyDim 24 Mai 2020 - 17:57

@valoulef a écrit:
il y a une ligne qui dit dans la version anglaise "299 state-saving rooms per game"

Des précisions sur la limitation du nombre de rooms, AGS permet de créer 1000 rooms, mais seulement 300 dont les états de jeu restent en mémoire quand le joueur en sort, on parle ici de toutes les variables concernant les objets, des zones de marche, régions et autres spécificités des rooms.
Ce qui veut dire que les 700 autres rooms sont réinitialisées à chaque chargement.
Dans le contexte d’un jeu d’aventure les 300 premières rooms permettent de créer les lieux dont les états évoluent et restent en place au fur et à mesure des allées et venues du joueur. Les autres servent plutôt pour des menus ou des mini jeux.  
A savoir que plus il y aura de rooms parmi les 300 qui gardent leur état en mémoire, plus les fichiers de sauvegardes seront lourds.

@Baguettator a écrit:

J'ai regardé les "SetbackgroundFrame" pour changer le décor des rooms. Il n'y a aucune limite au nombre de "décors" possibles pour une room ? ça pourrait faire un frame par carte, et autant de frame par room que nécessaire ?

Une solution largement utilisée est de se servir d'un objet non solide avec une petite baseline pour afficher les sprites du background. On peut ainsi changer de sprite indéfiniment et même ajouter des effets en fondu ou des animations de plus de 5 frames. Par contre cette technique empêche d'utiliser les masques de walkbehind...
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 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu EmptyDim 24 Mai 2020 - 18:22

Yessssss... ok, les neurones chauffent, mais on y est presque !

DONC pour l'affichage de la carte choisie : l'image de la carte choisie est numérotée 1 dans les sprites, la résolution du jeu et de l'image de la carte est 800/600, donc le code est :

DynamicSprite* sprite = DynamicSprite.CreateFromExistingSprite(object[1].Graphic);
sprite.Resize(800, 600); // peut-être que ça sert à rien de redimmensionner si c'est la même taille que le jeu
DrawingSurface *surface = Room.GetDrawingSurfaceForBackground();
surface.DrawImage(0, 0, sprite.Graphic);
surface.Release();
sprite.Delete(); // je mets ça quand je quitte la carte pour qu'elle disparaisse de la room.

Ce serait de cette manière là ? A exécuter quand je rentre dans la room après la sélection de la carte ?

La solution avec la baseline j'ai pas bien saisi... A quoi ça fait référence ? sourire

Et pour le système de tableau, je crois avoir compris l'essentiel, mais je ne vois pas comment faire comprendre au jeu que certaines cartes sont innaccessibles. Je vais tenter de scripter ça demain avec une dizaine de cartes, et je vous dirais si ça a marché, mais je crois que quelque chose m'échappe. Mais bon, après tout, ça fait que quelques jours que je manipule AGS, il faut que je sois patient grand sourire
Revenir en haut Aller en bas
Arlann
Cliqueur Amateur
Cliqueur Amateur
Arlann

Nombre de messages : 265

Date d'inscription : 06/04/2016


Lancer son premier jeu Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu EmptyDim 24 Mai 2020 - 19:01

La baseline donne l’ordre d’affichage de tes objets pour créer une impression de profondeur s’il y a superposition entre eux ou avec des personnages.

L’idée est d’utiliser un objet avec une baseline faible pour qu’il s’affiche derrière tout le reste et de l’utiliser ainsi en tant que background. Il faut bien entendu lui donner une position cohérente par rapport à la taille de ta room, de mémoire je crois que les objets se positionnent par le point d’ancrage bas/gauche.
Ensuite tu n’as plus qu’à choisir le sprite qu’utilise cet objet.

Avec cette solution pas besoin de passer par des sprites dynamiques, mais j’avoue prendre la conversation un peu en route et comme je vois que tu utilises une fonction Resize sur ton sprite dynamique je me dis que tu cherches peut être à faire quelque chose de plus complexe qui nécessite vraiment leur utilisation...
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 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu 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 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 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 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

_________________
"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 Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu 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
Contenu sponsorisé




Lancer son premier jeu Empty
MessageSujet: Re: Lancer son premier jeu   Lancer son premier jeu Empty

Revenir en haut Aller en bas
 
Lancer son premier jeu
Revenir en haut 
Page 1 sur 7Aller à la page : 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: