Question

Je recommence la programmation de jeux. Il y a 10 ans, je réalisais des jeux en qbasic et je n'ai pas programmé de jeux depuis, donc je suis assez rouillé. J'ai programmé tout le temps cependant, je suis développeur web / DBA / admin maintenant. J'ai plusieurs questions, mais je vais me limiter à une par poste.

Le jeu sur lequel je travaille va être un très grand monde. Ce sera un peu comme URW , mais un monde encore plus vaste et plus semblable à un 'RPG'.

Ce que j’essayais de décider, c’est quelle est la meilleure façon d’organiser la carte, de la sauvegarder et d’y accéder. J'ai eu l'idée d'utiliser sqlite pour stocker les données. Je pourrais même utiliser la base de données sqlite comme fichier de sauvegarde pour le jeu, simple et agréable.

Quelqu'un a-t-il des conseils sur la manière de procéder ou des idées pour d'autres méthodes de stockage?

Voici les exigences pour mon jeu:

  • J'ai besoin d'un accès aléatoire complet pour me retrouver dans le monde du jeu (les NPC, les monstres et les animaux seront tous actifs tout le temps).
  • J'utilise Stackless Python 3.1, les options sont assez limitées à moins que je ne fasse beaucoup de travail.
  • Besoin de pouvoir gérer un très grand monde.
  • La prise en charge de la concurrence serait un avantage, mais je ne pense pas en avoir besoin.
Était-ce utile?

La solution

Ne manipulez pas les bases de données relationnelles à moins que vous ne soyez obligés de les utiliser en raison de facteurs externes.

Regardez le cornichon de Python, shelve .

Shelve est rapide et évolue bien. Il élimine les conversions compliquées entre les représentations Python et non Python.

Modifier.

Un conseil plus important. Ne vous laissez pas embourber dans les choix technologiques. Obtenez les emplacements, les objets, les personnages, les règles, etc. pour travailler . En Python. Aussi simplement et correctement que possible.

Ne brûlez pas une seule calorie cérébrale sur un modèle autre que le modèle principal, la correction et un ensemble de fonctionnalités de base permettant de prouver que fonctionne .

Une fois que vous avez un modèle qui fonctionne réellement et que vous pouvez vous exercer à l'aide de tests unitaires sophistiqués, vous pouvez alors faire des choix technologiques.

Une fois que vous avez un modèle, vous pouvez l’agrandir de manière significative dans des millions d’emplacements et voir le type de stockage requis. Le modèle ne peut pas changer - c'est l'essence de l'application. Seules les couches d'accès et de persistance peuvent être modifiées pour ajuster les performances.

Autres conseils

Cela ressemble à ce que vous demandez est un type de index spatial . Pour un très gros jeu en 2D, je vous recommande d'utiliser un quadtree . Quadtree fonctionne bien lorsque vous avez une grande surface et que l'activité a tendance à se produire dans des régions localisées de la région, comme c'est le cas pour la plupart des jeux de type RPG. Cela réduira vos besoins en stockage et, espérons-le, accélérera également la détection des collisions.

En ce qui concerne la sauvegarde du jeu, des informations telles que les statistiques de joueur et de monstre peuvent être enregistrées dans une base de données, si vous craignez que celles-ci ne changent souvent. Pour la mise en page réelle, je vous recommande d'utiliser un format de fichier binaire spécifique à votre jeu. Il n'y a pas beaucoup de requêtes de type base de données que vous devez habituellement exécuter sur la disposition par niveau et vous pouvez effectuer de grandes optimisations en utilisant votre propre format. Je ne saurais pas comment commencer à stocker un format semblable à un quadtree dans une base de données (même si je suis sûr que c'est possible).

J'utilise une base de données non relationnelle pour stocker de grandes quantités de données. Si vous pouvez travailler sur un matériel 64 bits, MongoDB avec son Le pilote Python est vraiment très bon. Je ne sais pas si cela convient à Stackless, mais c’est une possibilité.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top