JeuWeb - Crée ton jeu par navigateur
Aide sur batiments - 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 : Aide sur batiments (/showthread.php?tid=3876)

Pages : 1 2


RE: Aide sur batiments - Zamentur - 10-04-2009

Bon alors comme le disais rorchar il faut faire une fonction (ou une méthode si tu le fait en POO) pour chaque action.

Et comme dit précédemment ce qui se passe à l'intérieur ne doit pas être important à l'extérieur, tout ce qui compte c'est que depuis l'extérieur on sache l'action qui a été faite:
- construire_batiment()
si tu utilises çà, tu sais que ton bâtiment est construit sans forcément savoir comment!

Maintenant c'est bien beau mais effectivement il faut encore coder l'intérieur des fonctions. C'est à l'intérieur que çà va accéder à ce qui va retenir les données, et là tu as le choix:
- passer par une table de bdd
- passer par des fichiers (comme tes array actuellement mais pour modifier/créer de nouveau type de bâtiment il faudrait alors éditer ces array en gros générer un fichier php...)

Bon je te conseille la bdd c'est ce qui est le plus simple

Et donc là comme dis précédemment, l'erreur serait de faire une table par bâtiment.

En gros moi je verrais bien pour ce que tu décris ces 3 tables:
Batiment_type(#id=>Int, nom=>String)
Batiment_evolution(#id_type=>Batiment_type, #niveau=>Int, cout_bois=>Int, cout_pierre=>Int, cout_fer=>Int, cout_population=>Int, point=>int)
Batiment(#id_joueur=>Joueur, #id_type=>Batiment_type, niveau=>Int)

Ainsi si tu veux ajouter un bâtiment au bâtiment possible (action admin), il faut:
Insérer(INSERT) un enregistrement avec le nom dans Batiment_type
Insérer les enregistrement concernant l'évolution des batiments dans Batiment_evolution, un enregistrement par niveau.

Pour construire un batiment (action joueur):
Insert d'un enregistrement dans Batiment avec l'id du joueur et le type de batiment ainsi que le niveau 1

Faire évoluer un batiment (action joueur):
UPDATE mettant le niveau=niveau+1 dans l'enregistrement concerné de Batiment

Détruire un batiment (action joueur):
DELETE supprimant l'enregistrement représentant ce batiment dans la table Batiment

Par contre c'est plus dur de supprimer complètement un bâtiment des bâtiment possible car çà peut sous entendre de supprimer les bâtiment de ce type des joueur...

Voilà selon moi à quoi devrait ressembler tes tables

NB: concernant la table Batiment_evolution, une autre méthode pourrait être de trouver une formule mathématique qui calcul le cout en fonction du niveau. Ce serait moins couteux en place et en ressource et çà supprime cette table
par exemple le cout en bois pourrait etre
cout bois = niveau*facteur_bois_du_batiment+cout_plancher
facteur_bois_du_batiment et cout_plancher serait alors des colonne de la table Batiment_type

Je peux etre plus précis, si besoin, faut demander


RE: Aide sur batiments - keke - 10-04-2009

Le débat POO fait partie de l'Arlésienne (ancien nom de ce qu'on appelle maintenant ... "un Troll"=)

Un peu comme slip ou caleçon ... chacune des parties a ses arguments et contre-arguments. Le principal étant de se plaire dedans ... (moi c'est slip.)
La Poo a beaucoup d'avantages indéniables : mais ces avantages sont plus ou moins intéressants selon ton projet.

TGHPow si tu souhaites faire un projet propre qui durera 10 années après ta mort, lance toi dans la POO et écoute bien les conseils de ton ami : surtout si c'est lui qui code. La POO est l'avenir du procédurale.

Perso, j'ai quelques regrets de ne pas avoir commencé Magdales en POO. D'un autre côté, le procédurale me permet quelques facilités de code car, ayant bien intégré les principes de POO (j'ai bossé dedans pendant 5ans) et ayant fait un correct usage des fonctions regroupées en fichier en cohérence avec mes tables, mon code ressemble de loin à de la POO (toutes les fonctions propres à un objet est regroupé dans un fichier, j'ai un équivalent de constructeur/destructeur, etc...)

kéké


RE: Aide sur batiments - lemouix - 10-04-2009

Alors, pour ce qui est de ta base de données Smile je te conseil de tout mettre à plat dans un fichier texte du genre:
Un batiment dépend d'un ou plusieurs batiments
Une unité dépend d'un ou plusieurs batiments
Chaque technologie dépend d'un batiment
(...)

Avec ces deux points

Tu auras une relation:
[BATIMENT] (1,n) ------ DEPENDRE_1 ------ (1,n) [BATIMENT]
on lit: un ou plusieurs batiments (1,n) peuvent dépendre d'un ou plusieurs batiments (1,n).
Tu auras une table DEPENDRE_1 qui contiendra: IdBatiment, IdBatiment_2
et
[UNITE] (1,n) ------ DEPENDRE_2 ------ (1,n) [BATIMENT]
On lit: une ou plusieurs unité peuvent dépendre d'un ou plusieur batiments.
Tu auras une table DEPENDRE_2 qui contiendra: idUnite, IdBatiment

[TECHNOLOGIE] (1,1) ------ DEPENDRE_3 ------ (1,n) [BATIMENT]
Tu auras une table Technologie qui contiendra: IdTechno, Nom, Description, IdBatiment

Grâce à toutes ces phrases, tu pourras construire ton schéma de ta base de données (voir Modèle Entité Association) et éviter toutes les redondances.

!! DEPENDRE EST UNE RELATION DIFFERRENTE A CHAQUE FOIS (D'OU LE _X)

En espérant avoir été clair. A bientôt.


RE: Aide sur batiments - tghpow - 15-04-2009

Bonjour, et désolé du retard^^ J'était partit 5 jours a la campagne et je n'ai pas trouver un seul moment pour reflechir a tout ca.

Toute fois, grace a vous j'ai les idées plus claires, maintenant faut attendre que je trouve ma solution^^

Petite precision, si j'ai bien compris, si je doit utiliser la BDD je doit faire une "place" (je sais pas comment dire) pour chaque joueur? C'est a dire que chaque joueur aura un place dans la BDD avec ses batiments, leurs niveaux...etc?


RE: Aide sur batiments - lemouix - 17-04-2009

1. Identifies tes "Entités":
Exemple:
Batiment
Joueur

2. Identifie les associations entre tes entités:
Un joueur possède des batiments
Un batiment n'appartient qu'a un seul joueur

3. Tu as tout ce qu'il te faut Smile
Exemple:
Table1: JOUEUR
idJoueur
Nom

Table2: BATIMENT
idBatiment
Nom
idJoueur (FOREIGN KEY, REFERENCE JOUEUR)

En espérant avoir été clair, a bientôt !


RE: Aide sur batiments - kurstley - 17-04-2009

C'est vrai que c'est pas évident cette notion de "POO", j'essaye de comprendre un peu le mécanisme et l'utilité, j'ai lu quelques tutoriels, en gros si je résume comme son nom l'indique, cette forme de programmation est basé sur des "objets", elle permet de gérer et surtout de facilité l'ajout "d'objets", comme l'exemple de la pizzeria que tout le monde à du voir ^^

Mais il y a quelque chose que je comprend pas dans l'exemple de cette pizzeria, apparemment la POO sert a faciliter l'ajout des commandes des clients, en fait dans tous les exemples que j'ai vu ca facilite l'ajout, mais quand on fait un jeu en php, on ajoute que très rarement dans la BDD (à part les membres, bon après ceci dit tout dépend du projet), mais en général on fait plutôt des requêtes sur des enregistrements qui sont déjà dans la base, donc 9 fois sur 10 on fait des SELECT ou UPDATE... plutôt que des INSERT


RE: Aide sur batiments - keke - 17-04-2009

Kurstley > La POO permet de définir de manière (plus ou moins) rigoureuse ta manière de requêter. Tout ce qui se rapporte à un objet devrait se trouver dans une classe objet. De cette manière, il ne t'es pas possible de réinventer la roue et l'eau tiède, si tu l'as déjà définie.
Dans du procédurale, même en faisant attention à tes fonctions, il se peut que tu développes 2 fois la même chose

Tes objets en POO vont chercher des données en base, si besoin grâce à des constructeurs. Tu fais toutes les manipulations de donnée sur ton objets, puis, quand tu as finis, tu peux lui faire faire un UPDATE afin que ton objet modifie ta base de donnée.

Y'a pas plus d'INSERT en POO qu'en procédurale.

Kéké


RE: Aide sur batiments - kurstley - 17-04-2009

Oui je vois ce que tu veux dire, donc quelqu'un qui est capable de coder en procédurale sans jamais coder 2 fois la même chose, le code peut être aussi clair je pense si c'est bien organisé ...

Enfin oui je commence à comprendre l'utilité de la POO, ça rend un code plus lisible, accessible et plus compréhensible par n'importe qui, faudrait que je fasse quelques test ^^


RE: Aide sur batiments - Ter Rowan - 17-04-2009

mouarf je ne trouve pas très pertinent ton argument
Citation :Dans du procédurale, même en faisant attention à tes fonctions, il se peut que tu développes 2 fois la même chose
Smile

on peut très bien coder deux classes qui font la même chose (roue et roue1) y a rien qui l'empêche

autant je trouve que se lancer dans la poo c'est se forcer à réfléchir peut être plus au début, à mieux planifier, mieux percevoir ce qui va être développer, autant on peut avoir la même démarche en procédural si on en a la volonté

la différence fondamentale d'après moi est plutôt que l'on peut se lancer dans le procédural sans être obligé de modéliser un minimum (et donc au final faire un code tout pourri)

la poo impose un minimum de rigueur (mais vraiment un minimum, on peut très bien avoir un code objet tout pourri aussi), le mot clef est "impose", pas autre chose

je ferais l'analogie poo/procédural avec langages "nobles"/php :

le java est considéré plus dur que le php par le tout venant car il impose plus de chose pour arriver à un résultat ultra simple.
certains ayatola des développements considèrent de même que le php est un langage foireux car il est utilisé par le tout venant
Pourtant on peut faire de la très belle programmation en php sur des sujets très complexes

la poo est considérée plus dure que le procédural car elle impose plus de chose.
certains ayatola des développements considèrent de même que le procédural est une méthode foireuse car il est utilisé par le tout venant
Pourtant on peut faire de la très belle programmation en procédural

maintenant c'est vrai que l'objet va loin dans la structuration même des modes de fonctionnement des équipes de développement (séparation des tâches, couches, etc..) , que le fait de cadrer permet de mieux se comprendre (plusieurs personnes orientées objets ont déjà une longueur d'avance lors d'une rencontre, ils ont déjà des réflexes communs), qu'il est assez facile d'atteindre un point à développer/corriger/améliorer car le programme est déjà structuré, et autre

la poo est une référence et c'est très bien, mais en aucun cas elle empêche de faire n'importe quoi, elle réduit juste le risque.

Ter Rowan, qui développe en "mauvaise poo" et est très content des avantages que cela lui apporte mais qui voit au quotodien des développements poo tout aussi pourri qu'en procédural


RE: Aide sur batiments - lemouix - 20-04-2009

Euh pour petite infos:

Attention, pour la conception d'un jeux, on parle bien de deux choses différentes !
1. La modélisation de ta base de données (tables, relations, ...) en évitant au maximum la redondance d'informations.
2. La modésliation de ton schéma UML qui te permettra de définir la structure et la façon dont vont interragir tes objets entre eux et de quelles fonctions tu auras besoin.

Une base de données doit être bien construite avant de démarrer un jeux, sinon, ça peut vite devenir le bazard lorsque le volume de données augmente ou lorsqu'on veut modifier des informations !

A vot'ServiZ