JeuWeb - Crée ton jeu par navigateur
POO, gestion et utilisation - 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 : POO, gestion et utilisation (/showthread.php?tid=2859)

Pages : 1 2 3 4 5 6 7 8 9 10 11


POO, gestion et utilisation - Dexyne - 26-11-2010

Bon bah voilà,

J'utilise pas vraiment la POO mais je m'y intéresse.
Je look un peu ce que je peux trouver sur le net sur le sujet même si c'est pas toujours très claire pour l'utiliser.
Je tiens à préciser que je ne fais pour le moment pas un jeu entier mais plus une base d'un jeu (ou un test servent de base pour la suite).

Alors j'aimerais (même si je suis dans l'apprentissage de la POO) savoir comment je peux gérer ma classe et je compte sur vous pour m'éclairez Tongue.
Alors pour commencer je voudrais gérer mes unités via les classes. J'ai commencé une classe pour gérer les stats des unités.

(niveau BDD j'utilise une table qui contient les unités avec leur id, leur nom et une description d'elle et je comptais ensuite lié celle-ci avec celle des stats des unités du joueur [voir la suite])

Dans ma fonction __construct j'ai initialisé les valeurs par défaut des stats. Le joueur a la possibilité de les modifier via les technologies, l'équipement ou ce genre de choses qui ensuite serait enregistrer en BDD -> table contenant les stats des unités du joueur.

Citation :Comment puis-je récupérer les données de la BDD pour les utiliser dans les fonctions ?
Je place mes requêtes dans la fonction directement ou est-ce mieux de la faire ailleurs ?

J'ai créer une fonction pour le déplacement, et je dois récupérer la vitesse (vitesse de déplacement) et je l'ai mis tel que


public function deplacement($vitesse)
{

}

Citation :Est-ce que je devrais revoir la chose ?

J'aimerais aussi savoir quand il ne faut pas mettre protected pour les variables que l'on défini, car entre public et protected je ne sais que trop choisir :o.
Il me semble (si mes souvenirs sont bons) que protected est un peu moins permissif que public mais qu'il est utile pour l'héritage, non ?

J'y avais pas trop réfléchi mais comment peut-on définir une notion de distance si l'on n'utilise pas de carte ? Mettre 1km = 5min et qui dépend ensuite de la vitesse (dans mon cas) ?

Une dernière chose j'aimerais un peu d'explication sur la fonction autoload, j'ai compris qu'elle servait à charger ou importer un fichier demander mais je n'ai pas tout saisi sur son utilisation :o.

Voilà c'est un peu près tout pour le moment ^^.

Cordialement et en vous remerciant par avance,

Dex'


RE: POO, gestion et utilisation - Globe - 26-11-2010

Pour la POO je ne peux pas te répondre je rentre tout juste dedans mais avec l'AS. Par contre pour la notion de distance eh bien comme tu dis tu peux utiliser une distance mais utilises les km et les km/heure à ce moment là c'est plus logique de déterminer le temps en fonction de la vitesse plutôt que le contraire =D Sinon je te conseillerais fortement au niveau pratique de tout de même utiliser un système de "carte" dans ta BDD, si tous tes lieux se situent sur une ligne (ou si chacun de tes lieux n'est relié qu'a deux autres lieux) ça va d'utiliser simplement une distance en km mais pour faire la corrélation entre les lieux, des valeurs d'abscisses et d'ordonnées sont nécessaires.


RE: POO, gestion et utilisation - Dexyne - 26-11-2010

Merci de la rep, et pour la formule j'ai mis ça sur le coup mais c'est vrai que pas trop logique xD
Je vois pas trop comment intégrer la vitesse au km/h, comment je peux la faire modifier ça ? (je modifie l'heure parcouru/km ? bof j'y réfléchirais un peu plus tard c'est pas urgent xP).

Sinon je préfère pas utiliser de carte car je pense trop complexe pour le début. je pref' faire un peu comme Ogame (bon ils ont une sorte de carte pour les galaxies avec les coordonnées) mais pour le moment je comptais juste permettre l'envoi des unités aux coordonnées données.
Ce que j'aimerais déjà mettre en place c'est création des unités (pas trop dur ça une fois que la POO sera un peu mieux digéré :lolSmile et faire les combats (ou envoi des unités, puis si combat il y a alors ça se bastonne !)


RE: POO, gestion et utilisation - NicoMSEvent - 26-11-2010

Quelques conseil pour la POO (peu importe le langage)

Analyse bien ton modèle de donnée, et découpe bien. Pour a peu près n'importe jeu tu devrais avoir les classes suivantes:

-Base de donnée (c'est un objet comme un autre, même si ce n'est pas visible directement dans ton jeu)
-Joueur

Après, c'est en fonction de ton jeu
-Carte du monde
-type de tuile
-unités

Avec ces quelques classes, tu va pouvoir faire ce genre de chose:


Joueur->Connection
tank1=nouvelle Unité(coordonnée dur la Carte du monde, appartient à Joueur)
si tank1->type de terrain(nord)!= eau alors tank1->bouge vers(nord)
emplacement=tank1->Position
si tank_ennemi=emplacement->unité ennemie() alors tank1->attaque(tank_ennemi)

Voila quelques opération faisables avec la POO. Remarque, on peut passer en paramètre des objets, donc, on voit immédiatement les interaction entre les différents "acteurs" d'un scénario


RE: POO, gestion et utilisation - Dexyne - 26-11-2010

Ok merci de ta réponse Nico et de tes présicions,

Est-il nécessaire ou préférable de créer une classe de connexion à la BDD ?
Où dois-je effectuer la connexion ? dans le script php ou dans ma classe ?

Sinon j'utilise pas de carte, pour le moment je mettrais juste un temps selon l'endroit et l'unité ou les unités iront la bas plus ou moins vite.
mais c'est vrai que sans coordonnée la notion de distance n'est pas présente x) Je voudrais pas un truc trop complexe pour le départ, et le problème c'est que si je met des coordonnées ce sera peut-être plus les mêmes si j'intègre une carte.
Je pense donc mettre des zones et selon les zones ça sera plus ou moins long pour y accéder. et la carte sera juste dessiner pour situer les zones (même si elle sera surement remplacer par la suite).

Est-il préférable d'utiliser du protected ? Si je désire l'utiliser dans tout le script ce sera possible ? (en ayant appeler la classe auparavant) ou ce sera accessible seulement à la classe mère et aux classes filles ? Ou n'importe quelle classe sinon ?

Merci de vos réponses sinon Smile.


RE: POO, gestion et utilisation - NicoMSEvent - 26-11-2010

rien n'est obligé, il y a toujours moyen de contourner (lors de ma premiere tentative pour faire passer mon site de procédural vers de la POO, j'avais gardé mes accès DB du procédural, ça marchait plutot bien).

Tant qu'a faire de la POO, autant la faire jusqu'au bout! Smile

Si tu veux faire ça de manière propre et en apprendre plus (pour les connexion DB), renseigne toi sur le "singleton" (google est ton ami!)

a mon avis, tu te cassera moins la tête avec une petite carte (4 cases x4 cases), qu'en essayant de contourner ton problème de carte Wink


RE: POO, gestion et utilisation - SorenS - 26-11-2010

Je suis aussi en train de voir les meilleures solutions pour l'accès bdd. Je plussoie NicoMSEvent, renseigne vers les singletons (http://www.apprendre-php.com/tutoriels/tutoriel-45-singleton-instance-unique-d-une-classe.html)

Classe unique, accessible partout via sa getInstance qui est en static.


RE: POO, gestion et utilisation - Dexyne - 26-11-2010

Ouais je vois ce mot là de temps en temps je me demandais ce que c'était !
Je vais donc voir ça.

Sinon niveau carte je ferais une gestion par région (4-5 régions) avec une distance prédéfini entre elles. Ça fera un p'tit début puis par la suite je verrais entre une carte monde, une carte avec tuiles, tuiles hexagonale, etc. ce qui irait et conviendrait au mieux (autant à moi qu'à la communauté :p)


RE: POO, gestion et utilisation - niahoo - 26-11-2010

le singleton c'est un principe très sympa, la fonction getInstance contient un évaluation de condition (if quoi) dont on sait pertinement qu'elle donnera toujours le même résultat sauf une seule fois, la première.

comme grosse failure y a pas mieux je trouve !


Sinon un conseil pour faire tes classes, commence par du code simpliste, bourrin, pas optimisé, recopié plusieurs fois à l'intérieux de tes classes.
soigne l'extérieur des classes, leur interface, comment on va faire appel à leurs méthodes (donc notament tout ce qui sera public) (range les protected du côté des privées).
Et quand ça marche, là tu peux revenir à l'intérieur de de ta classe pour la nettoyer, l'optimiser.

Sinon pour ta classe de stat,

tu fais quoi, une classe fiche_statistique qui va contenir les stats de 1 joueur ?
dans ce cas, pas besoin dans le constructeur de mettre les valeurs des stats par défaut puisque tu vas aller les charger en base

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

Nico, pourquoi le type de terrain dépendrait de l'utilisateur ?

si tank1->type de terrain(nord)!= eau alors tank1->bouge vers(nord)

Moi je dirais plutot

si carte.type_of_cell(tank1.posx, tank.posy) != eau alors etc...

:p


RE: POO, gestion et utilisation - christouphe - 26-11-2010

Comme Nico le dit, pense à découper ta pensée, n'hésite pas à revenir sur un découpage que tu as déjà fait. On ne sait jamais. Pour exemple, j'étais parti avec un objet "héros" qui a son utilité dans le jeu puis en revenant sur mon brouillon en fait un héros EST UNE unité spécialisée...Enfin tu vois le genre d'erreur que tu peux commettre car tu as "le nez dans le papier".

Concernant l'accès aux bases, j'ai créé une classe spécialisée qui sur-couche PDO et des classes "fabriques" dédiées à chaque type d'objet. Bon là je vais un peu loin je sais, mais tu vas voir que tu y viendra aussi assez vite, car la question que je me posais, c'était "Comment éviter de passer systématiquement par mon manager d'objet (unite, membre...) qui me verrouille le code. Mais j'ai pensé à mettre des verrou aussi dans la création des data "sensibles", ahhh instanceof :p .

'Fin voilà, je dis pas que ce que j'ai monté est le must, mais ça fonctionne bien et l'enchainement "a l'air" correct.