AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  Connexion  

Partagez | 
 

 Système de craft basique ?

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Mamie Wawa
Très bonne participation


Messages : 112

MessageSujet: Système de craft basique ?   Lun 23 Fév 2015 - 20:49

Bonsoir,

J'essaye de m'entrainer avec les boucles for et les arrays et donc j'ai essayer de créer un système de craft assez basique, celui-ci se base sur le nombres d'objets et leurs quantités possédés puis propose des recette en conséquence.

J'ai donc commencer par créer des variables simple qui définissent les objets :
Dans le oController.create:
Code:

// LOG
global.log_collect = 0;
// ROCK
global.rock_collect = 0;
// LEAVE
global.leave_collect = 0;

Puis je créé l'array qui va contenir les noms et la quantité d'objets possédé :
Dans le oController.create ET step event:
Code:
craft_item[0,0] = "log : ";
craft_item[0,1] = global.log_collect;
craft_item[1,0] = "rock : ";
craft_item[1,1] = global.rock_collect;
craft_item[2,0] = "string : ";
craft_item[2,1] = global.string_collect;
craft_item[3,0] = "leave : ";
craft_item[3,1] = global.leave_collect;

Enfin j'affiche le système :
oController.draw:
Code:
for ( i = 0; i < 4; i++; )
{
    draw_text(x+10,y+10+(i*12),string(craft_item[i,0])+string(craft_item[i,1]) );
}

Maintenant me voilà confronté à de nouveaux problèmes au quels je n'arrive pas vraiment à y répondre

- Dans la boucle for, j'ai essayé de mettre array_length_1d(craft_item) mais cela ne m'affiche que les 2 premiers objets ( log et rock ) j'ai essayé donc array_length_2d mais rebelote, comment utilisé cette fonction ?

- Comme je l'ai dit plus haut j'aimerais que le système propose les recette si nous possédons les objets adéquats, mais comment faire pour vérifier chaque recette sans utiliser plein de IF à la chaine ?
J'aimerais éviter ça :

Code:
if ( craft_item[0,1] >= 2 )
{
    draw_sprite(spr_craft1,-1,100,100);
}

- Enfin pour proposer les recettes je voulais le faire sous forme de sprite qui s'afficheraient donc à la suite, mais la non plus je ne vois pas comment je pourrais vérifier si un sprite est déjà affiché


j'imagine qu'il faudrait que j'utilise des grid pour la dernière question mais je ne vois pas quelle fonction utiliser ( j'ai parcouru la documentation sans grand succès )

Pour la deuxième question je pense qu'il faudrait utiliser d'autres boucle for et peut être déclaré la quantité nécessaire à la recette dans l'array donc ? mais si la recette demande plusieurs objets ? Je bloque à ce niveau ...


Merci d'avance

Bonne soirée.
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

Messages : 8898
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: Système de craft basique ?   Lun 23 Fév 2015 - 21:20

Ouai sous GM c'est un peu le bordel car tu peux pas faire de structures. Du coup, le mieux c'est de faire un truc du genre:

Représenter les ingrédients:
item_name[0] = "Rock"
item_count[0] = 0
...

Ensuite pour gérer tes items tu peux faire un bête script, avec une variable de comptage:
Code:
//addItem(name, icon)
item_name[global._item_counter] = argument0
item_count[global._item_counter] = 0
item_sprite[global._item_counter] = argument1
global._item_counter += 1

Représentation des recettes
recipe[0, 0] = 2 // nombre d'ingredients
recipe[0, 1] = 3 // item index du résultat, un item random la
recipe[0, 2] = 0 // ingredient 1: item index de rock
recipe[0, 3] = 1 // ingredient 2: item index d'un autre item...
....

Affichage:
Code:
for(i=0; i<recipe_count; i+=1)
{
draw_sprite(item_sprite[recipe[i, 1]], 0, x, y + i * line_hei)
for(j=0; j<recipe[i, 0]; j+=1)
{
draw_sprite(item_sprite[recipe[i, j+2]], 0, x + (j + 1) * col_wid, y + i * line_hei)
}
}

_________________
                 
Revenir en haut Aller en bas
Mamie Wawa
Très bonne participation


Messages : 112

MessageSujet: Re: Système de craft basique ?   Mar 24 Fév 2015 - 17:04

Salut,

Merci de m'avoir répondu, j'ai essayé de comprendre ton code mais je bloque à plusieurs niveau, pour ton script pour ajouter les items, la variable global._item_counter correspond à une seule ou bien je la change par global.wood_item_counter par exemple ? Je ne comprend pas non plus le fait de mettre des "[]" c'est un array qui contient une variable ? ça devient confus pour moi

Après pour le draw event, recipe_count correspond au nombre de recettes actuellement disponible, mais après au niveau de item_sprite[recipe[i, 1]], tu fais appelles à un array a l'intérieur d'un autre ? ouh
Encore une fois je suis vraiment perdu ( même en lisant le code plusieurs fois et en relisant les arrays et variables ...

Et si j'ai bien compris les 2 boucles for affiche chaque sprite des recettes donc ?
J'aurais aimé afficher les recettes seulement selon le nombres d'items disponibles ( si j'ai 2 bois et 2 pierres, afficher les recettes qui contiennent 2 bois et ou 2 pierres )

Aussi si j'ai bien compris ton code le nombre d'ingrédients en recipe[0,0] ne prend pas en compte les ingrédients de chaque ? seulement si les sortes ?

Merci bien, et encore désolé de poser autant de question mais ces boucles imbriqué ainsi que les arrays imbriqué me rendent vraiment confus !
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

Messages : 8898
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: Système de craft basique ?   Mar 24 Fév 2015 - 17:28

Non juste global._item_counter. L’intérêt c'est qu'il s'auto incrémente tout seul, comme ça t'es pas obligé de spécifier l'index de chaque entrée en appelant le script d'initialisation de la table des items. C'est plus clair à écrire, et tu peux switch des lignes sans avoir à tout modif.

item_sprite[recipe[i, 1]] me permet juste d'obtenir le sprite de l'objet résultat de la recette 'i', vu que recipe[i, 1] contiens un index d'objet, me suffit ensuite d'aller a la table des sprites...

Pour afficher uniquement les recettes possibles, rien de compliqué, suffit que tu crées une fonction pour vérifier qu'une recette peut être faite en regardant le nombre de chaque élément que t'as, pis ensuite:
Code:
line = 0
for(i=0; i<recipe_count; i+=1)
{
if(!craftable(i))
  continue
draw_sprite(item_sprite[recipe[i, 1]], 0, x, y + line * line_hei)
for(j=0; j<recipe[i, 0]; j+=1)
{
draw_sprite(item_sprite[recipe[i, j+2]], 0, x + (j + 1) * col_wid, y + line * line_hei)
}
line += 1
}

_________________
                 
Revenir en haut Aller en bas
Mamie Wawa
Très bonne participation


Messages : 112

MessageSujet: Re: Système de craft basique ?   Mer 25 Fév 2015 - 12:54

Merci, onilink_
Je vais essayer de faire marcher tout ça même si ça reste encore un peu brouillon dans ma tête, merci pour ton aide en tout cas Smile
Revenir en haut Aller en bas
Contenu sponsorisé




MessageSujet: Re: Système de craft basique ?   

Revenir en haut Aller en bas
 
Système de craft basique ?
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» [XP] Système de craft
» kids2sit système pour un 2ème enfant
» [Système d'imposition] Imposition négative et taux fixe ?
» Colour Craft Collection
» Recherche d'un emploi d'ingénieur système orienté Linux... En Italie

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Développement :: Entraide débutants-
Sauter vers: