Seelies, un jeu de stratégie persistant
#58
C'est fait ! Les unités qui apparaissent sur une zone vont maintenant sur le territoire qui a déployé l'appât le plus alléchant !

Chaque espèce dispose de préférences : ça pondère la valeur de chaque point de ressource dans l'appât.

J'ai découvert un usage des tuples assez amusant en Elixir pour le tri selon plusieurs critères.

Un tuple, c'est un ensemble d'éléments de taille fixe. Par exemple, si je décidais de représenter un paquet de cartes à jouer, je pourrais avoir quelque chose comme :

deck = [{:spade, 10}, {:hearth, 4}, {:spade, 3}]

Ce qui est marrant, c'est quand on utilise des tuples dans une fonction de tri : le premier élément de chaque tuple est comparé, puis le suivant. C'est très intéressant quand les valeurs sont numériques.

Si je triais mon jeu de carte, les symboles seraient triés par enseigne (les atoms sont triés selon l'ordre alphabétique), puis par valeur.

> Enum.sort_by(deck, fn (card) -> card end) # card est de la forme {suit, number}
[hearth: 4, spade: 3, spade: 10]
# On peut l'écrire plus simplement : Enum.sort(deck)

Si je voulais trier n'abord par valeur, puis par enseigne, je devrais récupérer les valeurs du tuple et les présenter dans l'autre sens (valeur puis enseigne).

> Enum.sort_by(deck, fn ({suit, number}) -> {number, suit} end)
[spade: 3, hearth: 4, spade: 10]


Dans Seelies, j'ai dû trier les différents appâts disponibles selon deux critères : leur valeurs pour l'unité (après pondération) et l'antériorité de la définition de l'appât. Je veux d'abord la plus grosse valeur, puis en cas d'égalité l'appât défini en premier.

Enum.sort_by(baits,  fn ({timestamp, _territory_id, weighted_value}) -> {-weighted_value, timestamp} end)

L'underscore devant territory_id veut dire que je ne vais pas utiliser cette valeur, si je ne le mettais pas, le compilateur me signalerait que je ne me sers pas de territory_id. Je pourrais aussi mettre juste _ plutôt que _territory_id, mais ça me permet d'être plus explicite quant au contenu du tuple.

Je suis content d'avoir repris le code !

La prochaine étape va être difficile puisque je dois… imaginer le système de combat de mon jeu ! Je vais ouvrir un sujet dédié pour recueillir des idées, mes récentes découvertes vidéoludiques (auto battlers et gacha/combat) m'ont données quelques pistes.
Répondre


Messages dans ce sujet
RE: Seelies, un jeu de stratégie persistant - par Sephi-Chan - 10-24-2019, 03:15 PM



Utilisateur(s) parcourant ce sujet : 1 visiteur(s)