Code en BDD [RESOLU]
Code en BDD [RESOLU]
Bonjour a tous, enfin, bonne nuit en l'occurence, vu qu'il est 5h du mat.
Je suis Yra, et cela fait maintenant quelques temps que j'ere sur le forum dans l'ombre, lisant les sujets afin de debuter puis m'ameliorer en purebasic. Ayant des connaissances dans d'autres langages, cela ne fut pas une tache insurmontable, mais tout de meme, il me reste beaucoup de travail avant de devenir le futur admin de ce forum ( je suis ambitieux muwahahaaa )
Quoi qu'il en soit, je viens a mon tour demander de l'aide.
En effet, je souhaite realiser un rpg textuel, en console. Pourquoi la console? Je trouve que ca donne un effet retro, et je trouve que les rpg en mode texte sont beaucoup plus amusant que les nouveaux jeux style FF, qui misent tout sur le graphisme, et qui ne laissent plus aucune place a l'imagination. Après chacun son point de vue, mais personnellement je trouve qu'un bon "Livre dont vous etes le heros" est beaucoup plus sympa que toutes ces nouvelles technologies qui visent la perfection graphique.
Mais je me pose devant un certain probleme.
Je souhaite diviser le jeu en divers lieux, objets, quetes ect.. Mais voila, comment faire?
J'ai d'abord pensé a mettre une bonne centaines de fichiers differents, un pour chaque lieu/objet/monstre/quete/sort( et sans doutes tout un tas d'autres choses), j'aurais ensuite fait une armée d'include pour rajouter tout ca au code source, et une fois l'executable fait, tout aurait marché. Mais voila, j'ai pas vraiment envi de me retrouver avec 32000 fichiers differents.
J'ai ensuite pensé a stocker les codes de chacun de mes objets/lieux.. dans une bdd, ca presentait moultes avantages :
- Une seule BDD, pas 500000 fichiers
- En cas de mise a jour, la bdd etant externe au fichier, il est facile de modifier certains trucs, refaire des ajustement, il suffisait de changer ce qui me plaisait pas dans un des codes stockés pour que le jeu soit mis a jour, alors qu'avec les fichiers, il aurait fallu faire retelecharger l'exe a l'utilisateur.
- exe plus petit
- et certainement d'autres
Mais je me suis vite heurté a un mur. Bah oui, le code est en BDD, comment le faire lire par l'executable?
Après plein d'essai, je pensais qu'une methode fonctionnerait.
A chaque fois que le joueur utilisé un objet, ou combatait un monstre par exemple, j'extrayais de la BDD le code qui y etait enregistré, et je le mettais dans un fichier txt temporaire, je fesais ensuite un simple Include("temp.txt") puis deletefile("temp.txt") , et basta! Mais une fois l'executable créé, plusieurs problemes ont fait que cette methode ne marchait pas.
1.Il fois qu'a l'execution, un fichier temp.txt existe deja, car la fonction include refusait de fonctionner sinon ( Logique. )
2.Quelques soit les modifications du fichier temp.txt, le code inclu etait toujours le meme. J'imagine qu'il etait figé dans l'executable.
Bref, faut il que j'en revienne a la methode des 4242 fichiers, ou y a t'il une facon de gerer avec une base?
Merci d'avoir lu jusqu'au bout ( si vous avez lu jusqu'au bout evidement ), et merci d'avance si quelqu'un peut m'aider.
Et sur ce, bonne nuit!
Je suis Yra, et cela fait maintenant quelques temps que j'ere sur le forum dans l'ombre, lisant les sujets afin de debuter puis m'ameliorer en purebasic. Ayant des connaissances dans d'autres langages, cela ne fut pas une tache insurmontable, mais tout de meme, il me reste beaucoup de travail avant de devenir le futur admin de ce forum ( je suis ambitieux muwahahaaa )
Quoi qu'il en soit, je viens a mon tour demander de l'aide.
En effet, je souhaite realiser un rpg textuel, en console. Pourquoi la console? Je trouve que ca donne un effet retro, et je trouve que les rpg en mode texte sont beaucoup plus amusant que les nouveaux jeux style FF, qui misent tout sur le graphisme, et qui ne laissent plus aucune place a l'imagination. Après chacun son point de vue, mais personnellement je trouve qu'un bon "Livre dont vous etes le heros" est beaucoup plus sympa que toutes ces nouvelles technologies qui visent la perfection graphique.
Mais je me pose devant un certain probleme.
Je souhaite diviser le jeu en divers lieux, objets, quetes ect.. Mais voila, comment faire?
J'ai d'abord pensé a mettre une bonne centaines de fichiers differents, un pour chaque lieu/objet/monstre/quete/sort( et sans doutes tout un tas d'autres choses), j'aurais ensuite fait une armée d'include pour rajouter tout ca au code source, et une fois l'executable fait, tout aurait marché. Mais voila, j'ai pas vraiment envi de me retrouver avec 32000 fichiers differents.
J'ai ensuite pensé a stocker les codes de chacun de mes objets/lieux.. dans une bdd, ca presentait moultes avantages :
- Une seule BDD, pas 500000 fichiers
- En cas de mise a jour, la bdd etant externe au fichier, il est facile de modifier certains trucs, refaire des ajustement, il suffisait de changer ce qui me plaisait pas dans un des codes stockés pour que le jeu soit mis a jour, alors qu'avec les fichiers, il aurait fallu faire retelecharger l'exe a l'utilisateur.
- exe plus petit
- et certainement d'autres
Mais je me suis vite heurté a un mur. Bah oui, le code est en BDD, comment le faire lire par l'executable?
Après plein d'essai, je pensais qu'une methode fonctionnerait.
A chaque fois que le joueur utilisé un objet, ou combatait un monstre par exemple, j'extrayais de la BDD le code qui y etait enregistré, et je le mettais dans un fichier txt temporaire, je fesais ensuite un simple Include("temp.txt") puis deletefile("temp.txt") , et basta! Mais une fois l'executable créé, plusieurs problemes ont fait que cette methode ne marchait pas.
1.Il fois qu'a l'execution, un fichier temp.txt existe deja, car la fonction include refusait de fonctionner sinon ( Logique. )
2.Quelques soit les modifications du fichier temp.txt, le code inclu etait toujours le meme. J'imagine qu'il etait figé dans l'executable.
Bref, faut il que j'en revienne a la methode des 4242 fichiers, ou y a t'il une facon de gerer avec une base?
Merci d'avoir lu jusqu'au bout ( si vous avez lu jusqu'au bout evidement ), et merci d'avance si quelqu'un peut m'aider.
Et sur ce, bonne nuit!
Dernière modification par Yrahen le dim. 02/sept./2012 1:17, modifié 1 fois.
"L'imagination est plus importante que la connaissance."
Re: Code en BDD
Bienvenue sur le forum, ça fait toujours plaisir de voir de nouveaux adeptes.
Pour ma part, je pense que le jeu est un monde un peu à part car le jeu suit un scénario et que le scénario conditionne une partie de la programmation.
En effet, il faut prévoir les interactions entre le joueur et sa machine (clavier, souris,...) pendant le jeu.
La première chose à faire et d'écrire le scénar : Nombre de niveaux, lieux, personnages, leurs aptitudes, les armes, ...
Ici on pend du recul.
Pour l'utilisation des données, on prend la décision d'utiliser plutôt un tableau, ou une liste ou une map voire une base de données et même des pointeurs. Chacun a ses avantages et ses inconvénients (voir la doc). Les bases de données ne me paraissent pas être une bonne idée car elles sont en général assez lente et leur mise en place est délicate. Au pire, il faudrait faire des essais avec sqlLite. Un fichier XML pourrait être une bonne solution aussi.
Pour stocker les données sur disque, outre la BDD ou XML, le mieux est d'en mettre un max dans un seul fichier.
Moins on fait d'accès au disque est mieux c'est.
Le problème des jeux est, et reste, la gestion de la mémoire. Il faut se débrouiller pour avoir en mémoire (RAM) tout ce qui est utile pour le niveau de jeu en cours, afin d'assurer une fluidité suffisante. Et pour assurer cette fluidité, il faut que la boucle principale du jeu (gestion du clavier, souris, intelligence artificielle des personnages = action/réaction entre le jeu et le joueur,...) soit la plus courte possible. D'où un scénario au petits oignons...
Tu pourrais essayer de créer un fichier par niveau. Ce fichier contiendrait tout, dans des rubriques différentes, comme un fichier ini : rubrique texte, personnages, ... Chaque rubrique serait chargée en mémoire dans une map, qui elle même contiendrait des structures probablement.
Les personnages sont souvent des structures.
Je pense que ta façon de faire avec des includes aboutira à une impasse.
En résumé :
Dans une boucle principale
Chargement d'un niveau en mémoire (à partir d'1 fichier)
exécution du niveau ( création des maps, structures, IA, gestion clavier,...)
si fin du niveau alors on vide la mémoire (map, structure,...) et on charge le niveau suivant
si pas fin du jeu alors retour à la boucle principale
sinon fin
Mine de rien, un jeu même en console reste un gros travail. Il faudra compter plusieurs mois ou années...
Voilà, j'espère avoir aidé un peu.
Mesa.
Pour ma part, je pense que le jeu est un monde un peu à part car le jeu suit un scénario et que le scénario conditionne une partie de la programmation.
En effet, il faut prévoir les interactions entre le joueur et sa machine (clavier, souris,...) pendant le jeu.
La première chose à faire et d'écrire le scénar : Nombre de niveaux, lieux, personnages, leurs aptitudes, les armes, ...
Ici on pend du recul.
Pour l'utilisation des données, on prend la décision d'utiliser plutôt un tableau, ou une liste ou une map voire une base de données et même des pointeurs. Chacun a ses avantages et ses inconvénients (voir la doc). Les bases de données ne me paraissent pas être une bonne idée car elles sont en général assez lente et leur mise en place est délicate. Au pire, il faudrait faire des essais avec sqlLite. Un fichier XML pourrait être une bonne solution aussi.
Pour stocker les données sur disque, outre la BDD ou XML, le mieux est d'en mettre un max dans un seul fichier.
Moins on fait d'accès au disque est mieux c'est.
Le problème des jeux est, et reste, la gestion de la mémoire. Il faut se débrouiller pour avoir en mémoire (RAM) tout ce qui est utile pour le niveau de jeu en cours, afin d'assurer une fluidité suffisante. Et pour assurer cette fluidité, il faut que la boucle principale du jeu (gestion du clavier, souris, intelligence artificielle des personnages = action/réaction entre le jeu et le joueur,...) soit la plus courte possible. D'où un scénario au petits oignons...
Tu pourrais essayer de créer un fichier par niveau. Ce fichier contiendrait tout, dans des rubriques différentes, comme un fichier ini : rubrique texte, personnages, ... Chaque rubrique serait chargée en mémoire dans une map, qui elle même contiendrait des structures probablement.
Les personnages sont souvent des structures.
Je pense que ta façon de faire avec des includes aboutira à une impasse.
En résumé :
Dans une boucle principale
Chargement d'un niveau en mémoire (à partir d'1 fichier)
exécution du niveau ( création des maps, structures, IA, gestion clavier,...)
si fin du niveau alors on vide la mémoire (map, structure,...) et on charge le niveau suivant
si pas fin du jeu alors retour à la boucle principale
sinon fin
Mine de rien, un jeu même en console reste un gros travail. Il faudra compter plusieurs mois ou années...
Voilà, j'espère avoir aidé un peu.
Mesa.
Re: Code en BDD
Merci pour cette reponse.
Pour avoir gouté a la prog il y a de ca une dizaine d'années, je connais les contraintes de la creation d'un jeu. Je connais deja le background, le monde est bien clair dans ma tete, chaque monstre/objet/sort est bien defini.
Pour ce qui est de la ram, je ne me fais pas vraiment de soucis, si les ordinateurs peuvent faire tourner les jeux actuels ( ou meme les ordinateurs anciens qui peuvent gerer certains programmes ), je pense qu'un simple rpg textuel ne devrait pas poser de soucis.
Je ne comprend pas vraiment ton decoupage par niveau. Mais c'est de ma faute, j'ai mal presenté mon projet ( deja bien entammé ).
Le RPG textuel serait plus dans le style d'un livre comme vous etes le heros :
Chaque lieu/objet/mob contiendrait, dans leur fichier, du code purebasic, dans ce style la :
Du coup, je ne pense pas utiliser quelque chose d'exterieur a l'executable, tout simplement parce que le joueur pourrait modifier le code. Et je ne vois pas comment inclure ce genre de code dans un fichier .ini.
L'avantage d'utiliser du code comme ca, c'est que chaque objet du jeu sera entierement modelable comme je le souhaite, dans la limite de purebasic.
Vois tu ce que je veux dire?
Pour avoir gouté a la prog il y a de ca une dizaine d'années, je connais les contraintes de la creation d'un jeu. Je connais deja le background, le monde est bien clair dans ma tete, chaque monstre/objet/sort est bien defini.
Pour ce qui est de la ram, je ne me fais pas vraiment de soucis, si les ordinateurs peuvent faire tourner les jeux actuels ( ou meme les ordinateurs anciens qui peuvent gerer certains programmes ), je pense qu'un simple rpg textuel ne devrait pas poser de soucis.
Je ne comprend pas vraiment ton decoupage par niveau. Mais c'est de ma faute, j'ai mal presenté mon projet ( deja bien entammé ).
Le RPG textuel serait plus dans le style d'un livre comme vous etes le heros :
Chaque lieu/objet/mob contiendrait, dans leur fichier, du code purebasic, dans ce style la :
Code : Tout sélectionner
Printn("Vous voyez une vieille dame.")
Printn("1.L'aider a traverser la route")
Printn("2.Lui mettre un coup de pied")
choix=GetChoix()
If choix=1
Printn("Vous etes gentil.")
AjouterOr(10)
elseif choix=2
Printn("Oh, vous etes mechant! Un garde arrive pour vous casser la gue**e")
SetMechancete(1)
DemarrerCombat(Garde de la ville)
Endif
L'avantage d'utiliser du code comme ca, c'est que chaque objet du jeu sera entierement modelable comme je le souhaite, dans la limite de purebasic.
Vois tu ce que je veux dire?
"L'imagination est plus importante que la connaissance."
Re: Code en BDD
Un fichier pref non ?
Code : Tout sélectionner
If CreatePreferences("c:\Preferences.prefs")
PreferenceGroup("Heroe")
WritePreferenceString("NOM", "NomParDefaut")
WritePreferenceString("SEXE", "M")
PreferenceComment(" Info heroe")
PreferenceComment("")
PreferenceGroup("Alignement")
WritePreferenceLong ("Gentil", 5)
WritePreferenceLong ("Mechant", 5)
WritePreferenceLong("Ruse", 2)
PreferenceGroup("Argent")
WritePreferenceLong ("Or", 5)
WritePreferenceLong ("Argent", 20)
WritePreferenceLong("Cuiver", 12)
ClosePreferences()
EndIf
OpenPreferences("Preferences.prefs")
PreferenceGroup("Alignement")
Debug ReadPreferenceLong ("Gentil", 0)
Debug ReadPreferenceLong ("Ruse", 0)
Debug ReadPreferenceLong("Mechant", 0)
ClosePreferences()
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: Code en BDD
Effectivement, pour stocker les informations concernant le joueur, c'est une très bonne alternative a la BDD, merci 
( existe t'il une solution pour que ce fichier soit ouvrable en lecture seule, ou caché? ( Ou alors je le met dans un sous dossier de C:/, comme ca l'utilisateur ne pourrait pas le trouver facilement ) )
Cependant, pour stocker chacun de mes lieux, je ne vois pas comment faire avec les prefs.
Imaginez ca :
Je veux en fait, pouvoir programmer a ma guise, chaque lieu.

( existe t'il une solution pour que ce fichier soit ouvrable en lecture seule, ou caché? ( Ou alors je le met dans un sous dossier de C:/, comme ca l'utilisateur ne pourrait pas le trouver facilement ) )
Cependant, pour stocker chacun de mes lieux, je ne vois pas comment faire avec les prefs.
Imaginez ca :
Code : Tout sélectionner
Printn("Bienvenue a l'auberge.")
Printn("1.Aller dans le salon")
Printn("2.sortir")
Printn("3.Frapper un poivrau")
choix=GetChoix()
if choix=1
DeplacerJoueur(Lieu18) ; Le lieu n°18 correspond au salon de l'auberge
if choix=2
DeplacerJoueur(Lieu4) ; Le lieu n°4 correspond a la place du marché
Printn("Le grand air vous revigore!")
SetVie(50)
if choix=3
; on s'en fou
endif
"L'imagination est plus importante que la connaissance."
Re: Code en BDD
Le tout est de bien penser tes "groupes"
C'est là même chose en créant un groupe pour les lieux et des (sous) groupes pour les choix dans chaque lieu
C'est là même chose en créant un groupe pour les lieux et des (sous) groupes pour les choix dans chaque lieu
Code : Tout sélectionner
PreferenceGroup("Lieux")
WritePreferenceString("Lieu1", "Auberge")
WritePreferenceString("Lieu2", "Lupanar")
WritePreferenceString("Lieu3", "Grotte")
PreferenceGroup("Auberge")
WritePreferenceString("Choix1", "Salon")
WritePreferenceString("Choix2", "Poivreau")
WritePreferenceString("choix3", "Sortir")
PreferenceGroup("Lupanar")
WritePreferenceString("Choix1", "Femme")
WritePreferenceString("Choix2", "Homme")
WritePreferenceString("choix3", "LesDeux") ; ^^
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: Code en BDD
Bonjour et bienvenu, tu devrais te créer un "éditeur de niveau" pour te facilité la tâche.
ton jeu à une structure d'arbre, c'est facile à réalisé.
dans lequel tu écrits par exemple les questions sous cette forme :
ton jeu à une structure d'arbre, c'est facile à réalisé.
tu pourrais enregistré des questions / actions dans un fichier .lvlQuestion
..../\
.../..\
.R1..R2
dans lequel tu écrits par exemple les questions sous cette forme :
le fichier sera donc inexploitable par un néophyte car il ne peut connaitre le format employé. La question possède deux ou trois voir plus de choix , selon ces choix ( les réponses ) , cela active des actions sous forme de byte, par exemple :question[string] | nbr reponse [byte] | < reponse [string] | action [byte] | jumpToQuestion [integer] >
Code : Tout sélectionner
#ADD_OR = $FF
if Action = #ADD_OR
OR + 10
endif
Re: Code en BDD
Merci a vous deux.
J'en déduit par vos reponses qu'il est impossible de stocker du code purebasic en dehors de l'executable, je m'en passerais donc.
La solution de Ar-S semble beaucoup plus simple a mettre en place, cependant la facon de faire de G-Rom offre je pense plus de possibilités.
Je vais essayer les deux de toute facon. ( Au pire j'ai le temps, les serveurs GW2 doivent encore etre HS.. )
En tout cas, merci!
J'en déduit par vos reponses qu'il est impossible de stocker du code purebasic en dehors de l'executable, je m'en passerais donc.
La solution de Ar-S semble beaucoup plus simple a mettre en place, cependant la facon de faire de G-Rom offre je pense plus de possibilités.
Je vais essayer les deux de toute facon. ( Au pire j'ai le temps, les serveurs GW2 doivent encore etre HS.. )
En tout cas, merci!
"L'imagination est plus importante que la connaissance."
Re: Code en BDD
Le code purebasic est compilé , c'est à dire qu'il est transformé en code asm puis en fichier executable, donc , ton code d'origine n'a plus rien à voir avec ton executable, ton executable ne contient que du code machine , les noms de variables & co n'existe pas dans ce contexte , elles n'ont plus aucun sens.Yrahen a écrit :Merci a vous deux.
J'en déduit par vos reponses qu'il est impossible de stocker du code purebasic en dehors de l'executable, je m'en passerais donc.
La solution de Ar-S semble beaucoup plus simple a mettre en place, cependant la facon de faire de G-Rom offre je pense plus de possibilités.
Je vais essayer les deux de toute facon. ( Au pire j'ai le temps, les serveurs GW2 doivent encore etre HS.. )
En tout cas, merci!
tu peu à la rigueur executé des scripts ( lua ) , mais je ne connais pas de bindings ( liaison entre une bibliothèque d'un langage X vers un programme d'un langage Y ).
si tu sèches sur la conception , n'hésites pas à poser les bonnes question sur le forum.
Re: Code en BDD
voici un exemple de ce que tu peu faire :
ensuite à toi de créer des fonctions qui permet de créer des questions/réponse à la volée.
Tu peu aussi parsé un fichier texte , via les fonctions readstring()/stringfield() , etc...
et au moment du parsing tu executes tes fonctions qui créer les questions réponse.
tu peut ensuite inclure ton fichier texte dans ton executable.
tu peu aussi edité ton niveau dans un fichier .cvs , Dobro avait écrit un truc la dessus pour la lecture/écriture sur ce type de format.
ou , tu peut aussi passé par des .dll qui contiens ton niveau ( regarde ds la section tuto & programme à base de plugin )
Code : Tout sélectionner
Structure s_Reponse
reponse.s
jumpToQuestion.i
EndStructure
Structure s_Question
question.s
nbrReponse.i
Array reponse.s_Reponse(10)
EndStructure
Structure s_Level
levelName.s
Array question.s_Question(10)
EndStructure
niveau.s_Level
niveau\levelName = "Préambule..."
; QUESTION 0
niveau\question(0)\question = "Salut, tu arrives près d'une personne agée , que fait tu ?"
niveau\question(0)\nbrReponse = 3
niveau\question(0)\reponse(0)\reponse = "Tu l'agresses et lui vole son porte monaie"
niveau\question(0)\reponse(0)\jumpToQuestion = 1
niveau\question(0)\reponse(1)\reponse = "Tu lui dit que les vieux on devrais les piquer à la naissance"
niveau\question(0)\reponse(1)\jumpToQuestion = 2
niveau\question(0)\reponse(2)\reponse = "Tu passes ton chemin"
niveau\question(0)\reponse(2)\jumpToQuestion = 3
; QUESTION 1
niveau\question(1)\question = "Le vieux se défend , il sort un magnum 357 et le pointe vers toi , que fait tu ?"
niveau\question(1)\nbrReponse = 2
niveau\question(1)\reponse(0)\reponse = "Tu chies dans ton froc , et tu t'évanouis dans ta propre pisse."
niveau\question(1)\reponse(0)\jumpToQuestion = 4
niveau\question(1)\reponse(1)\reponse = "Tu l'insultes de tout les noms"
niveau\question(1)\reponse(1)\jumpToQuestion = 4
; QUESTION 2
niveau\question(2)\question = "Il te crache sur la gueule, il te dit aussi que par le passé il à baisé ta mère , que fait tu ?"
niveau\question(2)\nbrReponse = 2
niveau\question(2)\reponse(0)\reponse = "Tu lui coupe la bite, et tu lui fourre dans sa grande gueulle"
niveau\question(2)\reponse(0)\jumpToQuestion = 4
niveau\question(2)\reponse(1)\reponse = "Tu lui dit que tu as 2 pères..."
niveau\question(2)\reponse(1)\jumpToQuestion = 5
; QUESTION 3
niveau\question(3)\question = "tu as passé ton chemin, mais le vieux te crache son dentier dans le dos , que fait tu ?"
niveau\question(3)\nbrReponse = 2
niveau\question(3)\reponse(0)\reponse = "Tu part en courant en laissant derrière toi une trainée de pisse"
niveau\question(3)\reponse(0)\jumpToQuestion = 4
niveau\question(3)\reponse(1)\reponse = "Tu lui colle un high kick suivi d'un triple coup de boule rotatif"
niveau\question(3)\reponse(1)\jumpToQuestion = 4
; QUESTION 4
niveau\question(4)\question = "Fin..."
niveau\question(4)\nbrReponse = 0
niveau\question(4)\reponse(1)\jumpToQuestion = 4
; QUESTION 5
niveau\question(5)\question = "il te dit qu'il est pédé comme un phoque et qu'il veut t'enculé"
niveau\question(5)\nbrReponse = 2
niveau\question(5)\reponse(0)\reponse = "tu baisses ton pantalon et tu te colle un doigt dans le fion"
niveau\question(5)\reponse(0)\jumpToQuestion = 4
niveau\question(5)\reponse(1)\reponse = "tu le fend en deux !"
niveau\question(5)\reponse(1)\jumpToQuestion = 4
OpenConsole()
EnableGraphicalConsole(1)
current_question.i = 0
BEGIN:
ClearConsole()
PrintN( niveau\question( current_question )\question )
For i = 0 To niveau\question( current_question )\nbrReponse - 1
PrintN( Str(i+1) + " = " + niveau\question( current_question )\reponse(i)\reponse )
Next
Print("CHOIX = ")
Resultat.i = Val(Input()) - 1
If Resultat < 0
Resultat = 0
EndIf
current_question = niveau\question(current_question)\reponse( Resultat )\jumpToQuestion
Goto BEGIN
Tu peu aussi parsé un fichier texte , via les fonctions readstring()/stringfield() , etc...
et au moment du parsing tu executes tes fonctions qui créer les questions réponse.
tu peut ensuite inclure ton fichier texte dans ton executable.
tu peu aussi edité ton niveau dans un fichier .cvs , Dobro avait écrit un truc la dessus pour la lecture/écriture sur ce type de format.
ou , tu peut aussi passé par des .dll qui contiens ton niveau ( regarde ds la section tuto & programme à base de plugin )
Re: Code en BDD
Je vois, le plus etonnant est que j'ai absolument tout compris, mis a part l'utilisation des structures, mais en meme temps a 2h du mat le cerveau est un peu moins performant.
En tout cas super, j'ai enfin une ligne a suivre qui semble fiable
Merci!
En tout cas super, j'ai enfin une ligne a suivre qui semble fiable

Merci!
"L'imagination est plus importante que la connaissance."
Re: Code en BDD [RESOLU]
une structure permet "d'étendre" les informations sur une variable.
par exemple :
au lieu d'écrire des coordonnées comme ceci :
tu peut faire :
tout est contenu dans "Position", tu peut mettre dans ta structure ce que tu veut , des tableaux , liste chaînée , tout type de variable , d'autre structures , etc...
Voici un exemple plus complet avec des particules :
par exemple :
au lieu d'écrire des coordonnées comme ceci :
Code : Tout sélectionner
PositionX.f = 50
PositionY.f = 25
Code : Tout sélectionner
Structure Coordonnee
X.f
Y.f
EndStructure
Position.Coordonnee
Position\x = 50
Position\y = 25
Voici un exemple plus complet avec des particules :
Code : Tout sélectionner
Structure s_Position
x.f
y.f
EndStructure
Structure s_Particule
Position.s_Position
Direction.s_Position
Speed.f
TimeToLife.i
Size.f
EndStructure
Structure s_Particule_Emeteur
Position.s_Position
List particule.s_Particule()
Timer.i
CreateTimer.i
EndStructure
Procedure CreateParticule(*p.s_Particule_Emeteur, speedToCreate.i = 250)
AddElement(*p\particule())
*p\particule()\Position\x = *p\Position\x
*p\particule()\Position\y = *p\Position\y
;-1 to 1
*p\particule()\Direction\x = (-Random(100) + Random(100)) / 100
*p\particule()\Direction\y = (-Random(100) + Random(100)) / 100
*p\particule()\TimeToLife = ElapsedMilliseconds() + 2500
*p\particule()\Speed = 1 + Random(19)
*p\CreateTimer = speedToCreate
*p\Timer = ElapsedMilliseconds() + *p\CreateTimer
EndProcedure
Procedure RunParticle(*p.s_Particule_Emeteur)
; Creation particule
;
If *p\Timer < ElapsedMilliseconds()
*p\Timer = ElapsedMilliseconds() + *p\CreateTimer
CreateParticule(*p,*p\CreateTimer)
EndIf
ForEach *p\particule()
; Mouvement particule
;
*p\particule()\Position\x = *p\particule()\Position\x + (*p\particule()\Direction\x * *p\particule()\Speed)
*p\particule()\Position\y = *p\particule()\Position\y + (*p\particule()\Direction\y * *p\particule()\Speed)
; Suppression particule
;
If *p\particule()\TimeToLife < ElapsedMilliseconds()
DeleteElement(*p\particule(),1)
Continue
EndIf
Circle(*p\particule()\Position\x,*p\particule()\Position\y,1,$FFFFFF)
Next
EndProcedure
InitSprite()
OpenWindow(0,0,0,800,600,"")
OpenWindowedScreen(WindowID(0),0,0,800,600,1,0,0)
A.s_Particule_Emeteur
A\Position\x = 400
A\Position\y = 300
A\CreateTimer = 10
B.s_Particule_Emeteur
B\Position\x = 200
B\Position\y = 100
Repeat
event = WindowEvent()
If event = #PB_Event_CloseWindow
quit = 1
EndIf
ClearScreen(0)
StartDrawing(ScreenOutput())
RunParticle(@A)
RunParticle(@B)
StopDrawing()
FlipBuffers()
Until quit = 1
Re: Code en BDD [RESOLU]
version psyché

Code : Tout sélectionner
Structure s_Position
x.f
y.f
EndStructure
Structure s_Particule
Position.s_Position
Direction.s_Position
Speed.f
TimeToLife.i
size.f
EndStructure
Structure s_Particule_Emeteur
Position.s_Position
List particule.s_Particule()
Timer.i
CreateTimer.i
EndStructure
Procedure CreateParticule(*p.s_Particule_Emeteur, speedToCreate.i = 250)
AddElement(*p\particule())
*p\particule()\Position\x = *p\Position\x
*p\particule()\Position\y = *p\Position\y
;-1 to 1
*p\particule()\Direction\x = (-Random(100) + Random(100)) / 100
*p\particule()\Direction\y = (-Random(100) + Random(100)) / 100
*p\particule()\TimeToLife = ElapsedMilliseconds() + 2500
*p\particule()\Speed = 1 + Random(19)
*p\CreateTimer = speedToCreate
*p\Timer = ElapsedMilliseconds() + *p\CreateTimer
EndProcedure
Procedure RunParticle(*p.s_Particule_Emeteur)
; Creation particule
;
If *p\Timer < ElapsedMilliseconds()
*p\Timer = ElapsedMilliseconds() + *p\CreateTimer
CreateParticule(*p,*p\CreateTimer)
EndIf
ForEach *p\particule()
; Mouvement particule
;
*p\particule()\Position\x = *p\particule()\Position\x + (*p\particule()\Direction\x * *p\particule()\Speed)
*p\particule()\Position\y = *p\particule()\Position\y + (*p\particule()\Direction\y * *p\particule()\Speed)
; Suppression particule
;
If *p\particule()\TimeToLife < ElapsedMilliseconds()
DeleteElement(*p\particule(),1)
Continue
EndIf
DrawRotatedText(Random(800), Random(600), "Pure Basic !", Random(360), RGB(Random(255), Random(255), Random(255)))
Circle(*p\particule()\Position\x,*p\particule()\Position\y,Random(5),Random($FFFFFF))
Next
EndProcedure
InitSprite()
OpenWindow(0,0,0,800,600,"")
OpenWindowedScreen(WindowID(0),0,0,800,600,1,0,0)
a.s_Particule_Emeteur
a\Position\x = 600
a\Position\y = 300
a\CreateTimer = 10
b.s_Particule_Emeteur
b\Position\x = 200
b\Position\y = 300
Repeat
event = WindowEvent()
If event = #PB_Event_CloseWindow
quit = 1
EndIf
ClearScreen(0)
StartDrawing(ScreenOutput())
RunParticle(@a)
RunParticle(@b)
StopDrawing()
FlipBuffers()
Until quit = 1
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: Code en BDD [RESOLU]
Je vois.. Les structures sont en fait des big variables, avec plein de petites variables dedans en gros.
Ca me rappelle un peu le style OO. Je pense utiliser les structures a partir de maintenant, le code doit paraitre plus clair, et ca evite d'avoir moulte variables a droite a gauche.
Ca me rappelle un peu le style OO. Je pense utiliser les structures a partir de maintenant, le code doit paraitre plus clair, et ca evite d'avoir moulte variables a droite a gauche.
"L'imagination est plus importante que la connaissance."
Re: Code en BDD [RESOLU]
ça me désole d'avoir a repeter ça trop souvent mais
ici :
http://www.purebasic.fr/french/viewtopi ... =21&t=6664
il y a des tutos
(y compris sur les Structures )
ici :
http://www.purebasic.fr/french/viewtopi ... =21&t=6664
il y a des tutos

(y compris sur les Structures )