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. P>
Comment approcheriez-vous ce problème? Honnêtement, je ne sais pas où commencer! P>
Mise à jour: strong> 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. P>
7 Réponses :
Vous pouvez essayer ceci pour commencer à commencer (éditer: deuxième essai) strong>: 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
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.
Je vais donner à cela un tourbillon :)
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
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.
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.
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): P>
. p>
éventuellement, vous pouvez lier le bouton de connexion à la console p>
Je vais essayer :) p>
1) Vous aurez besoin d'une table pour systèmes p>
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 :) p>
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) p>
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. P>
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. P>
C'est tout autour d'un problème de conception assez cool. :) Toile élégamment, de toute façon!