JeuWeb - Crée ton jeu par navigateur
Renseigenement pour la création d'un jeu - 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 : Renseigenement pour la création d'un jeu (/showthread.php?tid=4495)

Pages : 1 2


Renseigenement pour la création d'un jeu - R-transat - 08-01-2010

Bonjour à tous,

Je poste ce message car j'aimerai avoir quelques informations concernant le fonctionnant d'un jeu par navigateur.

Tout d'abord au niveau de l'URL : lorsque l'on clic sur la construction d'un bâtiment/édifices (ou autres, tout dépend du jeu), comment marche le fonctionnement ? On met l'id du niveau de construction du bâtiment dans l'URL (par exemple, si un bâtiment d'acier est niveau 3 lorsque l'on construit pour niveau 4, on va afficher sur l'URL l'id 4 du bâtiment acier ? (Bien sur je ne précise pas que ça fonctionne avec une base de donnée)

Ensuite le compteur de construction : comment fonctionne t-il en "gros" ? (javascript ça je me doute) mais par exemple pour savoir le temps qu'il reste pour la construction d'un bâtiment ? C'est une valeur dans la BDD pour savoir combien de temps il faut pas tel bâtiment et par niveau de construction ?

Exemple :

-------------------------------------------------------------------------------
id--------nom--------niveau--------temps(secondes)------- production
1 -------acier-----------3------------120--------------------------30
2-------aluminium------7------------350-------------------------40
------------------------------------------------------------------------------

La base de donnée ressemble t-elle à ça pour un jeu par navigateur ?

Comment convertir le temps en secondes de la base de donnée pour un script javascript de compte à rebours ?

Et bien sur la production d'un matériaux, comment fonctionne t-elle ? +10 à chaque niveau ou une valeur dans la base de donnée ou autre ?

Est ce que des fonctions sont crées pour simplifier tout ceci et éviter de répéter toutes les actions ?

J'ai essayé de créer la structure des tables dans ma base de donnée pour coder vite fait quelque petit truc voir comment ça fonctionne mais j'ai du mal, notamment pour celles des bâtiments qui selon moi devrait comporter le niveau de chaque bâtiment pour un membre, donc id_membre mais après... je ne sais pas du tout comment faire pour la structures.
Voila quelques screen :

Table ressources :
[Image: 211219.jpg]

Tables users :
[Image: 211220.jpg]

Et comment joindre les tables car je n'ai jamais vraiment essayer d'utiliser les jointures. Une seule requête pour joindre toutes les tables et être tranquille est possible ?

Et pour le décompte de la construction d'un bâtiment, on appel comment la fonction, etc ? (Si vous avez un code de compte à rebours je suis preneur)

Ca fait beaucoup de questions je sais mais je me suis toujours demander le fonctionnement d'un tel jeu.

Merci d'avance pour vos renseignement.


RE: Renseigenement pour la création d'un jeu - Zamentur - 08-01-2010

Effectivement çà fait beaucoup de question!

Donc pour commencer tes questions porte surtout sur la programmation et donc ce message serait mieux dans la partie développement que dans conception d'un jeu (ou on ne devrait parler peu de technique).

Cependant ton problème c'est peut être que justement tu ne sais pas exactement ce que tu veux faire (problème de conception donc). A partir de là c'est vrai qu'il est dur de développer quelques choses qu'on a pas défini.

Enfin bref je vais reprendre les questions une par une:
Citation :Tout d'abord au niveau de l'URL : lorsque l'on clic sur la construction d'un bâtiment/édifices (ou autres, tout dépend du jeu), comment marche le fonctionnement ? On met l'id du niveau de construction du bâtiment dans l'URL (par exemple, si un bâtiment d'acier est niveau 3 lorsque l'on construit pour niveau 4, on va afficher sur l'URL l'id 4 du bâtiment acier ? (Bien sur je ne précise pas que ça fonctionne avec une base de donnée)
Alors il est possible effectivement d'utiliser les liens avec la méthode GET pour réceptionner l'information.
Effectivement pour augmenter un batiment de niveau il suffit par exemple de faire un lien index.php?action=augmenter&id=23 en admettant que le bâtiment a l'id 23.
A partir de la dans ton script index.php tu récupère l'action et si elle vaut augmenter tu vas faire une requête SQL augmentant le niveau du bâtiment.
Ca peut par exemple ressembler à çà:
Code PHP :
<?php 
UPDATE
`batiments` SET `niveau`=`niveau`+1 WHERE `id`=%d
avec %d qui se remplacerais par un nombre entier.

Ainsi ton bâtiment augmente de niveau.

Citation :Ensuite le compteur de construction : comment fonctionne t-il en "gros" ? (javascript ça je me doute) mais par exemple pour savoir le temps qu'il reste pour la construction d'un bâtiment ? C'est une valeur dans la BDD pour savoir combien de temps il faut pas tel bâtiment et par niveau de construction ?
Alors là il y a 2 problèmes:
- le décompte coté client avec à la fin une éventuel mise à jour des informations (là c'est effectivement du javascript)
- le décompte coté serveur (php+bdd)

Donc pour le décompte javascript j'y reviendrais après.
Pour le décompte coté serveur, il faut que tu enregistres dans ta bdd la date et la durée du décompte
Ainsi en faisant une simple requête tu peux obtenir les améliorations terminées
Code PHP :
<?php 
SELECT
* FROM `ameliorations` WHERE `debut`+`duree`<=UNIX_TIMESTAMP()

Citation :Et bien sur la production d'un matériaux, comment fonctionne t-elle ? +10 à chaque niveau ou une valeur dans la base de donnée ou autre ?
J'ai peut être mal compris la question (qui est mal formulé), en fait, (si j'ai bien compris, c'est une question de conception pour le coup. Je me permet de reformuler la question comme je le comprend: Comment créer un système de production de ressource?
Et bien là c'est très vaste, on peut tout imaginer. Un jeu comme Ogame ou Travian, considère que le joueur gagne au fur et à mesure que le temps passe des ressources. Cette évolution peut finalement être représenté par une formule mathématique ce peut être:
ressource=rendement*temps-ressource_utilisée

Plus on a de bâtiment plus on a de rendement, logiquement on peut penser que 2 bâtiments vont produire 2 fois plus.
De même si les batiments peuvent évoluer (tu parlais de niveau) on peut définir par exemple rendement=niveau*rendement_par_niveau
Mais on peut aussi définir rendement_supplémentaire=coef/niveau
Citation :Ainsi avec coef=10
niveau 1 => 10 acier/h
niveau 2 => 15 acier/h
niveau 3 => 18 acier/h
niveau 4 => 21 acier/h
niveau 5 => 23 acier/h
...

Je pense qu'en faisant une recherche sur ressource dans le forum conception tu devrais trouver

Citation :Est ce que des fonctions sont crées pour simplifier tout ceci et éviter de répéter toutes les actions ?
Un jeu par navigateur étant souvent très vaste et destiné à être maintenue et à évoluer, il est nécessaire d'avoir une programmation modulaire et intelligente. Ainsi il est plus que conseillé de faire des fonctions pour regrouper les actions, tu peux aussi regarder du coté de la programmation orienté objet très pratique. Pour des raisons d'entretien je te conseille de faire pour chaque action une fonction/méthode.

Si tu copie colle tel quel un bout de code de ton jeu sur un autre endroit de ton jeu, demande toi pourquoi ce code ne se trouve pas dans une fonction.

Citation :J'ai essayé de créer la structure des tables dans ma base de donnée pour coder vite fait quelque petit truc voir comment ça fonctionne mais j'ai du mal, notamment pour celles des bâtiments qui selon moi devrait comporter le niveau de chaque bâtiment pour un membre, donc id_membre mais après... je ne sais pas du tout comment faire pour la structures.
Voila quelques screen :
Ça dépend vraiment de ce que tu souhaites faire, décris déjà complètement ce que tu veux faire et ensuite il sera plus simple de créer la structure de ta base de donnée


Citation :Et comment joindre les tables car je n'ai jamais vraiment essayer d'utiliser les jointures. Une seule requête pour joindre toutes les tables et être tranquille est possible ?
http://dev.mysql.com/doc/refman/5.0/fr/join.html
http://www.siteduzero.com/tutoriel-3-38831-les-jointures-moyen-d-economiser-des-ressources.html

Citation :Et pour le décompte de la construction d'un bâtiment, on appel comment la fonction, etc ? (Si vous avez un code de compte à rebours je suis preneur)
Je suis vraiment trop bon... Une simple recherche "compte à rebours" sur ce forum permet de trouver énormément de réponse
http://archive.jeuweb.org/-javascript-compte-a-rebours-3-versions-t-719.html

D'ailleurs tu aurais pu aussi avoir les réponses pour les jointures, le système de ressources et aussi pour la conception de la base de donnée juste en faisant une recherche.

Faut savoir qu'on avais regroupé les réponses à ces questions récurrentes dans un wiki mais ce dernier semble ne pas réapparaitre depuis la passation de jeuweb. Dommages parce que c'était vraiment bien.


RE: Renseigenement pour la création d'un jeu - My Hotel - 08-01-2010

Je pense que tout a été dit, je poste juste pour une connerie. Smile

Tu as masqué le password, donc je me dis que peut-être il n'est pas/ou mal crypté... Pense à faire du sha1 avec un ou plusieurs salt, c'est quand même l'idéal, parce que les md5 c'est grillé maintenant avec les bases de données de md5 existantes..

Bon courage, et bye


RE: Renseigenement pour la création d'un jeu - R-transat - 08-01-2010

Waouh, merci beaucoup pour ta réponses, ou plutôt tes réponses =). Par contre ma table structure pour les bâtiments je ne vois pas comment la construire.
Aurais-tu un exemple de structures de tables avec le strict minimum pour exemple ?

Et pour cette requête :
Code PHP :
<?php 
SELECT
* FROM `ameliorations` WHERE `debut`+`duree`<=UNIX_TIMESTAMP()
debut et duree corresponde à des valeurs dans la base de donnée ?

@My Hotel : C'est du sha1 dans ma base de donnée mais on sais jamais, il y a des malin partout Wink
Et il y a une méthode je crois pour récupérer un mot de passe (je ne sais plus son nom)


RE: Renseigenement pour la création d'un jeu - Kihmé - 08-01-2010

tout d'abord il faut comme te le dit zamentur que tu écrives tout ce que ton jeu devra faire. Ce sera une fois que tu auras ton texte que tu pourras repérer tes entités et tes relations. Ce sont ces entités et relations que te permetrons de correctement modéliser ta base de données (donc tes tables). Tu trouveras tout ce dont tu as besoin ici : http://sqlpro.developpez.com/cours/modelisation/merise/


RE: Renseigenement pour la création d'un jeu - R-transat - 08-01-2010

Merci de ton conseil Wink mais ça me permettrait d'utiliser les jointures et de faire du code réfléchi (c'est-à-dire un code propre et structuré et ça ne fait pas de mal de réfléchir sur plusieurs chose) si j'avais la structure de cette table


RE: Renseigenement pour la création d'un jeu - Kihmé - 08-01-2010

Ce que tu appelles jointures ne seraient pas plutôt tes clés étrangères???

Si c'est le cas, une bonne modélisation entité relation et tout est géré, après tu n'as plus qu'à appliquer le principe des contraintes de clés étrangères lorsque tu créés tes tables.

Les jointures, c'est fait pour utiliser plusieurs tables dans une même requêtes sql. Là où tu as des clés étrangères tu peux utiliser des jointures dans tes requêtes de sélection.

Donc vois le lien sur la modélisation puis apprend le sql si ce n'est pas déjà fait.
vite fait ton exemple devrait donner une modélisation comme ceci :

[Image: sanstitrekd.jpg] [Image: w673.png]

Donc après tu en déduis 3 tables (User, ressource, posséder)

user : id, login, password, mail
ressource : id, label
posséder : #user, #ressource, quantité


RE: Renseigenement pour la création d'un jeu - R-transat - 09-01-2010

Je ne connaissais pas la façon pour la table posséder. Et elle contient quoi ? C'est une jointure entre user et ressource car #user et #ressource ça me parle pas beaucoup.


RE: Renseigenement pour la création d'un jeu - Ter Rowan - 09-01-2010

la table possèder représente la relation entre un user et une ressource donc

#user est la clef étrangère pour l'utilisateur, donc l'id du user
#ressource est la clef étrangère pour la ressource, donc l'id de la ressource

du coup dans cette table si tu as :

toto / fer / 30
toto / blé / 100
toto / or / 3
tutu / fer / 40
tutu / blé / 40
tutu / or / 10

tu sais que le joueur toto possède 30 fer, 100 blé et 3 or et que le joueur tutu possède 40 fer, 40 blé et 10 or

de même tu sais combien il y a d or dans ton jeu par une seule requete (where ressource = or) etc...

si dans un mois tu te dis, mince je rajouterais bien une ressource "bois"
et bien tu ne changes pas le modèle de données tu n'auras qu'à insérer des lignes dans cette table,du genre toto / bois / 0, tutu /bois / 0
ainsi tu ne changes nulle part dans ton code le nom de champs (il ne bouge pas)

à noter là j ai mis tutu, toto, fer, blé mais il est plus "efficace" de mettre les id en entier

tu aurais ainsi la table user de Khimer
1 / toto / pwd / toto@toto.com
2 / tutu / pwd / tutu@tutu.com

dans la table ressource
1 / fer
2 / blé
3 / or

et dans la table posséder

1 / 1 / 30
1 / 2 / 100
1 / 3 / 3
2 / 1 / 40
2 / 2 / 40
2 / 3 / 10


RE: Renseigenement pour la création d'un jeu - R-transat - 09-01-2010

Ah oki Smile Je comprend mieux ^^

Par contre comment savoir si tel ou tel ID doit être primaire ou étranger ?
user est en auto-increment donc il doit être en primaire, ça se passe comment ?

PS : Si tu as des liens pour le SQL je suis preneur ^^
Je voudrais approfondir Wink. A part les select, insert into, update et delete je ne connais pas grand chose.

EDIT : Et pour le compteur en javascript, côté serveur ça se passe comment si on est plus sur la page, le décompte se fait toujours ? Parce que sinon c'est pas très intéressant si il faut rester sur la page pour avoir un niveau +1 ?