JeuWeb - Crée ton jeu par navigateur

Version complète : [Test] Calculer les bonus d'un équipement
Vous consultez actuellement la version basse qualité d'un document. Voir la version complète avec le bon formatage.
Pages : 1 2
Salut à tous,

Après avoir proposé à quelqu'un un test pour voir sa manière de traiter le problème, j'ai pensé qu'il pouvait être sympa de le proposer ici.

Le but est de calculer de manière détailler une fiche de personnage à partir des caractéristique d'un personnage et du matériel qu'il porte.

Le tout avec cette base de données :
Code :
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Base de données: `test_seelies`
--

-- --------------------------------------------------------

--
-- Structure de la table `equipements`
--

CREATE TABLE `equipements` (
  `equ_id` smallint(5) unsigned NOT NULL auto_increment,
  `equ_force` tinyint(4) NOT NULL,
  `equ_endurance` tinyint(4) NOT NULL,
  `equ_place` enum('Tête','Torse','Mains') NOT NULL,
  PRIMARY KEY  (`equ_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

--
-- Contenu de la table `equipements`
--

INSERT INTO `equipements` VALUES (1, -3, 4, 'Tête');
INSERT INTO `equipements` VALUES (2, 6, 2, 'Torse');
INSERT INTO `equipements` VALUES (3, 2, 1, 'Mains');

-- --------------------------------------------------------

--
-- Structure de la table `seelies`
--

CREATE TABLE `seelies` (
  `see_id` smallint(5) unsigned NOT NULL auto_increment,
  `see_force` tinyint(4) NOT NULL,
  `see_endurance` tinyint(4) NOT NULL,
  PRIMARY KEY  (`see_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

--
-- Contenu de la table `seelies`
--

INSERT INTO `seelies` VALUES (1, 34, 32);

-- --------------------------------------------------------

--
-- Structure de la table `Seelie_has_equipement`
--

CREATE TABLE `Seelie_has_equipement` (
  `see_id` smallint(5) unsigned NOT NULL,
  `equ_id` smallint(5) unsigned NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Contenu de la table `Seelie_has_equipement`
--

INSERT INTO `Seelie_has_equipement` VALUES (1, 1);
INSERT INTO `Seelie_has_equipement` VALUES (1, 2);
INSERT INTO `Seelie_has_equipement` VALUES (1, 3);

Je donne ici les statistiques force et endurance, mais il faut que ça marche aussi bien avec 100 caractéristiques sans allonger le code source.

Si possible en n'utilisant qu'une seule requête SQL dans le script de calcul.

Voilà. À vos claviers, pour le codage ou les questions. 2


Sephi-Chan
Précisons tout de même que nous n'avons pas besoin que vous réalisiez de scripts pour nous 2
Déjà, les tables ne correspondent pas. Ensuite, nous avons déjà notre idée sur la question.

Lex.
Code :
SELECT seelies.see_id,
    (SUM(equ_force) + see_force) AS see_force, (SUM(equ_endurance) + see_endurance) AS see_endurance
    FROM seelies
    LEFT JOIN Seelie_has_equipement ON seelies.see_id = Seelie_has_equipement.see_id
    LEFT JOIN equipements ON Seelie_has_equipement.equ_id = equipements.equ_id
    WHERE seelies.see_id = 1
    GROUP BY seelies.see_id

Et voila le travail... 39/39
(Pas de script en fait...)
Bon tu dois modifier la requete a chaque fois que tu veux rajouter une caractéristique mais il n'y a pas de miracle non plus... Là ca peut se travailler programmatiquement.
Yes ! La même ID que moi 10

T'es un bon 1

Lex.
C'est assez intéressant.
Le problème de cette méthode, c'est qu'elle ne permet pas de détailler.

On ne peut pas avoir un Force 39, avec le détail (34 + 6 - 3 + 2) en rollover par exemple.
Ceci est à mon sens très important d'un point de vue présentation : imaginons un cas où l'interface doit permettre d'afficher les caractéristiques sur lesquels on perd en rouge et sur lesquels on gagne en vert quand on survole une pièce d'équipement. Ce système (très utile) permettrait de comparer d'un coup d'oeil deux pièces d'équipement.

J'ai effacé les sources du script que j'avais fais pour Exotech... Je l'aurais volontiers présenté pour montrer ma propre manière de faire. Je ne prétends pas qu'elle était bonne, mais elle permettait cela. 3


Sephi-Chan
Dans le SELECT, on peut ajouter les caracs, non ? Pour avoir le détail.
On ne peut pas faire ce que j'expliquais plus haut avec cette technique.
Je pense que la solution full SQL n'est pas adaptée à ce genre de problème.

Je suis quand même content de voir ce que vous proposez. 2


Sephi-Chan
Oui j'ai testé te requête.

Et toi, tu as regardé ce que je demandais ?
Tu sais, les comparaisons avec les couleurs.


Sephi-Chan
Mets-y du tiens un peu pour comprendre l'ennoncé. 3
Le but est de faire quelque chose de flexible. Faire du tout en une requête ne permet pas ce que j'énonce. Ou pas clairement du tout. De plus, l'idée était de permettre de ne pas allonger le code (ou très peu) malgré l'ajout de nombreuses caractéristiques. Un peu de défi que diable. 2


Sephi-Chan
Donc elle ne répond finalement qu'au comptage. Mais à quoi servait la variable que tu as déclaré en début de requête ?


Sephi-Chan
Pages : 1 2
URLs de référence