Système de génération d'armes

Salut Giktayms, je voudrais parler de mon premier projet en c #. Comme je m'intéresse aux jeux vidéo, je voulais faire quelque chose dans ce domaine. J'ai pris une idée d'une série de jeux Borderlands , à savoir un système de génération d'armes. Je l'ai, bien sûr, beaucoup simplifié.

Je pense qu'il vaut mieux commencer dès le début. J'ai déjà essayé de travailler en C ++, cependant, quelque chose n'a pas fonctionné. Il a commencé à s'intéresser au langage c # au cours de l'été, au début les conférences vidéo de Microsoft ont vraiment aidé. Après le cours, je voulais faire quelque chose d'intéressant. J'ai donc commencé à travailler.

Ce que je voulais depuis le début:

  • Travailler avec des fichiers .txt et .bmp
  • Enregistrez des fichiers et supprimez-les du répertoire spécifié
  • Pour que tout fonctionne + pour un processus de développement agréable

Le système de génération d'armes lui-même est un peu un casse-tête. Dans le jeu Borderlands, une arme à feu est créée et les pièces y sont appropriées (Butt, Handguard, Barrel, etc.). Ils sont assemblés en une seule pièce, et l'équipement fini reçoit les caractéristiques correspondant aux pièces. Il a également un fabricant, un nom et un niveau. Il existe également une liste séparée des armes "légendaires" déjà créées avec des caractéristiques spéciales et une faible chance de tomber. J'ai fait ce système en c #. Je voulais seulement faire des couteaux. Pour commencer, j'ai décidé de générer des épées à partir de deux parties: lame + poignée.

Ce qui a été mis en œuvre:

  • Nous lisons des fichiers txt avec des listes de pièces et les caractéristiques correspondantes.
  • Sélectionnez aléatoirement chaque pièce (lame + manche).
  • Nous connectons leurs images, prenons la moyenne arithmétique de leurs caractéristiques, appliquons les modifications du fabricant, ajoutons leurs noms (adjectif + nom).
  • Quelques méthodes auxiliaires: «vendre des armes», «trouver un coffre» et «tuer un ennemi» (les deux dernières ne diffèrent que par leur chance d'obtenir des armes légendaires).

Les fichiers texte étaient l'élément le plus simple du programme, ils contenaient des lignes de caractéristiques: nom, vitesse de bataille, dégâts, chance de dégâts critiques, prix, fabricant, niveau et numéro d'image pour les caractéristiques de cette ligne.

Voici une vue de fichier texte pour les épées légendaires:
UltraLord 5100 20 1000 humain 11 31.
TitanKiller 6 90 23 1000 orc 11 32.
SoulEater 4120 21 1000 démon 11 33.

Avec les photos, c'était beaucoup plus difficile. J'ai dû éditer les images trouvées sur Internet. Il a fait des images pixel 200x600. Pour que tout soit en forme, j'ai placé les pièces exactement au centre. Plus tard, un autre problème est apparu: la palette de couleurs et le détail des éléments différaient. Ce problème peut être résolu au stade initial de la création d'images: dessinez dans une seule couleur, puis peignez l'arme déjà créée.

Toutes les options possibles pour les épées conventionnelles:



Trois épées légendaires:



Avantages de ce système:

  • Le nombre d'armes finies augmente géométriquement avec l'ajout d'une autre pièce. Par exemple, j'ai 2 parties de 5 pièces - un total de 25 épées différentes. Si vous ajoutez plus de détails avec 5 instances différentes, le nombre d'options sera égal à 125.
  • Ajouter de l'excitation au jeu est le désir d'obtenir des armes des meilleures parties.

Inconvénients:

  • Toutes les pièces doivent être adaptées les unes aux autres.
  • Plus difficile à mettre en œuvre.

J'ai tout posté sur GitHub , fait des commentaires dans mon programme. Le processus de développement, de dessin, d'étude était fascinant pour moi. Conjuguer affaires et plaisir. J'ajouterai peut-être plus de types d'armes: des arcs, des haches ... Je pense aussi à transférer ce projet vers Windows Forms avec l'ajout d'interactivité pour que je puisse choisir parmi quelles pièces assembler. Si vous avez des questions ou des commentaires, j'essaierai d'y répondre. Je serai particulièrement heureux avec de nouvelles idées.

Source: https://habr.com/ru/post/fr406635/


All Articles