JeuWeb - Crée ton jeu par navigateur
De bon tutos - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : De bon tutos (/showthread.php?tid=7386)



De bon tutos - Nov@_ - 01-06-2015

Bonjour !
J'ai trouvé de très bon tuto sur YouTube qui explique et montre comment créer un jeu comme Ogame soit même pas à pas.
Les tutos ce déroulent sous plusieurs partis plus ou moins longues, les tutos devraient reprendre pendant les vacances car ces les examens pour eux.

Pour info je ne suis pas le créateur de ces tutos :

https://m.youtube.com/watch?list=PLCI-4nsV71qbJVtCONyms5OhdMPKmmv4q&v=8p4uAf2RLNo

J'espère que ça vous auras bien aidé !


RE: De bon tutos - Xenos - 01-06-2015

Salut,

Plusieurs points à redire sur ces tutos (je pensais que c'était la présentation d'une usine à ogame-likes, mais je me suis trompé); j'en fais une review pendant que je bosse.

Ces remarques sont donc des avertissements aux débutants (et non un flingage des tutos). Je structurerai une fois la review terminée.


• Ce n'est pas un cahier des charges (littéralement, "cahier décrivant ce que le jeu est chargé de faire, son rôle, sa mission, les choses ou personnes dont il a la responsabilité", cf Larousse). C'est un cahier de paramètres (listant les noms des bâtiments, des vaisseaux, etc). Le gameplay est déjà implicitement décrit ("c'est comme ogame"), alors qu'il s'agit du point le plus important d'un jeu.

• La partie 1, installation, ne marche pas chez moi

• Les mots de passe ne se stockent pas en clair, mais salés et hashés, ce qui requiert généralement une colonne dédiée, privée (le pseudo est une donnée publique). On connait donc la longueur du hash (généralement 256 bits), et donc, on peut utiliser le typage de colonne approprié, généralement BINARY(32) (car 256 bits = 32 octets)

Les mails sont des données personnelles dont le stockage/traitement devrait nécessiter une déclaration à la CNIL (mais soyons souples pour des petits jeux de 20 personnes max)

• Les logiciels et le "comment" sont mélangés au "pourquoi", mais d'expérience, le "pourquoi" est la 1ere chose demandée (ou qui doit être considérée), bien avant le "comment" (comment coder ce pourquoi)

• Je ne recommande plus PHPMyAdmin pour la création de BDD locale depuis que j'ai découvert MySQL Workbench (que j'ai trouvé, par la suite, lent et instable) et HeidiSQL que j'utilise maintenant au taff

• L'IDE NetBeans gère directement le htaccess, inutile de jongler avec Notepad/Notepad++/Windows pour le créer

• Il y a quelques imprécision ("ReWriteBase / va de pair avec RewriteEngineOn", pas vraiment, c'est seulement une ligne permettant de définir le répertoire de base des RewriteRules) et surtout de grosses erreurs (le .htaccess n'est en aucun cas "lu par le navigateur"); cela risque de péter au nez des développeurs débutants par la suite.

• Je n'aime ni le pattern MVC, ni le principe d'un "index.php qui fait toutes les redirections". Il y a souvent mieux (rediriger via le htaccess, utiliser les auto includes de PHP,...). J'aime encore moins boostrap et ses affreux noms de "classe" (qui ne sont du coup pas des classes HTML/CSS mais des raccourcis de balises style)

• J'ai toujours du mal avec ce principe d'un "langage de template HTML", puisque PHP est déjà un langage de template HTML (faut avoir la curiosité de se demander pourquoi on utiliser <?php comme délimiteurs).

• Je recommande plutôt d'utiliser au maximum les méthodes private, qui structurent le code et évitent d'avoir une mélasse de classes ingérable. Tout mettre en public se termine généralement en procédural (des fonctions) caché dans des classes

• Je me demande si le "./Controller/" . $_GET['page'] . "/Controller.php" ne serait pas injectable... (par exemple, que se passera-t-il si le caractère \0x00 est envoyé dans $_GET['page']?)

• Remarque moindre: Perso, pour la BDD, je préfère éviter de mettre le mdp dans une const, accessible de n'importe où dans le code, au profit d'un pattern comme:
Code PHP :
<?php 
class DbMySQlFactory {
private static
$host = '...';
private static
$user = '...';
private static
$pass = '...';
public function
buildMySQL() {
return new
mysqli($this->host, $this->user, $this->pass);
}
}
C'est assez pratique quand on travaille à plusieurs, et qu'on utilise des PHARs ou des sous-projets/bibliothèques (on évite de prendre le risque que le mdp filtre, même si les ReflectionClass le permettront toujours), et cela évite de polluer l'auto-complétion

Favor Composition over Inheritance. L'héritage limite énormément la combinaison des objets, alors que la composition permet de faire des classes riches à partir de code existant

• Dans une requête SQL, il est totalement inutile de spécifier les colonnes si c'est pour ne pas définir leur valeur: les colonnes Auto-Increment n'ont pas besoin d'être listées lors des insertions

-- Nope
-- INSERT INTO joueur (Id, Nom, Email) VALUES (NULL, "machin", "foo@bar.com")

-- Yes
INSERT INTO joueur (Nom, Email) VALUES ("machin", "foo@bar.com")

• Oh bord*l, prenez les tutos de professionnels, pas ceux des amateurs: les requêtes SQL sont injectables, un jeu qui suit ces tutos sera piraté en moins de 10 minutes

• Evitez les SELECT *, privilégiez une liste des colonnes à récupérer (même si c'est plus long à taper): cela allègera le travail de la BDD, les transferts entre BDD et PHP, et cela limitera les erreurs: typo dans les noms de colonnes, nouvelles colonnes ajoutées, colonnes supprimées (le code cassera au niveau du SQL plutôt que dans la logique PHP ce qui évitera des données corrompues)...

• Il faut toujours checker les données entrantes sur un site ($var = $_POST[] n'est pas bon signe, d'ailleurs NetBeans bien configuré recommandera de passer par filter_input

empty() interdira le pseudo "0"

• Ah, l'arrow anti-pattern... ^^

• Un checkPassword() est un non-sens: TOUT mot de passe, quelque soit les caractères utilisés ou sa longueur (finie) doit être autorisé. Les mots de passe trop simples devraient être seulement signalés, ou interdits.

Copier/Coller une fois ça va, copier/coller trois fois bonjour les dégâts. Eviter le copier/coller de code (ou encore pire, le code généré... J'ai jamais compris ce concept d'ailleurs)

• Les adresses mails se checkent avec FILTER_VALIDATE_EMAIL, parce que la vraie vérification de la validité d'un mail ressemble à ça... !

• Quand on utilise un $errorCounter, c'est qu'on a raté ce que sont les Exceptions Wink

• Les petits trucs comme remettre le pseudo en cas de mdp foiré à la connexion sont souvent du ressort du navigateur, et non du site: le navigateur a déjà une auto-complétion qui permet à l'utilisateur de ne pas retapper son pseudo. A l'inverse, un utilisateur peut l'avoir désactivée (PC publique par exemple), et n'appréciera pas l'auto-complétion forcée. De même pour l'option "Remember Me" qui n'a plus de raison d'être depuis plus d'une décennie.

• Si l'informaticien est bel et bien flemmard, le copier/coller ne favorise pas la flemme, bien au contraire: à chaque changement qu'on voudra faire dans le code copié/collé, il faudra le changer partout: c'est pas facile, c'est rébarbatif, et c'est peu sécurisé. L'informaticien dit "flemmard" préfèrera donc créer une fonction (ou autre unité de code centralisée), qu'il réutilisera partout où il y en a besoin.

• Dans les requêtes SQL, inutile de faire des SELECT DISTINCT lorsque les champs sont uniques (chaque planète a son propre id, unique car étant une PRIMARY KEY, donc inutile de mettre un DISTINCT dans SELECT id FROM planetes)

Stop aux requêtes imbriquées: utilisez les Jointures (en plus, c'est un tuto en français!)... D'ailleurs, c'est fait plus loin (les 1ers tutos ne sont pas mis à jour quand les suivants sont faits, c'est un des problèmes de l'approche "mélanger comment et pourquoi")

• L'OO est assez mal utilisée ici, il s'agit clairement d'une approche procédurale, cachée en OO (comme dit plus haut). Lorsque le projet va grandir, la maintenance va vite s'effondrer.

L'opérateur mathématique 'chapeau' existe: il ne sert pas à élever x à la puissance n, mais à inverser une valeur bit à bit


RE: De bon tutos - Nov@_ - 02-06-2015

Ce n'est pas moi qui a fait les tutos ^^
Ce n'est peut être pas ULTRA parfait à tes yeux mais ça aide.
Franchement je préfère suivre ces tutos, que de prendre un cms déjà fait et buguer dont on ne sais même pas de quoi il est composé.
C'est sympa d'avoir fait ses remarques aussi, je pourrais les livrer au créateur des tutos.


RE: De bon tutos - Xenos - 02-06-2015

Merci Smile

Depuis que Google a racheté Youtube, je ne peux plus piffer leur système gazeux de commentaires, du coup, j'ai remonté tout cela ici; cela servira Smile

Et c'est vrai qu'initialement, j'ai cru que c'était un CMS-tout-fait-parce-que-les-usines-à-ogames-c'est-trop-cool, mais non, c'est bien un vrai tuto de création (qui passe à coté de beaucoup, mais c'est déjà un début).


RE: De bon tutos - Nov@_ - 02-06-2015

Pour information de nouveaux tutoriels sortiront dans les "grandes vacances" car je lui ai demandé sur Facebook, ce seras plus vers les transportations, attaque et colonisation après il a dit qui sortirait 1 tutoriel sur la création d'un jeu par navigateur toutes les semaines !