Sommaire
Pour raconter ma life, je reprends le code d'un vieux rpg en php pour faire un truc pour mes gamins, j'ajoute quelques modifs, surtout des images pour le moment. Globalement le truc se passe sur une "carte" de 500x500 cases et on se déplace, faisant des rencontres aléatoires. Mais c'est un pee brut et je veux ajouter des images, donc un "fond de carte" et lorsqu'on arrive sur une "case" il s'affiche une image, juste pour meubler l'écran.
Je refuse directement l'image aléatoire et choisi un truc que j'ai vu ailleurs : une "matrice" de caractères avec chaque caractère différent étant une image, par exemple
OOOOOOOO.O
OOOO11O.OO
OOO111.OOO
OOOO..OOOO
OO..OOOOOO
avec O étant l'herbe, 1 la montagne et . de l'eau, par exemple.
Ensuite j'ai juste à afficher l'image correspondante au paysage. Il faut bien entendu générer cette matrice" mais c'est un autre problème.
La question que je me posais est : fichier texte ou base de donnée ? j'ai bien tenté de venir poser la question ici, dans un forum mais je connaissais déjà la réponse des chafouins : fais un benchmark.. dont acte.
Pour que vous puissiez le reproduire chez vous, voila mes outils :
la création des matrices de 500 zeros.
fichier php
<?
//make_fichier.php
echo ('<?'."\n");
for ($i=0;$i<500;$i++) {
echo('$truc['.$i.']="0000... (500 ) ...000";'."\n");
echo ('?>');
?>
ensuite un php make_fichier.php > fichier.php donne
<?
$truc[0]="0000..(500)..000";
$truc[1]="0000..(500)..000";
$truc[2]="0000..(500)..000";
(……)
$truc[499]="0000..(500)..000";
?>
pour la base de donnée
mysql > create table bench (id int not null primary key, data text(500));
<?
//make_fichier.php
for ($i=0;$i<500;$i++) {
echo ("insert into bench values($i,'0000..(500)..000');\n");
}
?>
ensuite un php make_fichier.php > fichier.sql donne
insert into bench values(0,'000… (500) …000');
insert into bench values(1,'000… (500) …000');
insert into bench values(2,'000… (500) …000');
(……)
insert into bench values(499,'000… (500) …000');
que l'on insère par
mysql > .\ fichier.sql
Le script de bench
avec le fichier "texte" (php)
<?
print("benchmarck include php ====================\n");
$mem_usage = memory_get_usage(true);
echo round($mem_usage/1024,2)." kilobytes" . "\n";
include("fichier.php");
for($i=5;$i<500;$i+=2){
echo ($truc[$i][$i]);}
$mem_usage = memory_get_usage(true);
echo "\n".round($mem_usage/1024,2)." kilobytes" . "\n";
?>
on le lance avec :
strace -c -Ttt php bench.php
benchmarck include php ====================
512 kilobytes
00.. (500) ..001024 kilobytes
% time seconds usecs/call calls errors syscall
100.00 0.000098 1 137 mmap2
0.00 0.000000 0 63 read
0.00 0.000000 0 252 write
0.00 0.000000 0 143 67 open
0.00 0.000000 0 81 close
0.00 0.000000 0 1 execve
0.00 0.000000 0 3 time
0.00 0.000000 0 40 39 access
0.00 0.000000 0 17 brk
0.00 0.000000 0 8 8 ioctl
0.00 0.000000 0 1 gettimeofday
0.00 0.000000 0 2 readlink
0.00 0.000000 0 50 munmap
0.00 0.000000 0 1 clone
0.00 0.000000 0 1 uname
0.00 0.000000 0 21 mprotect
0.00 0.000000 0 12 3 llseek
0.00 0.000000 0 5 rt_sigaction
0.00 0.000000 0 2 rt_sigprocmask
0.00 0.000000 0 3 getcwd
0.00 0.000000 0 1 getrlimit
0.00 0.000000 0 70 55 stat64
0.00 0.000000 0 19 2 lstat64
0.00 0.000000 0 81 fstat64
0.00 0.000000 0 4 getdents64
0.00 0.000000 0 4 1 futex
0.00 0.000000 0 1 setthread_area
0.00 0.000000 0 1 set_tid_address
0.00 0.000000 0 1 set_robust_list
0.00 0.000000 0 2 socket
0.00 0.000000 0 2 2 connect
100.00 0.000098 1029 177 total
donc le fichier texte consomme 512 Ko de mémoire en plus que le simple executable php.
et un time php bench.php donne
real 0m0.025s
user 0m0.008s
sys 0m0.016s
php et mysql
<?
print("benchmarck mysql_php====================\n");
$mem_usage = memory_get_usage(true);
echo round($mem_usage/1024,2)." kilobytes" . "\n";
$con=mysql_connect("localhost","xxxxxx","xxxxxx");
mysql_select_db("xxxxxx",$con);
for($i=5;$i<500;$i+=2){
$query="SELECT substring(data,$i,1) as texte FROM bench where id=$i";
$nbr=mysql_query($query);
$n=mysql_fetch_array($nbr);
print $n["texte"];}
$mem_usage = memory_get_usage(true);
echo "\n".round($mem_usage/1024,2)." kilobytes" . "\n";
?>
trace -c -Ttt php bench.php
benchmarck mysql_php====================
512 kilobytes
000.. (500)… O0
512 kilobytes
% time seconds usecs/call calls errors syscall
56.87 0.000236 1 316 read
43.13 0.000179 0 503 write
0.00 0.000000 0 143 67 open
0.00 0.000000 0 82 close
0.00 0.000000 0 1 execve
0.00 0.000000 0 2 time
0.00 0.000000 0 40 39 access
0.00 0.000000 0 14 brk
0.00 0.000000 0 8 8 ioct
0.00 0.000000 0 1 gettimeofday
0.00 0.000000 0 2 readlink
0.00 0.000000 0 49 munmap
0.00 0.000000 0 1 clone
0.00 0.000000 0 1 uname
0.00 0.000000 0 21 mprotect
0.00 0.000000 0 12 3 llseek
0.00 0.000000 0 251 poll
0.00 0.000000 0 7 rt_sigaction
0.00 0.000000 0 2 rt_sigprocmask
0.00 0.000000 0 2 getcwd
0.00 0.000000 0 1 getrlimit
0.00 0.000000 0 136 mmap2
0.00 0.000000 0 71 55 stat64
0.00 0.000000 0 18 2 lstat64
0.00 0.000000 0 78 fstat64
0.00 0.000000 0 4 getdents64
0.00 0.000000 0 5 fcntl64
0.00 0.000000 0 5 1 futex
0.00 0.000000 0 1 setthread_area
0.00 0.000000 0 1 set_tid_address
0.00 0.000000 0 1 set_robust_list
0.00 0.000000 0 3 socket
0.00 0.000000 0 3 2 connect
0.00 0.000000 0 1 shutdown
0.00 0.000000 0 4 1 setsockopt
100.00 0.000415 1790 178 total
time php bench.php
real 0m0.035s
user 0m0.012s
sys 0m0.012s
php et mysql par mysqli
<?php
print("benchmarck mysqli_php====================\n");
$mem_usage = memory_get_usage(true);
echo round($mem_usage/1024,2)." kilobytes" . "\n";
$con=mysqli_connect("localhost","xxxxxx","xxxxxx","xxxxxx");
for($i=5;$i<500;$i+=2){
$query="SELECT substring(data,$i,1) as texte FROM bench where id=$i";
$nbr=mysqli_query($con,$query);
$n=mysqli_fetch_array($nbr);
print $n["texte"];}
$mem_usage = memory_get_usage(true);
echo "\n".round($mem_usage/1024,2)." kilobytes" . "\n";
?>
strace -c -Ttt php bench.php
benchmarck mysqli_php====================
512 kilobytes
00… (500) …O0
512 kilobytes
% time seconds usecs/call calls errors syscall
27.17 0.000097 1 143 67 open
26.05 0.000093 0 314 read
21.01 0.000075 2 40 39 access
13.73 0.000049 1 71 55 stat64
12.04 0.000043 0 501 write
0.00 0.000000 0 82 close
0.00 0.000000 0 1 execve
0.00 0.000000 0 2 time
0.00 0.000000 0 14 brk
0.00 0.000000 0 8 8 ioctl
0.00 0.000000 0 1 gettimeofday
0.00 0.000000 0 2 readlink
0.00 0.000000 0 49 munmap
0.00 0.000000 0 1 clone
0.00 0.000000 0 1 uname
0.00 0.000000 0 21 mprotect
0.00 0.000000 0 12 3 llseek
0.00 0.000000 0 248 poll
0.00 0.000000 0 5 rt_sigaction
0.00 0.000000 0 2 rt_sigprocmask
0.00 0.000000 0 2 getcwd
0.00 0.000000 0 1 getrlimit
0.00 0.000000 0 136 mmap2
0.00 0.000000 0 18 2 lstat64
0.00 0.000000 0 78 fstat64
0.00 0.000000 0 4 getdents64
0.00 0.000000 0 2 fcntl64
0.00 0.000000 0 5 1 futex
0.00 0.000000 0 1 setthread_area
0.00 0.000000 0 1 set_tid_address
0.00 0.000000 0 1 set_robust_list
0.00 0.000000 0 3 socket
0.00 0.000000 0 3 2 connect
0.00 0.000000 0 1 shutdown
0.00 0.000000 0 4 1 setsockopt
100.00 0.000357 1778 178 total
time bench.php
real 0m0.002s
user 0m0.000s
sys 0m0.004s
Voila, en gros je fais ce que je veux, c'est moins consommateur de mémoire de passer par mysql, mais un peu plus long et un peu plus de processeur, mais rien de bien flagrant.
Maintenant les benchmark ca vaut ce que ca vaut. Je le partage ici parce que si j'en avais trouvé un, je ne l'aurais pas fait, si cela peut servir à quelqu'un.
# Mouais
Posté par Nicolas Blanco (site web personnel) . Évalué à -2.
Du bon vieux PHP procedural et du MySQL dans le meme post. Tu pouvais attendre vendredi mec serieux !
[^] # Re: Mouais
Posté par GG (site web personnel) . Évalué à 4.
Certes, concernant MySQL il y a plein d'optimisations possibles, donc …
mais pour le "procédural", j'ai toujours entendu dire que c'était plus rapide et moins gourmand que du objet, mais moins confortable pour le développeur.
C'est vrai ou pas? SI ce programme était écrit en objet, ça irait plus vite? moins vite?
En fait, dans je doute que ce soit significatif.
Enfin, pour générer les cartes, pourquoi ne pas se baser sur le système de fractales, comme pour la génération des galaxies du jeux Frontier Elite II?
Pourquoi bloquer la publicité et les traqueurs : https://greboca.com/Pourquoi-bloquer-la-publicite-et-les-traqueurs.html
[^] # Re: Mouais
Posté par ckyl . Évalué à 8. Dernière modification le 20 mars 2014 à 09:20.
On s'en balance un peu. Bencher comme ca sans raison le DL d'une matrice 500x500 ça ne sert absolument à rien. Si tu fais ton petit truc dans ton coin pour 5 utilisateurs ca sera de toute façon suffisamment rapide pour ne pas avoir a t'en soucier (c'est bien d'avoir une idée des ordres de grandeur). Si tu fais un truc qui va prendre de la charge dans la face ou que ton besoin c'est pas 500x500 mais NxN alors tu prends en compte ces paramètres dans ta conception et dans tes tests:
Mais surtout si ton besoin c'est vraiment de stocker du 500x500 pour tes gamins pourquoi tu benchs ? T'as 250Ko à lire ! ~5 ms à froid pour le seek quoi que tu fasses et quelques dizaines/centaines de µs à chaud. Y'a rien à gagner ou à perdre avant d'avoir très très sérieusement scalé.
Bref en règle générale:
[^] # Re: Mouais
Posté par hervé Couvelard . Évalué à 3.
Je ne charge pas la map. Il n'y a pas de map, juste une grille de 25 000 cases dans laquelle on se balade et qui ne sert juste qu'à délimiter le monde et poser des villes. Pour le moment il n'y a pas d'images, mais je ne vais pas redire ce que j'ai déjà écrit, suffit juste de lire. J'ai l'impression de voir mes étudiants qui répondent au titre de la question sans avoir lu la question.
Le but n'est pas de gagner ou de perdre, mais de tester, pour le fun. Si les gens ne faisaient que des trucs très sérieux, ce n'est plus les journaux que l'on mettrait en dépèche, mais les commentaires des question sur les forums.
Mais promis, la prochaine fois je vous embêterais plus avec mes trucs et les garderais pour moi.
[^] # Re: Mouais
Posté par Loïs Taulelle ࿋ (site web personnel) . Évalué à 7.
Pour qu'il y ait une prochaine fois (Le langage ne m'interesse pas, mais la problématique et la démarche sont fun) : /usr/bin/time à la place du built-in time de ton shell.
C'est un chouill' plus verbeux, et c'est souvent plus intéressant.
Proverbe Alien : Sauvez la terre ? Mangez des humains !
[^] # Re: Mouais
Posté par ckyl . Évalué à 7. Dernière modification le 20 mars 2014 à 13:55.
Je sais lire et c'est ce qu'on appele une map puisque ca defini ton terrain.
Basiquement une map c'est un fonction (x, y) => t qui te retourne le type de la case. Tu peux l'implémenter comme tu veux. Tu as choisi de la représenter par une matrice textuelle.
Ta grille fait 250K cases, avec une représentation bête et méchante: un octet par case => 250K. Tu peux facilement faire ton estimation au dos d'une envelope à partir de ca. Tu compares ca au reste des coûts de ton chemin d'exécution complet en prod et par rapport à la "résolution" du client. Et tu arrives facilement à estimer si ca vaut le coup de faire autre chose que l'implémentation élégante.
Merci.
Ce qui est fun c'est de faire des choses qui ont un sens même si ca n'a absolument aucune utilité pratique. Autrement c'est juste faire n'importe quoi.
La ton "benchmark" ne t'apprend rien de nouveau par rapport à un calcul au dos de l'envelope et ne mesure rien de significatif. La conclusion tu pouvais la connaitre avant de la faire:
[^] # Re: Mouais
Posté par hervé Couvelard . Évalué à 1.
ouais, sauf qu'en mode déconnecté, il est tout sauf certain que le fichier texte reste dans l'espace d'adressage et qu'il faille le relire à chaque fois. Mais plutôt que de refaire un bench stupide qui n'apprenne rien, tu le sais peut être ?
Lorsque 2 personnes visitent une page à 2 secondes d'intervalles, le fichier reste en cache ou il ne l'est plus ? lorsque d'autres applications tournent sur la machine ?
Et comme la base de donnée est aussi un fichier, il faut des 2 cotés lire un fichier, en mode texte on lit les 500 lignes, en mode base on lit une seule ligne. C'est quoi le plus rapide ?
et c'est quoi la "bonne structure de représentation des données" ?
[^] # Re: Mouais
Posté par ckyl . Évalué à 5.
Ce n'est pas le but.
Lire un fichier de 250K depuis le cache VFS ne coute "rien" que ce soit via l'API standard ou mmap.
Si tu en est là, tu fais fausse route avec PHP et ton modèle d'exécution. Mais tu n'as pas de problème à résoudre.
Théoriquement tu ne peux pas savoir. Mais sauf a avoir un demon qui stock tes valeurs en memoire tu ne peux pas faire mieux. Et clairement ce n'est pas ce que tu veux et ca n'en vaudra jamais le coup.
En pratique la reponse sera oui. Si tu n'utilises jamais ton appli alors tu as des chances qu'une éviction ait eu lieu et de faire un miss. Mais tu t'en balance car ca veut dire que tu as une requete / jour. Que ca prenne 5ms on s'en fou. De toute facon ton script PHP à aussi été dégager dans ce cas…
Note que tu as le même problème avec une DB, et que tu n'as toujours pas de problème à résoudre.
Ca depend de ton utilisation.
C'est justement pour ca que ton test est pourri.
D'une part tu ne définis rien. Vas tu requeter une seule fois ou souvent ? As tu besoins de seulement quelques valeurs ? Etc.
D'autre part tes deux implementation n'ont rien de comparables. Ta version fichier elle est pratique si tu veux faire plein de requêtes sur une case en particulier. Ta version DB elle ne le permet pas. Tu compares des choux et des carottes. Quel est le but de la mesure au final ?
Ca demande de savoir comment tu vas utiliser et quel est le problème. Et vu que ton bench ne veut rien dire, qu'il n'y a pas de contexte et que les deux implementations divergent…
[^] # Re: Mouais
Posté par hervé Couvelard . Évalué à 2.
j'ai une grille de 500x500 cases et on se déplace, lorsqu'on arrive sur une "case" il s'affiche une image, juste pour meubler l'écran. le type de cette image peut être stockée de différente manière :
- un fichier texte que je lis ligne à ligne pour trouver le bon x,y
- un array php ou chaque ligne est un x et le y est la position dans la chaine
- une table bdd ou chaque enregistrement est un x et le y est la position dans la chaine
- une image de x*y pixels ou la valeur est la couleur du pixel
-….
j'ai juste besoin de lire la valeur t correspondant à x,y - on est en client serveur, peu de connexions, même le truc le plus pourri, avec des objets java sur une base oracle passerait. Mon questionnement, sur un truc aussi simple est " variable php (dc 250Ko en ram) ou bdd et 1 seule ligne (5 ko) à lire. c'est juste de la curiosité.
Alors ce n'est pas palpitant certes, mais j'ai essayé de voir.
d'ailleurs une manière de générer la "matrice" est de faire une carte couleur pour arriver à une image de 250*250 puis de transformer les pixels en caractères.
[^] # Re: Mouais
Posté par ckyl . Évalué à 3.
Je comprends parfaitement que tu cherches à le faire pour le fun.
Maintenant si tu veux une seule valeur alors essaies de faire des implémentation comparables. Si tu es basé sur un fichier ou un mmap, tu peux seeker directement à la bonne position par exemple. Ou être row based. A l'inverse en BDD tu peux retourner le blob entier ou faire un record par case. Mais si tu commences à mixer les implémentation sans raison ca limite encore l'intêret de la démarche.
Après les methodologies de mesure pour des choses <ms sont assez "compliqué" et demande de la rigeur. Enfin définir son critère de mesure est impératif: Que mesure ton, dans quel context, dans quel but. Sans ca l'intêret est extrêment limité d'autant plus quand tu peux savoir d'avance que l'ordre de grandeur est le même.
[^] # Re: Mouais
Posté par hervé Couvelard . Évalué à 3.
je croyais que l'implémentation était équivalente :
- un tableau de 500 ligne en php,
- une base de 500 enregistrement en mysql
Qu'ai-je loupé ?
[^] # Re: Mouais
Posté par hervé Couvelard . Évalué à 7.
je sais qu'ici, il y a tout plein de gens très sérieux dont les compétences sauvent le monde, mais pour faire un testounet de 10 lignes qui m'a pris plus de temps à mettre en forme qu'a monter, je n'ai pas cherché le marteau pilon.
Parce que je suis persuadé que sur une grid de 1000 coeurs avec le bon ordonnanceur, avec une table en ram… on pourrait faire encore mieux, mais je suis sur une vieille machine et je suis sur du code qui existe déja et que ne veux pas y passer plus de temp.
Moi je n'aime pas l'objet lorsque je suis en non connecté, cela me semble, au niveau exécution, une hérésie.
[^] # Re: Mouais
Posté par lasher . Évalué à 3.
Concernant l'utilisation de la POO dans ce contexte:
De plus, et ça ce n'est que mon opinion, critiquer la façon de coder (objet, procédural, fonctionnel, blah) à tout prix est ridicule, surtout si on n'est pas impliqué dans le développement en lui-même. L'important c'est que le boulot soit fait. C'est la première règle. Une règle optionnelle, c'est que le boulot soit bien fait, et donc qu'on puisse le reprendre facilement. La POO peut aider, mais ce n'est pas toujours le cas, car écrire correctement un programme orienté objet nécessite de ne pas perdre la boule et ajouter 2000 classes juste parce qu'on suit un dogme « POO partout » (et potentiellement, performance nulle part…).
Bref.
# Format?
Posté par devnewton 🍺 (site web personnel) . Évalué à 4.
Tu devrais générer la carte dans un format pour un éditeur comme Tiled. Ca te permettra de la retoucher et d'ajouter des métadonnées.
Le post ci-dessus est une grosse connerie, ne le lisez pas sérieusement.
[^] # Re: Format?
Posté par hervé Couvelard . Évalué à 0.
heu… marteau-pilon vs mouche ?
[^] # Re: Format?
Posté par Larry Cow . Évalué à 8.
Clairement, pourquoi s'emmerder à utiliser une visseuse électrique pour visser, alors que la nature nous a déjà donné des ongles?
[^] # Re: Format?
Posté par hervé Couvelard . Évalué à 3.
Clairement, pourquoi s'emmerder à utiliser un marteau alors qu'en construisant un barrage, tirant des lignes à haute tension et en empruntant la visseuse du voisin, ca va tellement plus vite pour enfoncer un clou.
[^] # Re: Format?
Posté par liberforce (site web personnel) . Évalué à 4.
Depuis on a inventé la visseuse sans fil…
[^] # Re: Format?
Posté par Loïs Taulelle ࿋ (site web personnel) . Évalué à 1.
Pour enfoncer un clou ?
Proverbe Alien : Sauvez la terre ? Mangez des humains !
[^] # Re: Format?
Posté par Larry Cow . Évalué à 6.
Boarf, en tapant avec la batterie et en visant bien…
# Commentaire supprimé
Posté par Anonyme . Évalué à 9.
Ce commentaire a été supprimé par l’équipe de modération.
[^] # Re: Consommation mémoire...
Posté par ckyl . Évalué à 2.
Effectivement si tu veux mimiser la conso mémoire et gagner 250K par instance, tu mmap directement ta matrice définie dans un fichier. Au passsage ca enlève la limite à 80 caractère et tu ne peux pas avoir un accès moins couteux à une cellule. Par sur que tu puisses mmap en PHP par contre.
# Génération
Posté par rewind (Mastodon) . Évalué à 3.
Pour ça, je te conseille un petit article qui contient quelques idées d'algos pour générer tes montagnes.
Pour le reste, j'aimerais savoir si l'idée est de générer une carte une bonne fois pour toute ou alors si tu génères des cartes en ligne. Parce que dans le premier cas, en fait, ce n'est pas si grave que ce soit lent (et quand je dis lent, je parle de truc de l'ordre de la seconde voire, dans le pire des cas, de la minute). Dans le second cas, oui c'est intéressant de regarder. Et si tu es dans le premier cas, tu pourrais sans doute essayer sqlite, parce que ta carte va rester constante a priori au cours du jeu, donc tu n'auras pas de problème d'écritures concurrentes.
[^] # Re: Génération
Posté par hervé Couvelard . Évalué à 4.
alors…
pour le moment le truc que j'ai exhumé n'utilise pas de carte, juste une grille "vide" avec quelques villes posées dessus.
pour le moment je ne cherche qu'à mettre des images "fixes" pour agrémenter la page en question. Ce qui veut dire, que pour le moment, le contenu de la carte importe peu que ce soit une image de montagne ou de plaine ou de désert ne changera rien du tout au jeu, mon objectif est plutôt d'ajouter, rapidement (en peu de temps, J'ai ajouté des images pour les monstres et les villes en moins de 15 minutes, en partant d'un code que je connaissais pas.) et avec peu de lignes,
- la possibilités de se croiser à plusieurs sur la "carte" (2 personnes au même endroit, peu importe ou) et de se parler.
- la possibilité de faire des missions.
- Des pnj.
Ce système de matrice texte est assez simple à mettre en oeuvre, il ne sert qu'à mettre des images (et je ne veux pas d'images aléatoires, pour avoir la même image lorsque je reviens sur la même case.) Je sais qu'avec ce système, je suis limité à environs 80 type d'images, mais je survivrais.
Enfin, je ne veux rien de plus que j'utilise déja. Pour la "création" de la carte, j'avais déjà fait un truc en python qui est déjà utilisé par les futurs utilisateurs de cette maigre évolution d'un rpg existant et qui est capable d'écrire ce que j'attends de lui. J'ai trouvé des tuiles (disons pas loin de 8000) que je peux utiliser librement quelque soit le contexte et qui permettrons de fabriquer, ET la map world ET les images de chaque type de case.
Je n'attends rien de plus et je ne veux pas y passer des heures : l'objectif est de donner à mes gamins la possibilité d'être acteur de leur jeux et de pouvoir y jouer en ligne avec 2 ou 3 potes. Cela durera probablement 3 mois de mise en place du jeux (car le paramétrage peut se faire par eux en mode web, directement sur le serveur) et 3 mois de jeux avant de passer à autre chose, ou pas.
C'est, à mon avis, cela l'esprit du libre : trouver un bout de code, l'adapter pour faire ce que l'on a envie/besoin (et le donner si un autre le veut). Maintenant c'est sûrement pas élégant au niveau code, probablement pas très smart au niveau de ce que l'on pourrait faire, mais ce sera fait en moins de 15 jours, à temps perdu (peu), ca tournera sur une machine déjà en place et c'est l'objectif.
J'ai lu avec attention tes épisodes sur la création d'un jeu, c'est super intéressant mais à des années lumières des objectifs que je me suis fixé pour cette fois.
[^] # Re: Génération
Posté par fabien . Évalué à 5.
Salut,
je pense qu'en general les gens ont bien compris la philosohpie derriere tout ca, les remarques qui sont faites ici le sont surtout de maniere generale, pour quiconque serait interessé par un projet equivalent (même si ces remarques te sont adressé personnelement, ce n'est finalement qu'une question de forme…)
Il y a des points interessant non pas uniquement pour celui qui expose ses bench mais pour divers lecteurs de ce post.
Parmi ceux qui repondent ainsi que ceux qui ne laisserons pas de trace ici, il y en a qui comprennent ta demarche.
En tout cas, va-y fonce!
Est-ce qu'il sera possible de voir le resultat final ? ou d'en avoir les sources pour que l'on puisse l'essayer ?
Perso ca m'interesse… (avec ou sans base de données :P )
[^] # Re: Génération
Posté par hervé Couvelard . Évalué à 2.
pour le moment, il n'y a pas trop de changement par rapport à cà :
http://dragon.se7enet.com/dev.php.
# pas compris ton bench
Posté par maboiteaspam . Évalué à 1.
Car il ne se positionne dans aucun cas concret. Enfin si, la génération d'1 map, 1 fois, sans concurrence.
Partant du principe que tu écris en php, je suppose, site web, je suppose donc multi utilisateur.
Je me demande si la table est en lecture / écriture permanente, ou pas.
Autrement, le make du fichier.php pourrait être écris ainsi,
Qui donc génère un tableau php véritable, l'exporte en code php compatible via var_export, concatène le résultat avec un return et un point-virgule, puis écris finalement l'ensemble dans un fichier php itself.
Tu peux ensuite te contenter d'un bête :
pour lire ta matrice.
Puis quitte à faire dans le pet de mouche, évite les balises php fermante si ton code n'est pas mixé avec du html.
Cela peut t'éviter pleins de problèmes potentiels extrêmement bizarre à debugger pour un non avertit.
PS : le parseur MD est total buggé les amis. il confond php et math…
[^] # Re: pas compris ton bench
Posté par hervé Couvelard . Évalué à 2.
non c'est la lecture d'une position dans une map le truc. La génération de la map c'est juste pour donner les outils pour refaire le test.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.