JeuWeb - Crée ton jeu par navigateur
Association PHP & XML - 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 : Association PHP & XML (/showthread.php?tid=591)

Pages : 1 2


Association PHP & XML - nemesis_elite - 01-01-2007

Bonjour à tous

J'ai trouvé un jeu php en opensource nommé Acetone, celui-ci emploi
quelques fichiers xml pour, par exemple, les PNJ ( personnage non jouable )
comme celui-ci
Code :
<?xml version="1.0"?>
<npc>
    <conditions>
        <questAwaiting>
            <true>rootC</true>
        </questAwaiting>
        <questA>
            <true>rootB</true>
        </questA>
    </conditions>
    <movement>
        <step>
            <x>10</x>
            <y>10</y>
        </step>
        <step>
            <x>11</x>
            <y>10</y>
        </step>
        <step>
            <x>12</x>
            <y>10</y>
        </step>
        <step>
            <x>13</x>
            <y>10</y>
        </step>
        <step>
            <x>14</x>
            <y>10</y>
        </step>
        <step>
            <x>10</x>
            <y>9</y>
        </step>
        <step>
            <x>11</x>
            <y>9</y>
        </step>
        <step>
            <x>12</x>
            <y>9</y>
        </step>
        <step>
            <x>13</x>
            <y>9</y>
        </step>
        <step>
            <x>14</x>
            <y>9</y>
        </step>
        <step>
            <x>10</x>
            <y>8</y>
        </step>
        <step>
            <x>11</x>
            <y>8</y>
        </step>
        <step>
            <x>12</x>
            <y>8</y>
        </step>
        <step>
            <x>13</x>
            <y>8</y>
        </step>
        <step>
            <x>14</x>
            <y>8</y>
        </step>
    </movement>
    <chat>>
        <root>
            <text>Hello there stranger. How may I help thee?</text>
            <goto>q1</goto>
        </root>
        <q1>
            <option>
                <text>What is your name?</text>
                <goto>name</goto>
            </option>
            <option>
                <text>Why is there only this one building in this city??</text>
                <goto>build</goto>
            </option>
            <option>
                <text>$ Leave</text>
                <goto></goto>
            </option>
        </q1>
        <back>
            <option>
                <text>$ Back</text>
                <goto>root</goto>
            </option>
            <option>
                <text>$ Leave...</text>
                <goto></goto>
            </option>
        </back>
        <name>
            <text>I'm afraid I don't remember. I know! Find Xavier and ask him my name! Will you do this quest?</text>
            <goto>askquest</goto>
        </name>
        <askquest>
            <option>
                <text>Yes, indeed I shall.</text>
                <goto>acceptquest</goto>
            </option>
            <option>
                <text>No.</text>
                <goto>root</goto>
            </option>
        </askquest>
        <acceptquest>
            <text>Thank you oh kind sir. I will be waiting...</text>
            <query>INSERT INTO conds SET userid='uid', name='questAwaiting', value='TRUE'</query>
            <alert>"Missing Name" quest started.</alert>
            <goto>q3</goto>
        </acceptquest>
        <build>
            <text>That is because the creators of this world haven't finished creatnig it yet.</text>
            <goto>back</goto>
        </build>
        <rootB>
            <text>Hello there I see you ahve completed my quest!</text>
            <alert>"Missing Name" quest completed! You have been awared 1 quest point.</alert>
            <goto>q2</goto>
        </rootB>
        <q2>
            <option>
                <text>$ Undo the quest...</text>
                <goto>undo</goto>
            </option>
            <option>
                <text>$ Leave</text>
                <goto></goto>
            </option>
        </q2>
        <undo>
            <text>The quest has been undone...</text>
            <query>DELETE FROM conds WHERE name='questA' AND userid='uid'</query>
            <goto>back</goto>
        </undo>
        <q3>
            <option>
                <text>$ Leave</text>
                <goto></goto>
            </option>
            <option>
                <text>{null}</text>
                <goto>{null}</goto>
            </option>
        </q3>
        <rootC>
            <text>Please hurry and get my name.</text>
            <goto>q3</goto>
        </rootC>
    </chat>
</npc>

N'ayant jamais eu l'idée d'utiliser ce type de fichier, j'aimerai savoir comment cela fonctionne et comment peut on faire pour le mettre en relation avec les pages php. :heuuu:

Merci d'avance


RE: Association PHP & XML - Loetheri - 01-01-2007

Tu dois utiliser un parser.

Ce genre de fichier est bien mais atteint très vite un grosseur énorme. Une DB est nettement mieux Smile


RE: Association PHP & XML - nemesis_elite - 01-01-2007

Donc si je comprend bien, vaut mieux que j'oublie ça immédiatement :toilette:


RE: Association PHP & XML - Roworll - 02-01-2007

Pas vraiment.

Chaque fichier XML pour les PNJ est certainement fixe ce qui fait qu'ils n'atteindront jamais une taille monstrueuse. Le XML que tu nous montre ressemble fort à un fichier de configuration.
Par contre, il faut effectivement un parser capable de décoder ce XML.

PHP 5 propose quelques fonctions très utiles à ce sujet (comme simplexml_load_file) qui permettent de gérer/valider facilement les fichiers XML.

Ce type de technique permet de décharger la base de données en se reposant plus sur les capacités de traitement de PHP. Les informations sont lues à partir de ce fichier XML et non pas chargées depuis une base de données.


RE: Association PHP & XML - Loetheri - 02-01-2007

Citation :Chaque fichier XML pour les PNJ est certainement fixe ce qui fait qu'ils n'atteindront jamais une taille monstrueuse.

Cela dépend du nombre de PNJ. Si tu regardes bien, ici, un PNJ correspond à toutes ses lignes. Alors venir dire que ce n'est pas forcément gros ;-) J'ai vraiment du mal à y croire. (Je ne compte que 160 lignes :p)


RE: Association PHP & XML - Roworll - 02-01-2007

En partant du fait que 1 PNJ = 1 Fichier (ce qui me semblerait plus que logique) ca reste assez raisonnable.

Ce fichier semble inclure a la fois les informations de quête, de déplacement et de dialogue correspondant à un seul PNJ. Ca représente tout de même pas mal de traitement mis à plat et localisé dans un seul et même fichier.

Ces informations étant certainement peu dynamiques, le stockage en base de données n'est pas obligatoire.

En supposant un grand nombre de connectés et des accès concurrentiels pour parler au(x) PNJ(s), quel serait le plus efficace entre
- un accès multiples aux bases de données + traitement PHP pour la mise en forme
- une lecture de fichier XML + traitement PHP pour le parsing et la mise en forme

J'ai tendance à penser que les accès XML seront plus rapide. On évite les verrous de table, on évite le transfert d'info SQL <-> PHP ainsi que l'ouverture/fermeture de nombreux recordset.


RE: Association PHP & XML - Loetheri - 02-01-2007

1 fichier = 1PNJ ... J'espère que de toute façon, ton nombre de PNJ est restreint ;-)
Tu ne fais pas un fichier trop gros ... mais tu multiplies les fichiers -_-' Cherchez l'erreur.
Surtout qu'avec 1 fichier = 1 PNJ, tu as interêt à bien savoir comment repérer quel fichier tu dois lire.

Mais sinon il est vrai que c'est plus rapide. Cependant, je mets largement en doute la façon de faire pour associer la lecture du fichier au bon fichier.

Donc oui, je persiste à dire que le XML est utile mais pas dans le cas d'informations en grand nombre. (Si on ne le dit pas, certains vont faire des "cartes" en XML ... 250*250 avec au moins 3 attributs, on va rire pour la rapidité et l'accès au fichier)


RE: Association PHP & XML - Roworll - 02-01-2007

Evidemment que les gros XML sont une abérration. Il faut rester dans une limite correcte, c'est évident.
Pour info, je ne connais pas Acetone et je ne fais que spéculer mais gerer quelque chose du genre 1 fichier XML = 1 PNJ n'a rien d'insurmontable.

Il suffit par exemple que le XML ait comme nom l'ID du personnage.

Je vais prendre le cas pratique de la société ou je suis.
Nous utilisons un logiciel pour réaliser des formations et des mises à niveau.
Les données des cours et des tests de connaissance sont stockés dans une base de donnée mais leur structure est sauvegardée au format XML.

Nous avons ainsi plus de 2000 structures de cours stockées en XML et référencés par un Id unique ({C0BB3143-A9FD-11D6-A2B8-00508B8B464E}.xml par exemple).

Je peux assurer que la multiplication des fichiers XML est loin d'être problèmatique.


RE: Association PHP & XML - joshua - 02-01-2007

moi j'aurais fait du xslt avec une base de données :p
Mais je suis un taré, on me le dit souvent :p


RE: Association PHP & XML - gtsoul - 02-01-2007

le xml semble posséder une structure plus dynamique (on n'est pas cantonné à table/colonnes identiques d'une bdd)
mais quelles sont les performances d'un fichier xml dans le cas d'accès simultanés (en lecture seulement) ?

verrouillage exclusif ou lectures simultanées possibles ?