
une fourmiliere (enfin le debut)
Clair que Werber ça casse pas des barres niveau phrasé mais la trilogie des Fourmis (et les thanatonautes), je les ai trouvé vraiment captivants. Même si il ne fait que reprendre des infos ici et là. 

~~~~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
Bon c'est po trop grave, je lis beaucoup et ça enrichira ma culture perso.
Bon, c'est toujours du temps en moins passé sur PureBasic, mais ma douce aime beaucoup quand je lis à coté d'elle le soir au lit au lieu d'être sur l'ordi !!! Faut parfois faire des concessions !!! Ah Yeah !
Bon, c'est toujours du temps en moins passé sur PureBasic, mais ma douce aime beaucoup quand je lis à coté d'elle le soir au lit au lieu d'être sur l'ordi !!! Faut parfois faire des concessions !!! Ah Yeah !
Only PureBasic makes it possible
tiens ça me rappelle quelqu'un.. heuu mais c'est moiCool Dji a écrit :Bon c'est po trop grave, je lis beaucoup et ça enrichira ma culture perso.
Bon, c'est toujours du temps en moins passé sur PureBasic, mais ma douce aime beaucoup quand je lis à coté d'elle le soir au lit au lieu d'être sur l'ordi !!! Faut parfois faire des concessions !!! Ah Yeah !

~~~~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
-
- Messages : 2194
- Inscription : jeu. 27/janv./2005 19:07
kerkael: finalement non. tant qu'elle dépose les pheromones, c pas toutes les autres qui chg de couleur en croisant...
tu dis: "Ce n'est que l'accumulation de phéromones qui indique aux fourmis qu'une piste est très fréquentée, donc pleine de promesse". Par la suite j'en tiendrai compte. merci
au final l"eclaireur" comme tu dis ira ramener la bouffe aussi..
Dobro: si j'en suis là (mm si je suis pas tres loin), c bq grace à toi...
je vais "jouer" avec ce prg dés que j'aurrai un moment
au 1er coup d'oeil, je ne connais pas "EcranX = GetSystemMetrics_(#SM_CXSCREEN)"
Cool Dji: merci, mais attend pas trop vite ma "nouvelle version", g une autre vie aussi, puis demande a dobro comment je comprend vite quand on m'explique longtemps
Ar-S: non hélas , j'ai pas ouvert de boukin sur les fourmis, mais reçu des brides d'info et j'ai pensé qu'elles émettaient des phéro de tt nature (danger, bouffe...) et que pour cette derniere elles s'estomper apres qu'il n'y aurrait plus rien à rapporter.
En tout cas , à tous ceux qui portent un interet, je vais bosser dur la semaine prochaine, car en prog. g jamais renoncer et mon but était de créer une seconde colonie à base d'affrontement et c pour ça que g mis la barre haute (50 fourmis) pour observer si il y a ralentissement...
la je vois que je vais pouvoir diviser en deux le clan. ou au moin faire 30/30
quand au moin, les fourmis detecteront tous les phéromones, j'éclaircirais ma routine au maximum...
tu dis: "Ce n'est que l'accumulation de phéromones qui indique aux fourmis qu'une piste est très fréquentée, donc pleine de promesse". Par la suite j'en tiendrai compte. merci
au final l"eclaireur" comme tu dis ira ramener la bouffe aussi..
Dobro: si j'en suis là (mm si je suis pas tres loin), c bq grace à toi...
je vais "jouer" avec ce prg dés que j'aurrai un moment
au 1er coup d'oeil, je ne connais pas "EcranX = GetSystemMetrics_(#SM_CXSCREEN)"
Cool Dji: merci, mais attend pas trop vite ma "nouvelle version", g une autre vie aussi, puis demande a dobro comment je comprend vite quand on m'explique longtemps
Ar-S: non hélas , j'ai pas ouvert de boukin sur les fourmis, mais reçu des brides d'info et j'ai pensé qu'elles émettaient des phéro de tt nature (danger, bouffe...) et que pour cette derniere elles s'estomper apres qu'il n'y aurrait plus rien à rapporter.
En tout cas , à tous ceux qui portent un interet, je vais bosser dur la semaine prochaine, car en prog. g jamais renoncer et mon but était de créer une seconde colonie à base d'affrontement et c pour ça que g mis la barre haute (50 fourmis) pour observer si il y a ralentissement...
la je vois que je vais pouvoir diviser en deux le clan. ou au moin faire 30/30
quand au moin, les fourmis detecteront tous les phéromones, j'éclaircirais ma routine au maximum...
Pour la détection de la piste des phéromones, tu peux "tricher" en créant un tableau de la taille de l'écran, contenant la ou les valeurs représentatives des phéromones (plusieurs pistes superposées seraient ainsi possibles, l'évaporation et les directions aussi). Ce serait plus rapide que de tester l'écran.
voilà, comme promis pour ceux qui me soutienne, je recommence presque tout à commencer par une petite translation sur le prg de dobro concernant 1 seule sprite et bq d'ordre et de clarté.
Ici juste le déplacement des fourmis dans une boite...
djes :
la question c comment un sprite rencontre kkchose sur l'ecran sans utiliser spritepixelcolllision étant donné qu'il y a trop de points (pheromones) a moins que que je crée un sprite oblique et un autre droit (trait jaune representant les phero) et que j'utilise l'instruction de collission...mais je crois que pour reduire, je vais, tous les 16 pas creer une phéromone sprite....
les pheromones sont préparées dans la structure au début (ancien prg) se sont des sprites aussi, kan une fourmi a trouvé la bouffe elle "pompe" les coordonnées pour se deplacer et ramener la bouffe (bien surs , c a venir). en fait kan tu vois une fourmis poser les pheromones, elle transfere ses coord. dans la structure...(dsl je m'exprime tres mal)
bon, je vais me coucher
Ici juste le déplacement des fourmis dans une boite...
djes :
j'y ai pensé, mais es ce que ça ne me fait pas comparer à chaque déplacement tout le contenu du tbx à la position de chaque fourmi ?Pour la détection de la piste des phéromones, tu peux "tricher" en créant un tableau de la taille de l'écran, contenant la ou les valeurs représentatives des phéromones
la question c comment un sprite rencontre kkchose sur l'ecran sans utiliser spritepixelcolllision étant donné qu'il y a trop de points (pheromones) a moins que que je crée un sprite oblique et un autre droit (trait jaune representant les phero) et que j'utilise l'instruction de collission...mais je crois que pour reduire, je vais, tous les 16 pas creer une phéromone sprite....
les pheromones sont préparées dans la structure au début (ancien prg) se sont des sprites aussi, kan une fourmi a trouvé la bouffe elle "pompe" les coordonnées pour se deplacer et ramener la bouffe (bien surs , c a venir). en fait kan tu vois une fourmis poser les pheromones, elle transfere ses coord. dans la structure...(dsl je m'exprime tres mal)
bon, je vais me coucher
Code : Tout sélectionner
; @ Chikun version 0.001
Structure sprite
xe.l
ye.l
direction.b
sensx.b
sensy.b
EndStructure
Enumeration
#sprite_fond
#sprite
EndEnumeration
nbr_sprite=50
Dim sprite.sprite(nbr_sprite)
; Test
EcranX = GetSystemMetrics_(#SM_CXSCREEN)
EcranY = GetSystemMetrics_(#SM_CYSCREEN)
InitSprite(): InitKeyboard()
OpenScreen (EcranX,EcranY,32,"Test")
; *********** ce sprite sert a effacer le fond ! ****************************
CreateSprite(#sprite_fond,EcranX,EcranY)
StartDrawing(SpriteOutput(#sprite_fond))
Box(0,0,EcranX,EcranY,RGB(0,0,0))
StopDrawing()
; ***************************************************************************
; *********** dessine le sprite *****************
CreateSprite(#sprite, 16, 16) ; c'est la meme image qui est employé
; dessine le sprite
StartDrawing(SpriteOutput(#sprite))
Circle(8,8,8, RGB(65,32,14))
StopDrawing()
; je les place au départ (plus tard dans la fourmilière)
For i=1 To nbr_sprite
sprite(i)\xe=300 : sprite(i)\ye=200
Next i
Repeat
;{ determine la direction
For i=1 To nbr_sprite
temp=Random(50)
If temp=25
sprite(i)\direction=Random(7)+1; choix de la direction
EndIf
; nord:
If sprite(i)\direction=1
sprite(i)\sensx=0
sprite(i)\sensy=-1
EndIf
; nord/est:
If sprite(i)\direction=2
sprite(i)\sensx=1
sprite(i)\sensy=-1
EndIf
; est:
If sprite(i)\direction=3
sprite(i)\sensx=1
sprite(i)\sensy=0
EndIf
; sud/est:
If sprite(i)\direction=4
sprite(i)\sensx=1
sprite(i)\sensy=1
EndIf
; sud:
If sprite(i)\direction=5
sprite(i)\sensx=0
sprite(i)\sensy=1
EndIf
; sud/ouest:
If sprite(i)\direction=6
sprite(i)\sensx=-1
sprite(i)\sensy=1
EndIf
; ouest:
If sprite(i)\direction=7
sprite(i)\sensx=-1
sprite(i)\sensy=0
EndIf
; nord/ouest:
If sprite(i)\direction=8
sprite(i)\sensx=-1
sprite(i)\sensy=-1
EndIf
; sortie d'écran (maintenir dans "une boite")
If sprite(i)\xe<0
sprite(i)\xe=0
EndIf
If sprite(i)\xe>EcranX-20;1024
sprite(i)\xe=EcranX-20 ;1024
EndIf
If sprite(i)\ye<0
sprite(i)\ye=0
EndIf
If sprite(i)\ye>EcranY-18 ;768
sprite(i)\ye=EcranY-18 ;768
EndIf
;}
; une fois que le sens est aquis: déplacement
sprite(i)\xe=sprite(i)\xe+sprite(i)\sensx
sprite(i)\ye=sprite(i)\ye+sprite(i)\sensy
DisplayTransparentSprite(#sprite,sprite(i)\xe,sprite(i)\ye) ; toujour la meme image qui est affiché
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Escape)
End
EndIf
Next i
FlipBuffers()
DisplaySprite(#sprite_fond,0,0)
ForEver
Pourquoi tu comparerais tout le contenu du tableau, plutôt qu'uniquement les données à l'endroit où se trouve la fourmi, voire quelques cases autour? Quant à "poser" un sprite tous les 16 pixels, tu peux faire un tableau plus petit que l'écran et accéder aux coordonnées en divisant les x et les y.
Par exemple:
Un tableau sera toujours plus rapide que d'accéder à l'écran, sauf si tu veux faire des formes complexes.
Par exemple:
Code : Tout sélectionner
pheromones(sprite(i)\x / 16, sprite(i)\y / 16) = #True
djes
[quote]
dsl je comprend pas ...c un tbx appelé "pheromones" et on enregistre une seule valeur "#true" à partir de coordonnées x,y !?
sachant x et y quelle valeur prend #true ?
tu veux bien développer un peu stp...

Code : Tout sélectionner
pheromones(sprite(i)\x / 16, sprite(i)\y / 16) = #True
sachant x et y quelle valeur prend #true ?
tu veux bien développer un peu stp...
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
j'ai un petit peu nettoyé le code pour t'aider
un petit Select pour les directions
et j'ai sortie la gestion du clavier de la boucle For Next
Bon courage
un petit Select pour les directions
et j'ai sortie la gestion du clavier de la boucle For Next
Bon courage
Code : Tout sélectionner
; @ Chikun version 0.001
Structure sprite
xe.l
ye.l
direction.b
sensx.b
sensy.b
EndStructure
Enumeration
#sprite_fond
#sprite
EndEnumeration
nbr_sprite = 50
Dim sprite.sprite(nbr_sprite)
; Test
EcranX = GetSystemMetrics_(#SM_CXSCREEN)
EcranY = GetSystemMetrics_(#SM_CYSCREEN)
InitSprite() : InitKeyboard()
OpenScreen (EcranX, EcranY, 32, "Test")
; *********** ce sprite sert a effacer le fond ! ****************************
CreateSprite(#sprite_fond, EcranX, EcranY)
StartDrawing(SpriteOutput(#sprite_fond))
Box(0, 0, EcranX, EcranY, RGB(0, 0, 0))
StopDrawing()
; ***************************************************************************
; *********** dessine le sprite *****************
CreateSprite(#sprite, 16, 16) ; c'est la meme image qui est employé
; dessine le sprite
StartDrawing(SpriteOutput(#sprite))
Circle(8, 8, 8, RGB(65, 32, 14))
StopDrawing()
; je les place au départ (plus tard dans la fourmilière)
For i = 1 To nbr_sprite
sprite(i)\xe = 300 : sprite(i)\ye = 200
Next
Repeat
;{ determine la direction
For i = 1 To nbr_sprite
If Random(50) = 0
sprite(i)\direction = Random(7) + 1
Select sprite(i)\direction
Case 1
; nord:
sprite(i)\sensx = 0
sprite(i)\sensy = -1
Case 2
; nord/est:
sprite(i)\sensx = 1
sprite(i)\sensy = -1
Case 3
; est:
sprite(i)\sensx = 1
sprite(i)\sensy = 0
Case 4
; sud/est:
sprite(i)\sensx = 1
sprite(i)\sensy = 1
Case 5
; sud:
sprite(i)\sensx = 0
sprite(i)\sensy = 1
Case 6
; sud/ouest:
sprite(i)\sensx = -1
sprite(i)\sensy = 1
Case 7
; ouest:
sprite(i)\sensx = -1
sprite(i)\sensy = 0
Case 8
; nord/ouest:
sprite(i)\sensx = -1
sprite(i)\sensy = -1
EndSelect
EndIf
; sortie d'écran (maintenir dans "une boite")
If sprite(i)\xe < 0
sprite(i)\xe = 0
EndIf
If sprite(i)\xe > EcranX - 20 ; 1024
sprite(i)\xe = EcranX - 20 ; 1024
EndIf
If sprite(i)\ye < 0
sprite(i)\ye = 0
EndIf
If sprite(i)\ye > EcranY - 18 ; 768
sprite(i)\ye = EcranY - 18 ; 768
EndIf
;}
; une fois que le sens est aquis: déplacement
sprite(i)\xe = sprite(i)\xe + sprite(i)\sensx
sprite(i)\ye = sprite(i)\ye + sprite(i)\sensy
DisplayTransparentSprite(#sprite, sprite(i)\xe, sprite(i)\ye) ; toujour la meme image qui est affiché
Next
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Escape)
End
EndIf
FlipBuffers()
DisplaySprite(#sprite_fond, 0, 0)
ForEver
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Hum! Ok, je vois.
pheromones() serait un tableau que tu créerais en début de programme. Par exemple, pour créer un tableau contenant des entiers, pour pouvoir poser une phéromones tous les 16 pixels :
#True est une constante. Admettons qu'au début de ton programme (ou à chaque boucle), tu effaces ton tableau, chaque case contiendra 0 (=#False). Pour poser une phéromone, tu assignes #True (ou n'importe quelle autre valeur) à la case de ton tableau correspondant à la position de la fourmi. Mais pour avoir la position dans le tableau, je divise les coordonnées par 16.
C'est un exemple bien sûr! Tu peux avoir un tableau de la même taille que l'écran! Mais avoir moins de cases améliorera le résultat de la collision, tu risqueras moins de passer "à travers" la trajectoire d'une autre fourmi.
pheromones() serait un tableau que tu créerais en début de programme. Par exemple, pour créer un tableau contenant des entiers, pour pouvoir poser une phéromones tous les 16 pixels :
Code : Tout sélectionner
dim pheromones.l(EcranX / 16, EcranY / 16)
C'est un exemple bien sûr! Tu peux avoir un tableau de la même taille que l'écran! Mais avoir moins de cases améliorera le résultat de la collision, tu risqueras moins de passer "à travers" la trajectoire d'une autre fourmi.
Excuse, c'est un pote qui faisait souvent ça, j'ai repris son expression!chikun a écrit :Le Soldat Inconnu:merci pour m'avoir apris "select"
et j'ai sortie la gestion du clavier de la boucle For Nextbien vue!
djes :hum! ok je voishum! ok je vois....

Sinon, j'avais marqué:
Ce qui n'est pas DU TOUT la même chose.Hum! Ok, je vois.
