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


Aide sur batiments - tghpow - 09-04-2009

Bonjour a tous.

J'ai comme rorchar quelques problemes avec les batiments..

Voilà, j'ai fini de donner les valeurs au differents batiments , je m'occupe maintenant du centre de commandement qui via ce dernier on peut créer les autres batiments.

Mais comment faire dîtes moi? J'ai vu dans le sujet de rorchar qu'on pourrait créer des tables, j'ai pas tout compris et je compte m'y penché dessus dans quelques instant.

Mais tout de même, je voudrai savoir , la facon dont j'ai donner les valeurs est elle depourvu d'utilité? Et oui, j'ai donner de simple valeurs moi, sans passer pas la BDD.

Voici le script en question:
Code PHP :
<?php
class BatimentCentreDeCommandement
{
// Propriétés
public $coutPopulation;
public
$coutBois;
public
$coutPierre;
public
$coutFer;
public
$pointsObtenus;


// Constructeur de l'objet
public function __construct($couts=array(), $points=array())
{
$this->coutPopulation = $couts['population'];
$this->coutBois = $couts['bois'];
$this->coutPierre = $couts['pierre'];
$this->coutFer = $couts['fer'];
$this->pointsObtenus = $points;


}

// Méthodes setter pour écrire dans les propriétés
public function setCoutPopulation($niveau, $valeur){
$this->coutPopulation[$niveau] = $valeur;
}
public function
setCoutBois($niveau, $valeur){
$this->coutBois[$niveau] = $valeur;
}
public function
setCoutPierre($niveau, $valeur){
$this->coutPierre[$niveau] = $valeur;
}
public function
setCoutFer($niveau, $valeur){
$this->coutFer[$niveau] = $valeur;
}
public function
setPointsObtenus($niveau, $valeur){
$this->pointsObtenus[$niveau] = $valeur;
}


// Méthodes init pour remettre à zéro des valeurs
public function initCoutPopulation(){
foreach (
$this->coutPopulation as $niveau=>$valeur) $this->setCoutPopulation($niveau, 0);
}
public function
initCoutBois(){
foreach (
$this->coutBois as $niveau=>$valeur) $this->setCoutBois($niveau, 0);
}
public function
initCoutPierre(){
foreach (
$this->coutPierre as $niveau=>$valeur) $this->setCoutPierre($niveau, 0);
}
public function
initCoutFer(){
foreach (
$this->coutFer as $niveau=>$valeur) $this->setCoutFer($niveau, 0);
}
public function
initPointsObtenus(){
foreach (
$this->pointsObtenus as $niveau=>$valeur) $this->setPointsObtenus($niveau, 0);
}

// Méthodes getter pour lire le contenu des propriétés
public function getCoutPopulation($niveau=null){ // null pour retourner tous les niveaux
return $niveau==null ? $this->coutPopulation : (isset($this->coutPopulation[$niveau]) ? $this->coutPopulation[$niveau] : null);
}
public function
getCoutBois($niveau=null){
return
$niveau==null ? $this->coutBois : (isset($this->coutBois[$niveau]) ? $this->coutBois[$niveau] : null);
}
public function
getCoutPierre($niveau=null){
return
$niveau==null ? $this->coutPierre : (isset($this->coutPierre[$niveau]) ? $this->coutPierre[$niveau] : null);
}
public function
getCoutFer($niveau=null){
return
$niveau==null ? $this->coutFer : (isset($this->coutFer[$niveau]) ? $this->coutFer[$niveau] : null);
}
public function
getPointsObtenus($niveau=null){
return
$niveau==null ? $this->pointsObtenus : (isset($this->pointsObtenus[$niveau]) ? $this->pointsObtenus[$niveau] : null);
}
}












?>


Code PHP :
<?php 
//Valeur du batiment
$couts['population'] = array(1=>10, 2=>12, 3=>14, 4=>16, 5=>18, 5=>22, 6=>26, 7=>30, 8=>36, 9=>42, 10=>48, 11=>56, 12=>66, 13=>76, 14=>90, 15=>106, 16=>124, 17=>144, 18=>168, 19=>198, 20=>232, 21=>270, 22=>316, 23=>370, 24=>432, 25=>506, 26=>592, 27=>694, 28=>812, 29=>950, 30=>1100);
$couts['bois'] = array(1=>180, 2=>226, 3=>286, 4=>360, 5=>454, 6=>572, 7=>720, 8=>908, 9=>1144, 10=>1440, 11=>1816, 12=>2288, 13=>2882, 14=>3632, 15=>4576, 16=>5766, 17=>7264, 18=>9154, 19=>11534, 20=>14532, 21=>18310, 22=>23070, 23=>29068, 24=>36626, 25=>46150, 26=>58148, 27=>73266, 28=>92316, 29=>116318, 30=>146560);
$couts['pierre'] = array(1=>190, 2=>204, 3=>260, 4=>332, 5=>422, 6=>540, 7=>688, 8=>876, 9=>1118, 10=>1424, 11=>1816, 12=>2316, 13=>3764, 14=>4800, 15=>6120, 16=>7804, 17=>9950, 18=>12686, 19=>16174, 20=>20622, 21=>26292, 22=>33524, 23=>42742, 24=>54496, 25=>69482, 26=>88590, 27=>112952, 28=>144014, 29=>183618, 30=>20000);
$couts['fer'] = array(1=>140, 2=>176, 3=>222, 4=>280, 5=>352, 6=> 444, 7=>560, 8=> 706, 9=>890, 10=>1120, 11=>1412, 12=>1780, 13=>2242, 14=>2824, 15=>3558, 16=>4484, 17=>5650, 18=>7120, 19=>8970, 20=>11302, 21=>14240, 22=>17944, 23=>22608, 24=>28488, 25=>35974, 26=>45226, 27=>56986, 28=>71802, 29=>90470, 30=>113992);
$points = array(1=>20, 2=>24, 3=>28, 4=>34, 5=>42, 6=>50, 7=>60, 8=>72, 9=>86, 10=>104, 11=>124, 12=>148, 13=>178, 14=>214, 15=>256, 16=>308, 17=>370, 18=>444, 19=>532, 20=>638, 21=>766, 22=>920, 23=>1104, 24=>1324, 25=>1590, 26=>1908, 27=>2290, 28=>2748, 29=>3296, 30=>3956);


// Création du batiment:
$Centre_de_commandement= new BatimentCentreDeCommandement($couts, $points);


Comprenez vous ma question? (j'avoue ne pas avoir été trés clair, désolé^^).

Amicalement


RE: Aide sur batiments - rorchar - 09-04-2009

Salut a toi si je comprend ce que tu demande:
Tu voudrais savoir comment s'y prendre pour lorsque que tu est dans ton quartier générale si tu clique sur par exemple:"construire bâtiment niveau 1" le bâtiment soit construit c'est ça??(h)

Alors en fait c'est ce qui est expliquer dans mon post:

Cela se passe en 2 parties:

1) L'affichage ou la page XHTML!

2) Les fonctions en php qui seront relier à l'affichage dans un second temps!

I)Pour ce qui est de l'affichage

C'est simple c'est un page XHTML, ou tu écris genre Bienvenue puis ton menu,tes ressources ect... et tu arrange tout ça avec du CSS. Moi c'est comme sa que j'ai fait après à toi de voir mais c'est vrai que c'est bien d'avoir une idée de comment ce seras.

II)Maintenant la partie fonction.
En fait il va falloir que tu créer plusieurs fonctions du genre:
-Créer bâtiment
-détruire bâtiment
-Augmenter bâtiment
Enfin bref autant de possibilité que tu compte offrir à tes futures joueurs
Par exemple pour la fonction "créer bâtiment" il va falloir que tu enregistre dans une table toutes les informations concernant un joueur et qu'en fonction de tel ou tel autre paramètre tu modifie ces informations dans la table.

C'est comme ça que j'ai fait comme on me l'avait proposer mais tu vas rapidement te heurter à un autre problème: celui des ressources car moi j'ai réussi à faire ma page bâtiment et à relier le problème c'est que pour tester il me faut des ressources du coup je suis en train de faire de la même manière que l'on m'a indiqué comment faire les fonctions du genre "créer bâtiment"

Enfin il te suffiras de relier toutes tes fonctions à ton affichage proprement dit.

Voilà j'espère que cela va t'aider. Cordialement Rorchar


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

D'accord, merci. J'ai les idées un peu plus clair maintenant.. Mais donc il va falloir que je redonne toute les valeurs mais dans la BDD?

Voilà rapidement ce que j'ai pensé faire.

Une table dans la BDD pour chaque batiments.
Pour le centre de commandement j'ai fait:
Nom: niveau_du_batiment
type: smallint (30 niveau quoi max)
valeur pas defaut: 1
interclassement : vide
attributs: vide
Null:non
defaut: aucune

Ca va jusqu'a present? Ou j'ai oublié quelques chose?


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

Une table pour chaque bâtiment là c'est chaud quand même je pense que ce n'est pas nécessaire mais j'en sais rien du tout je m'y connais pas assez!
Là il nous faut l'intervention de quelqu'un qui a déjà fait un jeu ou qui a déjà participer.(h)

Moi j'avais plutôt penser à faire une table avec tous les bâtiments, leur description, leur cout de départ.
Et pour ce qui est des augmentations de niveau et gestion des caractéristiques de ces bâtiments cela se ferait en PHP et on enregistre les modifications sur une autre table mais qui nous renseigne sur le joueur.

Cordialement Rorchar.


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

Bah moi je pensais faire:

Lorsque le joueur clic sur "augmenter le niveau", je verifie d'abord qu'il a les moyens, puit je soustrais les valeurs des couts au ressources total (donc je me sert du script que j'ai fait). Et pour finir, je fait passer le niveau 1 au niveau 2.

Donc je doit utiliser UPDATE mais je sais pas quoi faire exactement.

C'est une facon comme une autre, la tienne marchera surement aussi^^ Un avis de quelqu'un qui a créer un jeu pourrait aider oui Smile Mais je te remercie quand même de ton aide.


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

Yop !

Je ne me suis pas penché très précisément ce que tu comptais faire mais j'ai l'impression que tu as une table par bâtiment en "dur".
Pourquoi ne pas utiliser un classement plus souple qui te permette de rajouter des bâtiments sans toucher à cette partie de la BDD ?

Ex :
Table batiments (partielle)
*champ : type
*champ : niveau

Autre chose, tu as des méthodes déclarées "public" qui ne servent qu'en interne dans ta classe (du moins ce serait souhaitable). Alors ma question est : pourquoi sont-elles "public" ?


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

Je ne comprend pas vraimment, quel est le probleme de faire une table pas batiments? C'est trop lourd?

Pour l'histore du public, et bien j'avoue ne pas maitrisé la POO. Donc j'ai demandé a quelqu'un de m'aider a la faire. Il ma aussi fait une critique au niveau du public, voulant faire un truc plus complique mais plus utilise (si j'ai bien compris).
Mais j'ai juste besoin de faire appel a ces valeurs donc j'ai pas besoin de les faire en privée.

Pk c'est si important de ne pas les mettre en public?

amicalement


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

Pour la POO, je laisse ses monsieurs/mesdames répondre leurs arguments sur la sécurisation des données sur un serveur distant;

Pour ton problème de base de donnée, créer une ou plusieurs tables, le problème vient du fait qu'en informatique, on a tendance à être feignéant. Si tu as une table par batiment, et que tu souhaites mettons, gérer des pertes de points de structure à tes batiments, il faut que tu fasses N fonctions pour tes N batiments.

Dans le principe des Tables, encore plus que pour la POO, on essaye de regrouper au même endroit les données identiques. Quitte ensuite à faire des tables de compléments au cas par cas ...

Magdales gère 40 types de batiments. La structure générale de la table est unique. Sauf que pour certains type de batiments, on a une information du type : liste des objets vendables, liste des objets achetable, type de compétence que l'on peut apprendre, méthode de construction du batiment ...
Parfois, ces informations sont stockées dans d'autres tables tout aussi explicite.

Avec une telle méthode, et juste via un système d'administration, je peux rajouter un nouveau type de batiment sans toucher au code (enfin, relativement peu.) On gagne donc en souplesse.

Kéké


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

Je pense que kéké a bien résumé la partie base de données.

C'est bien de programmer en POO mais quel intérêt cela a t-il si tu n'en comprends pas le sens ? Elle n'a pas pour objectif un effet de style (même si ce n'est pas tout à fait vrai).
Le concept fondamental à retenir c'est qu'elle sert à dissocier l'interface utilisateur de l'interface machine.

Je vais te donner un exemple simple.
Lorsque tu utilises une voiture, tu insères la clé (qu'elle soit métallique,
électronique, magnétique), tu démarres sans avoir besoin de savoir ce que fait la voiture au niveau contrôles et commandes mécaniques.

Pour ton code ça doit être la même chose, tout ce qui est extérieur à ton objet n'a pas besoin de savoir comment il fonctionne à l'intérieur, d'où l'intérêt de restreindre la visibilité de tes méthodes à la classe qui les contient (bien entendu c'est au cas par cas, certaines méthodes doivent être public pour obtenir certaines propriété de l'objet).
Actuellement tu as un amas de méthodes, ton code serait plus efficace rangé en fonction selon la programmation procédurale.
J'ai tracé dans les grandes lignes.

Mais (et c'est là l'humour de la situation), il faut programmer en POO pour comprendre la POO...


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

Personnellement j'utilise un système entière basé sur la base de données afin de pouvoir rajouter de nouveaux types de bâtiments, d'unités ou de ressources quand je veux.L'objet j'y connais rien mais je partagerais ma méthode ou cas ou ça pourrait t'aider.
Pour les bâtiments je fais interagir 4 tables :
joueurs
batiments
batiments_joueurs
ressources


Donc bâtiments contient toutes les informations sur les bâtiments par exemple le nom, la description le coût en ressource du premier niveau, si c'est un batiment qui se multiplie ou qui augmente de niveau et si il augmente de niveau le rapport à la production. Dans batiments joueurs je prend simplement l'id du joueur, l'id du batiment en question et le nombre ou niveau de ce dit batiment. Bon et pour les ressources ça me semble plutôt évident.

Ainsi pour ajouter un batiment je fais simplement une petite vérification des ressources et si elles sont suffisantes je vérifie si le batiment augmente de niveau ou se multiplie je fais la maj de la table ressources je vérifie si une entrée possédant l'id du joueur et du batiment existe dans batiments_joueurs si oui je la met à jour avec un +1 au nombre/niveau et si non je la crée.