Dernière mise à jour sur le site :
Canard PC n°269 est en kiosque. Vous y trouverez la neuvième leçon, deuxième partie du cours sur le monde de jeu.
Dernière mise à jour sur le site :
Canard PC n°269 est en kiosque. Vous y trouverez la neuvième leçon, deuxième partie du cours sur le monde de jeu.
Merci. Ca prend forme. On sent que c'est hyper modulable.
¯\_(シ)_/¯ ♫♪♪♫♪ .......d(oO)b....... ♪♫♪♪♫ ¯\_(ひ)_/¯
Euh, question, depuis quelques temps j'ai changé d'ordi et je me retrouve avec windows 8. Mon dernier était un vista et j'avais pas de problème pour suivre le cours. Là, j'ai l'impression que Framework XNA 4.0 marche pô avec Win 8, ou alors ...
PS: Si, j'ai trouvé un tuto en anglais, c'est juste plus chiant à installer.
Dernière modification par Molina ; 04/02/2013 à 22h47.
À propos de la dernière leçon, je tique un peu sur GetRandomDefinitionID. Du moins tel que cette méthode est décrite dans le magazine (je n’ai rien pour ouvrir un .7z et j’ai la flemme d’installer ce qu’il faut).
Mon reproche c’est qu’il y a une probabilité non nulle que l’on ne trouve pas de définition valable, même s’il en existe une. De plus, le temps mis pour trouver une définition valide est aléatoire. Un jeu qui peut potentiellement freezer aléatoirement, je trouve ça un peu moche. Ok, la limite à 10000 limite le freeze mais cause un échec de la fonction, ce qui est pire. Cela implique aussi de concevoir le jeu de telle façon qu’il y ait une bonne chance de tomber sur une définition valide. Imagine qu’il n’y a qu’une définition valide parmis 10000. La probabilité d’échec est quand même super élevée (une sur deux à vue de nez). C’est une limitation arbitraire et c’est triste. D’une façon générale ce n’est vraiment pas une bonne pratique de choisir un élément aléatoirement de cette façon.
Un algorithme raisonnable est le suivant.
1) Filtrer les définitions valides (ou simplement considérer que les invalides ont une probabilité de 0).
2) Compter la somme des poids de probabilité associés à chaque définition.
3) Choisir un nombre aléatoire entre 0 et la somme de ces poids moins 1.
4) Parcourir les définitions valides pour trouver celle qui correspond à notre choix.
En pseudo-code ça donne ça :
Par contre tu as choisi une autre notion que le « poids ». Il faut donc adapter les définitions. On doit pouvoir calculer le poids à partir de ton nombre entre 1 et 10 mais autant directement stocker le poids.Code:- initialiser sum à 0 - pour chaque définition D - si D est valide, ajouter le poids de D à sum - choisir un entier A entre 0 et sum-1 - pour chaque définition D - si D est valide - si A est supérieur ou égal au poids de D - retrancher le poids de D à A et passer à la définition suivante - sinon, retourner D - sinon, passer à la définition suivante
En effet, ton algorithme est beaucoup mieux. J'ai vraiment écrit le mien à l'arrache entre deux papiers. J’inclurai ta modification (et tu seras crédité, of course) dans une prochaine leçon.
---------- Post added at 17h01 ---------- Previous post was at 15h02 ----------
Dernière mise à jour sur le site :
Canard PC n°270 est en kiosque. Vous y trouverez la dixième leçon, troisième partie du cours sur le monde de jeu.
Je viens de lire la dixième leçon et j’avoue être assez curieux de voir comment tu comptes implémenter les intérieurs.
Du coup je me mets à imaginer comment générer des intérieurs avec les contraintes suivantes :
- être aléatoires (c’est un rogue-like après tout) ;
- ne pas avoir d’endroit où on ne peut pas aller (quoique si plus tard on ajoute la possibilité de creuser, ce n’est pas obligatoire) ;
- ne pas empêcher d’avoir un chemin entre l’entrée et la sortie-;
- n’utilisant que des algorithmes simples, mais efficaces (c’est Développez Couché, après tout).
Ça donne l’impression d’avoir besoin d’algorithmes sur les graphes. Va-t-on voir un Dijkstra dans Développez Couché ?
Diantre, le suspense est insoutenable !
Je me disais bien qu’expliquer Dijkstra était un peu ambitieux Mais je reste curieux de ta voir ta technique sommaire, pour voir quel compromis tu as choisis. Même si c’est juste « faire un gros carré et puis voilà ».
Dernière mise à jour sur le site :
Canard PC n°271 est en kiosque. Vous y trouverez la onzième leçon, quatrième partie du cours sur le monde de jeu.
Contrairement à ce que tu disais, je ne suis pas déçu : l’algo que tu as choisi est simple mais malin, il donne des bons résultats pour un prototype et ça c’est le genre de truc que j’apprécie Alors ok on peut faire bien mieux mais j’ai été agréablement surpris. Et tu donnes deux liens pour en savoir plus que j’irai lire avec plaisir !
En fait depuis le début je trouve que tu fais de très bons choix au niveau du compromis expressivité / puissance. C’est dommage que y’ait pas plus d’animation sur ce fil, pour discuter d’alternatives potentielles à tes choix…
A ce sujet:
http://pcg.wikidot.com/pcg-algorithm:dungeon-generation
Une mine d'or .
Du coup je me tâte à réaliser un roguelike. Mais ca ne sera pas du C#.
Dernière mise à jour sur le site :
Canard PC n°272 est en kiosque. Vous y trouverez la douzième leçon, qui porte sur les objets et l'inventaire.
Aaaaaah on va bientôt voir du LOOT ? Attention il est scientifiquement prouvé qu’à partir du moment où un jeu a du loot, on devient accroc et le développement ralenti fortement.
Dernière mise à jour sur le site :
Canard PC n°273 est en kiosque. Vous y trouverez la treizième leçon, première partie du cours sur le gameplay et les règles de jeu.
Je viens de terminer la saison 1, et j'ai trouvé ça plutôt facile, bien fait dans le sens où on écrit le code essentiel et on comprend bien ce que l'on fait.
Du coup j'entame la saison 2, et là je suis très déçu: malgré mon passif en programmation (je me considère pas comme débutant complet disons), j'ai beaucoup de mal à suivre. J'en suis à la leçon de Noel (n°266 je crois), et je suis largué.
La principale raison vient du fait que l'on ne code rien finalement, on se contente de lire ce qui a déjà été produit, et encore une infime partie, le gros du boulot étant fait par des classes qui ne sont pas détaillées et qui sont franchement incompréhensibles en l'état.
Bref, je suis déçu parce que ça n'est plus du tout didactique, je serai complètement incapable de reprogrammer tout seul ne serait-ce que le moteur vidéo de la 2ème leçon alors que lors de la saison 1 j'étais capable de tout refaire tout seul ou presque.
Après je comprends bien les limites imposées par la demi-page tous les 15j, certes, mais n'aurait-il pas fallu partir sur quelque chose d'un peu moins complet/modulable pour que ça soit plus accessible ? Moi qui pensait pouvoir utiliser cette base pour créer mon propre RL, je pense que ça ne sera pas possible.
Désolé de refroidir l'ambiance ici, j'ai hésité à poster mais je suppose que je suis pas le seul dans ce cas là.
Nan, tu n'es pas le seul, moi j'ai presque sombré complet, je n'ose même plus ouvrir les classes, même si j'ai remarqué que LFS avait commenté son code par endroit. La marche est haute entre la saison 1 et la saison 2.
Si je suis motivé, je me prendrai plusieurs heures la tête entre les mains et j'essaierai de reprendre bien avant.
Dernière mise à jour sur le site :
Canard PC n°274 est en kiosque. Vous y trouverez la quatorzième leçon, deuxième partie du cours sur le gameplay et les règles de jeu.
J'ai un soucis avec les potions de soin. Pas moyen de les consommer.
A part ça toujours aussi sympa de retrouver cette rubrique. J'ai même tendance à me jeter dessus en premier.
¯\_(シ)_/¯ ♫♪♪♫♪ .......d(oO)b....... ♪♫♪♪♫ ¯\_(ひ)_/¯
IMPORTURGENT :
La rubrique "Développez Couché" du prochain numéro de Canard PC (enfin pas le prochain mais celui d'après, le n°276 daté du 15 mai 2013) sera entièrement consacrée à vos questions.
Si quelque chose dans n'importe quelle leçon depuis le début de la saison vous a semblé difficile, peu clair, etc, dites-le moi ici (et le plus vite possible, date de bouclage oblige).
Dernière mise à jour sur le site :
Canard PC n°275 est en kiosque. Vous y trouverez la quinzième leçon, troisième partie du cours sur le gameplay et les règles de jeu.
Salut Sébum.
J'ai commencé a mater tes leçons très sympas, mais je n'ai pu m'empêcher de constater un bug/exploit:
Quand tu ramasses un objet, tant que tu ne bouges pas, tu peux ramasser l'objet en n exemplaires.
En effet, dans ton code (Entity_Players.cs, version 273-275), tu fais:
Destroy devait t'assurer la "disparition" de l'objet de la case.Code:public bool Action_GetItem() ... if (String.IsNullOrEmpty(Game.Player.Inventory[i])) { Audio.PlaySound("game\\pickup"); Game.Player.Inventory[i] = ((Entity_Item)e).DefID; Game.BR.UI.AddConsoleLine("Objet ramassé : " + Game.BR.Univ.GetDefinition<D_Item>(((Entity_Item)e).DefID).Name, Color.White); e.Destroy(); return true; }
Mais ca ne marche pas car ClearDestroyedEntities() (ou Game.EndPlayerTurn() qui l'appelle) ou autre n'est pas appelé pour enlever l'entité du tableau (comme c'est le cas pour les ennemis), le tour n'est pas "fini".
Si on rajoute une ligne pour le supprimer, ca marche comme prévu à l'origine:
Note que je n'ai pas appelé Game.EndPlayerTurn(), car ça ferait avancer les ennemis. Et ClearDestroyedEntities() pour un seul objet qu'on connait, c'est ameuter les renards pour aboyer après que la caravane soit passée !Code:if (String.IsNullOrEmpty(Game.Player.Inventory[i])) { Audio.PlaySound("game\\pickup"); Game.Player.Inventory[i] = ((Entity_Item)e).DefID; Game.BR.UI.AddConsoleLine("Objet ramassé : " + Game.BR.Univ.GetDefinition<D_Item>(((Entity_Item)e).DefID).Name, Color.White); Area.Entities.Remove(e); e.Destroy(); return true; }
Dans le métier du jeu, le débogage, c'est le plus important !
C'est pas faux.
Pour revenir au jeu j'ai quelques questions :
1. Pour l'instant, un objet équipé est perdu quand on en équipe un autre, c'est bien ça ?
2. Quand on se déplace le son est pénible, il faudrait lancer un grand concours de sons à intégrer dans le jeu (8bits ou pas). En tout cas, comme c'est le son qu'on entend le plus souvent dans le jeu il faudrait vraiment faire quelque chose.
3. Peut-on en l'état gérer la rareté d'apparition des ennemis ? Je pense par exemple à intégrer une araignée "rare" qui droperait un objet "rare", ce genre de choses.
4. J'ai souvent des alertes "Utilisatio processeur élevée" quand je lance BabelRogue. C'est pas vraiment une question, je sais.
Beau boulot pour finir. On peut être fier de nous.
Je me replonge dans les précédentes leçons histoire de voir si j'ai bien compris tout le code.
Dernière modification par Djinn42 ; 03/05/2013 à 09h04.
¯\_(シ)_/¯ ♫♪♪♫♪ .......d(oO)b....... ♪♫♪♪♫ ¯\_(ひ)_/¯
Non, il est remis dans l'inventaire dans le "slot" qu'occupait l'objet qui le remplace. Je viens de vérifier, ça marche.
C'est déjà fait : https://sites.google.com/site/develo...che/contribuer
Oui, en modifiant le paramètre "conditions.rarity" dans leur définition. Par contre les ennemis ne droppent rien pour le moment.
Bizarre.
Dernière mise à jour sur le site :
Canard PC n°276 est en kiosque. Vous y trouverez la seizième leçon qui porte sur la correction de bugs.
Dernière mise à jour sur le site :
Canard PC n°277 est en kiosque. Vous y trouverez la dix-septième leçon qui porte sur le contenu.