9
votes

Comment modéliser des données complexes

Je dois créer un modèle qui stocke des commandes de jeu pour des jeux sur plusieurs plates-formes. J'ai du mal à trouver la bonne approche.

  1. Les boutons de contrôleur sont différents sur différents systèmes (Wii, Xbox 360, PS3 ont leurs propres boutons de contrôleur spécifiques.)
  2. Certains jeux sont en fait plusieurs jeux emballés comme un; Cela signifie qu'un seul produit peut avoir plusieurs contrôles en fonction du jeu joué.
  3. Les commandes de gameplay pour de nombreux jeux changent en fonction de votre activité en jeu (conduite / marche / vol, etc.)
  4. Il ne suffit pas de stocker des fonctions du bouton car la plupart des jeux ont plusieurs mouvements spéciaux nécessitant une combinaison de boutons.

    Comment approcheriez-vous ce problème? Honnêtement, je ne sais pas où commencer!

    Mise à jour: Merci beaucoup à tous pour votre contribution réfléchie et très utile. Je dois encore choisir et répondre car, à la fin, il a été décidé que cette fonctionnalité ne vaut pas l'effort. Merci beaucoup encore.


1 commentaires

C'est tout autour d'un problème de conception assez cool. :) Toile élégamment, de toute façon!


7 Réponses :


1
votes

Vous pouvez essayer ceci pour commencer à commencer (éditer: deuxième essai) strong>: xxx pré>

par exemple: p>

GameID  GameTitle
----------------------------------------------
1       Super Mario Bros.

ControllerID ControllerDescription GameID
----------------------------------------------
1            Main Controller       1

EffectID EffectDescription ControllerID
----------------------------------------------
1        Run               1
2        Jump              1
3        Pause             1
4        Move Left         1
5        Move Right        1

ButtonID ButtonKey      EffectID
----------------------------------------------
1        B              1
2        Direction Pad  1
3        A              2
4        Start          3
5        Left Pad       4
6        Right Pad      5


2 commentaires

HRM, point valide - n'avait pas pris cela en compte. J'ai pris une deuxième poignelle, je ne sais pas si je suis satisfait ou non.


Pour permettre des combinaisons de boutons complexes, ajoutez un faux bouton appelé «délai» indiquant que le lecteur doit faire une pause entre les appuie sur le bouton d'un combo. Ajouter une colonne "Time" à la table des boutons pour permettre "Un bouton doit être conservé pendant une certaine durée" Ajoutez une colonne de commande de commande à la table des boutons pour permettre la spécification des boutons de commande. Si vous devez appuyer sur les boutons en même temps, donnez-leur le même numéro de commande.



1
votes

Je vais donner à cela un tourbillon :)


xxx

0 commentaires

1
votes

Que diriez-vous:

/* PRODUCTS: Each product has one title and runs on one gamesystem */
(PK) ProductID int
ProductTitle varchar(100)
(FK) GameSystemID int

/* GAMES: Each game has one title and belongs to one product */
(PK) GameID int
GameTitle varchar(100)
(FK) ProductID int

/* GAMESYSTEMS: Each gamesystem has one name */
(PK) GameSystemID int
GameSystemName varchar(100)

/* GAMEACTIVITIES: Each game has one or more activities (flying, running, ..) */
(PK) GameActivityID int
(FK) GameID int
GameActivityDescription VARCHAR(100)

/* BUTTONS: Each gamesystem has certain buttons with names */
(PK) ButtonID int
(FK) GameSystemID int
ButtonName VARCHAR(100)

/* GAMEACTIONS: Each game activity provides certain game actions (fly left, fly right, ..) */
(PK) ActionID int
(FK) GameActivityID int
ActionDescription VARCHAR(100)

/* BUTTONCOMBINATIONS: Each game action is associated with a certain button or combination of buttons */
(FK) ActionID int
(FK) ButtonID int


0 commentaires

1
votes
Console
    int id
    string name

Controller
    int id
    string name
    int console_id fk

Button
    int id
    string name
    int controller_id fk

Game
    int id 
    string name
    int parent_id fk -- game within a game

-- context within a game (default, driving, swimming)
Context
    int id
    string name
    int game_id fk

-- applicable actions within a context of a game
Action
    int id
    string name
    id context_id int

-- a set of buttons that map to an action, whether it is one button or multiple
Combination
    int id
    int action_id fk
    int button_id fk
An example of using the above structure:Console: PS3
Game: MAG
...Current Game State:
    Context: Driving
    Allowed Actions: Directionals (forward, left etc), Brake, Smoke
    Allowed Combinations: List of each combination for each action  When a series of buttons are pressed, eg: L1 + DirectionRight, look up that combination in allowed combinations, find the relevant action, and execute that action.

0 commentaires

2
votes

Certains contrôleurs partagent des mises en page courantes mais avec des visages différents, c'est-à-dire 360 ​​et PS3 (X est un, triangle est Y, etc.). Avec des périphériques supplémentaires tels que des bâtons de combat, des bâtons de vol, des guitares, etc. Ils sont également des faces différentes de la cartographie des attentes de la console. Étant donné que les boutons sont généralement définis avant que tout contrôleur soit même moulé, vous pouvez faire la même chose.

Chaque mappage ne s'appliquera pas à chaque contrôleur, il peut donc ne pas être idéal - compte tenu des contrôleurs de console modernes, cela devrait être bien. Si vous ajoutez des contrôleurs intelligents et du clavier / souris, les choses pourraient commencer à devenir bizarre. P>

CREATE TABLE game_action_buttons (
id int unsigned not null auto_increment,
game_action_id int unsigned not null references game_actions.id,
ordinal tinyint unsigned not null,
button_map_id tinyint unsigned not null references button_maps.id,
primary key (id)
);

INSERT INTO game_action_buttons (game_action_id, ordinal, button_map_id)
VALUES
(1, 0, 8), // right trigger to shoot
(2, 0, 6), // west face button (X/square) to reload
(3, 0, 7), (3, 0, 9) // combo: both bumpers for rear view look-back while driving
// and a Street Fighter shoryuken on the d-pad to show a sequence:
(4, 1, 21), // DPAD_E: right
(4, 2, 20), // DPAD_S: down
(4, 3, 26), (4, 3, 4) // DPAD_SE + BT_S: down/right + fierce... i think.


0 commentaires

1
votes

Je ne lui donnez que une petite pensée, mais je pense que vous pouvez utiliser quelque chose comme ça (je devais être paresseux pour ajouter ER 'Fourks' mais les références de table supérieure Table (s) inférieure):

modèle de données.

  • BOUTON - est un bouton sur un contrôleur, je suppose que vous devez les identifier également avec un type afin que vous puissiez identifier des éléments tels que pressés, direction, pression, etc.
  • Consale - Magasins Wii, Xbox, ...
  • gameplay - est le niveau de votre in dans et que chaque niveau a un certain nombre de mouvements (ou d'actions si vous préférez) ces actions devraient exécuter un morceau de code à la fin pour faire quelque chose se produire dans ce jeu. niveau.
  • console-déplacement - est la combinaison des boutons pour exécuter un certain mouvement sur une console spécifique. Si vous devez appuyer sur une combinaison de boutons dans la Wii et non sur la Xbox, alors doit être possible

    éventuellement, vous pouvez lier le bouton de connexion à la console


0 commentaires

1
votes

Je vais essayer :)

1) Vous aurez besoin d'une table pour systèmes

2) Vous aurez besoin d'une table pour des packages (avec une référence nullable à un parent), une table avec des jeux et une table pour relier des jeux avec des packages. Cela garantit qu'un jeu peut faire partie de différents packages. Cela ne permet pas à différents forfaits d'avoir différentes "spécialistes" du même jeu, cependant. Mais ce n'était pas une exigence :)

3) Je ne suis pas sûr que cela soit identique à 2), sinon: une table avec une référence à un jeu, si: voir 2)

4) Vous aurez besoin d'une table pour une action ("séquence") avec une référence à un jeu de jeu, vous aurez alors besoin d'une table pour une combinaison de clé, avec une référence à la séquence. Enfin, vous aurez besoin d'une table pour une clé particulière, avec une référence à une combinaison.

Je pense que cela va couvrer cela, même si j'ai des préoccupations de SOM concernant les joysticks, la souris, etc. Vous voudrez peut-être diviser la "touche" -table en plusieurs tables pour éviter de nombreuses colonnes de cette table, mais c'est une décision que vous avez prendre en fonction de la manière dont vous envisagez d'accéder à votre base de données, etc.


0 commentaires