La Dernière Etreinte & Editeur de cartes - développement

Programmation avancée de jeux en PureBasic
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

cederavic a écrit :A ce sujet, tu as essayer le Quick Sort de ton Comtois?
J'ai pas encor trouver le temps de le faire moi... Et j'ai toujours quelques soucis avec la version "Threadée"... (Un bug en cache toujours un autre :lol: )
Non pour l'instant je bosse les collisions glissantes , et je galère :)
Pour l'instant , j'ai fait ça ( les segments peuvent être déplacés à la souris)

TestCollision

ça déconne complètement ,mais c'est un début :)
Je voudrais faire des fonctions qui puissent être utilisées aussi bien en 2D qu'en 3D.Pour l'instant je fais mes essais en 2D , quand ça sera ok , je testerai en 3D.

Sinon plutôt qu'un Quick Sort ; j'essayerais autre chose , comme les arbres binaires de recherche , ou alors je voulais bosser sur les tas et les files de priorité .

Un tas c'est un arbre organisé de façon à retrouver le noeud ayant la plus petite ou la plus grande valeur , dans notre cas , ça serait la plus petite .
c'est plus rapide que de faire un tri .
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Message par cederavic »

Pas mal ton exe, je pense que tu es sur la bonne voie :)

Sinon, je ne connais pas les arbres binaires, donc je te laisse le plaisir de le faire :P
Gratteur
Messages : 147
Inscription : ven. 22/avr./2005 23:02

Message par Gratteur »

Les arbres binaires ressemblent beaucoup à des tableaux binaires mais en utilisant des listes chaînées (donc les "colonnes" ne font pas toutes la même taille, ca part dans tous les sens comme les branches d'un arbre, graphiquement ca pourait ressembler à un arbre génialogique).
On utilise couramment ce genre d'arbre (version non binaire) pour le mode T9 des téléphones portables par exemple, on navigant dans les branches ont peu retrouver très rapidement tous les mots d'un dictionnaire préalablement trié et rangé dans l’arbre.

Pour en revenir au Pathfinder, le mien marche correctement sauf dans le cas ou la cible se retrouve de l'autre coté d'un cul sac. Pour que le personnage puisse sortir du cul sac si il se trouve à l'intérieur et que la cible se trouve à l'extérieur (ou inversement qu'il ne rentre pas dans le cul sac si la cible et lui sont à l'extérieur), j'ai besoin de générer quelques rares points de passage assez particuliers.

C'est pour cela que j'aimerai bien en savoir plus sur ton algorithme qui procède par remplissage de surfaces en calculs préliminaires afin de choisir la meilleure solution.
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

ça c'est pour les files de priorité
http://www.enseignement.polytechnique.f ... node3.html

pour le remplissage , j'avais utilisé cet algo

en remplaçant Getpixel par la map bien sûr :)

Code : Tout sélectionner

void remplissage(int xx,int yy,
                 int c,int lim) {
  int x,y,xi,xf ;
  p.sp = 1 ;
  p.x = calloc(1000,sizeof(int)) ;
  p.y = calloc(1000,sizeof(int)) ;
  p.x[0] = xx ;
  p.y[0] = yy ;
  setcolor(c) ;
  while ( p.sp != 0 ) {
    xi = xf = x = p.x[p.sp-1] ;
    y = p.y[p.sp-1] ;
    x++ ;
    cp = getpixel(x,y) ;
    while ( cp != lim ) {
      xf = x ;
      x++ ;
      cp = getpixel(x,y) ; }
    x = p.x[p.sp-1]-1 ;
    cp = getpixel(x,y) ;
    while ( cp != lim ) {
      xi = x ;
      x-- ;
      cp = getpixel(x,y) ; }
    line(xi,y,xf,y) ;
    p.sp-- ;
    x = xf ;
    while ( x >= xi  ) {
      cp = getpixel(x,y+1) ;
      while ( ((cp == lim) || (cp == c))
              && (x >= xi) ){
        x-- ;
        cp = getpixel(x,y+1) ; }
      if ( (x >= xi) && (cp != lim)
           && (cp != c) ) {
        p.x[p.sp] = x ;
        p.y[p.sp] = y+1 ;
        p.sp++ ; }
      cp = getpixel(x,y+1) ;
      while ( ( cp != lim )
              && ( x >= xi ) ) {
        x-- ;
        cp = getpixel(x,y+1) ; } }
    x = xf ;
    while ( x >= xi  ) {
      cp = getpixel(x,y-1) ;
      while ( ((cp == lim) || (cp == c))
              && (x >= xi) ){
        x-- ;
        cp = getpixel(x,y-1) ; }
      if ( (x >= xi)
           && (cp != lim)
           && (cp != c) ) {
        p.x[p.sp] = x ;
        p.y[p.sp] = y-1 ;
        p.sp++ ; }
      cp = getpixel(x,y-1) ;
      while ( ( cp != lim )
              && ( x >= xi ) ) {
        x-- ;
        cp = getpixel(x,y-1) ; } } }
  free(p.x) ;
  free(p.y) ;
}
si la map n'est pas trop grosse tu peux utiliser une fonction récursive
ça fait la même chose que le code ci dessus , sauf que tu es limité par la capacité de la pile !

Code : Tout sélectionner

void remplissage(int x,int y,
                 int c,int lim) {
  cp = getpixel(x,y) ;
  if ( ( cp != lim ) && ( cp != c ) ) {
    putpixel(x,y,c) ;
    remplissage(x,y+1,c,lim) ;
    remplissage(x,y-1,c,lim) ;
    remplissage(x+1,y,c,lim) ;
    remplissage(x-1,y,c,lim) ; }
  }
Gratteur
Messages : 147
Inscription : ven. 22/avr./2005 23:02

Message par Gratteur »

C'est très intéressant tout ça, mais finalement ça ne va pas beaucoup m'aider à placer mes waypoints de secours (les cartes pouvant faire jusqu'a 200*200 cases de 32 pixels ça risque d'être un peu trop lent).
En tout cas merci beaucoup Comtois pour ce petit morceau de code en java et pour le reste, j'admire ta disponibilité envers les nouveaux venus (et les anciens) et tes conseils me font vraiment très plaisir.

D'ailleurs (je m'adresse à tous ceux qui ont répondu à ce topic et aux autres qui ont pris la peine de le lire) votre accueil est le plus chaleureux que j'ai reçus jusqu'a présent sur un forum.
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Message par cederavic »

PureBasic n'est vraiment pas un langage comme les autres, et sa communoté encor moin :)
J'ai moi aussi un projet dans le meme genre, et pour le déplacement des personnages, j'ai fait une structure Entity avec les points de depart / arrivée, et tout ce passe dans des Thread. J'ai une fonction EntityGoTo(*Entity.EntityStruct, *Way.WayStruct) qui creer en fait un thread pour l'entité, donc ça me permet de déplacer plusieur personnages en même temps sans avoir des tonnes de variables globales...
Si ça peut te donner une voie... 8)
Gratteur
Messages : 147
Inscription : ven. 22/avr./2005 23:02

Message par Gratteur »

(Je reconnais que cette communauté est superbe et très active !)

Ton idée est intéressantes, mais pour le moment je préfère continuer les tests. De toute façon inclure le pathfinder n'est pas très urgent, il reste beaucoup de travail a fournir sur les autres parties du programme.
On dira que le pathfinder est mon fil rouge ;p

Bon, après quelques petites interruptions personnelles (on ne devient pas parrain tous les jours) et partielles en tout genre, le codage studieux va pouvoir reprendre.

Bon après midi !
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

cederavic a écrit :PureBasic n'est vraiment pas un langage comme les autres, et sa communoté encor moin :)
J'ai moi aussi un projet dans le meme genre, et pour le déplacement des personnages, j'ai fait une structure Entity avec les points de depart / arrivée, et tout ce passe dans des Thread. J'ai une fonction EntityGoTo(*Entity.EntityStruct, *Way.WayStruct) qui creer en fait un thread pour l'entité, donc ça me permet de déplacer plusieur personnages en même temps sans avoir des tonnes de variables globales...
Si ça peut te donner une voie... 8)
ah bah ca c'est sûr, avec DB je galérai ^^

Dri
Gratteur
Messages : 147
Inscription : ven. 22/avr./2005 23:02

Message par Gratteur »

Voici une petite (grande) image de l'éditeur, histoire de montrer au monde que la programmation avance bien (pas de hentail cette fois ;p) :

Image
Dernière modification par Gratteur le sam. 14/mai/2005 19:09, modifié 1 fois.
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

c'est beau :)
bernard13
Messages : 1221
Inscription : mer. 05/janv./2005 21:30

Message par bernard13 »

c'est cool que tu fais

Bravo continue
j'ai hate de voir la version finale
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

J'avais fais un éditeur de Map 2D, si ça t'intéresse :
http://luchezl.free.fr/Programmation/3D ... pMaker.rar

Dailleurs le RPG que je développé depuis l'été dernier a été arrété. Il sera sans doute remplacé par un autre jeu 2D en pureBasic cette fois-ci (y'en a un ki va etre content, pas vrai Dri :D )
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Fred
Site Admin
Messages : 2808
Inscription : mer. 21/janv./2004 11:03

Message par Fred »

C'est plutot prometteur !
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

lionel_om a écrit :J'avais fais un éditeur de Map 2D, si ça t'intéresse :
http://luchezl.free.fr/Programmation/3D ... pMaker.rar

Dailleurs le RPG que je développé depuis l'été dernier a été arrété. Il sera sans doute remplacé par un autre jeu 2D en pureBasic cette fois-ci (y'en a un ki va etre content, pas vrai Dri :D )
^^

Dri
Gratteur
Messages : 147
Inscription : ven. 22/avr./2005 23:02

Message par Gratteur »

Vos posts me motivent énormément, c’est peut-être bête car depuis que j’ai commencé ce projet je boss surtout pour me faire plaisir et réaliser mon rêve de créer un rpg pour adulte sympas et original en utilisant le scénario que je dédiais a mon premier livre. Mais depuis peu, en voyant les réactions enthousiastes sur divers forums, j’ai de plus en plus envie de faire plaisir aux joueurs en prêtant attention a tous les petits détails (ce qui a bien ralongé la durée de développement...).

Quelques informations :
LDE sortira par chapitre de 2 à 5 heures minimum, le premier cycle est composé de 6 chapitres, la sortie du premier chapitre est prévue dans 12 à 15 mois, l’intervalle entre chaque chapitre sera de 3 à 6 mois.
L’éditeur de carte est achevé à 70%.
Répondre