2010-06-12 7 views
1

J'essaie de réaliser un petit projet de jeu pour approfondir la programmation OO (winforms C++/cli). J'ai déjà commencé à coder, mais j'aimerais maintenant faire une nouvelle conception. Pour le début, le jeu devrait se composer de quatre parties comme le moteur de jeu, l'interface utilisateur, les meilleurs scores et le terrain de jeux. Heres une petite classe (non-UML conformes) diagramm pour visualiser mes finsProgrammation orientée objet - besoin de votre aide

Class diagram

Serait-ce la bonne façon? À mes yeux, le moteur de jeu est responsable de contrôler les séquences de jeu (machine d'état?) Et d'échanger des informations entre toutes les autres classes.

J'apprécie toute aide!

EDIT:

ESt donc un jeu très simple, pas une grosse affaire! lien de ce que je Voici un fait maintenant: http://www.file-upload.net/download-2595287/conways_project.exe.html (pas de virus :) mais je suppose que vous avez besoin framwork .NET pour le faire fonctionner)

+0

Vous devez concevoir d'abord, puis programmer un jeu. Aussi, est ce jeu dans une console, en 2D, 3D ..? – Alerty

+0

Il semble que vous soyez plus à la recherche de jeux d'exemples existants. Le développement du jeu est généralement dicté par les exigences de performance, et non par la beauté du design. – Dummy00001

+2

Hey comment avez-vous fait ce diagramme génial? –

Répondre

6

Malheureusement, votre conception actuelle suce :)

Je ne vais pas dire ce que je vais proposer est en fait la meilleure solution disponible, parce que dans la conception de jeu, il est généralement « pas le meilleur » solution, mais je pense que cela vous ferait réfléchir.

Agrandir UML here.

alt text http://yuml.me/1924128b

Disons que vous avez votre classe de base Game. C'est une classe abstraite qui enveloppe toutes les logiques de jeu et fonctionne comme une sorte de couteau suisse. Vous devez créer deux autres classes - UI et State (qui, évidemment, encapsulent les opérations d'interface utilisateur du jeu et stockent l'état actuel du jeu). Laissez votre classe Game tenir UI et State instances.

Maintenant, votre classe Game devrait avoir des méthodes de base pour contrôler votre jeu. Ils pourraient être simples render(...) et update(...) méthodes et cette partie est en fait un peu difficile. Si votre jeu est en temps réel, vous devrez mettre à jour votre état toutes les millisecondes Y, donc votre update(...) devrait être appelée en boucle.

Si votre jeu n'est pas réellement en temps réel, vos mises à jour ne doivent se produire que lorsque l'utilisateur fait quelque chose ou que vous connaissez réellement que vous avez besoin de changer quelque chose. Vous pourriez mettre en place une file d'attente de messages ici et l'appel update(...) viderait simplement tous ces messages. Puis, la méthode render(...). Créez une classe et appelez-la Backend - laissez cette classe encapsuler toutes vos possibilités de dessin. Il ya une chose vraiment cool ici - vous pouvez laisser votre Backend être une super-classe abstraite et créer quelques béton backends, qui dérivent de Backend. Et cela vous donnerait l'occasion de changer votre Backends avec des manipulations de code simples.

Après cela, vous devez passer votre Backend par exemple à votre méthode render(...), qui ferait le dessin approprié et il est logique pourrait être écrit de la manière suivante:

foreach (const Object& object, game_state) { 
    object->render(backend); // Or something like that 
} 

La dernière chose à mentionner, votre état de jeu . Vous pourriez avoir une structure simple pour contenir tous vos objets courants, marquer, etc., etc. Laissez chaque objet accéder à cette structure GameState et tout ira bien.

En fait, il y a beaucoup de choses à penser, si vous le souhaitez, je pourrais écrire plus sur cette approche de conception de jeu et de partager quelques trucs :)

+0

J'ajouterais qu'en fonction de ce que fait l'OP (jeu console, jeu 3D, etc.), il pourrait être important de gérer une fenêtre (initialisation de la fenêtre, erreurs, fermeture de la fenêtre). Aussi, si cela est en temps réel et en 2D ou 3D (DirectX, OpenGL, etc.), il est important d'avoir un FPS constant. – Alerty

1

Votre « Game Engine » serait probablement considéré comme plus d'un « Math Bibliothèque.' Vous souhaiterez peut-être insérer un autre objet entre "Jeu" et les autres classes de serveur qui "Délègue" les exigences de "Jeu" aux classes de serveur et appelle cela "Moteur de jeu".

Également peut-être «High Score» et «Playground» pourraient être combinés dans une classe qui représente «Game State» et le port directement sur «Game». 'Playground' pourrait être une classe de serveur qui encapsule n'importe quel code pour faire la présentation réelle de l'arrière-plan où cela représenterait habituellement une «classe de rendu».

à mon humble avis

Questions connexes