OpenConsole()
RandomSeed(ElapsedMilliseconds())
;-Initialisation & creation structure
;{;
;10 neu code de conduite:1 =normal ;vert (3,252,85)
;4 med code de conduite:2 =docteur ;jaune (252,249,3)
;2 psy code conduite:3 =psy ;bleu (0,255,255)
;32 bad code conduite:4 =mechant ;orange (255,100,0)
;2 kil code de conduite:5 =tueur ;rouge (255,0,0)
InitSprite()
OpenScreen(1024, 768, 32, "squelette ecran")
InitKeyboard()
InitMouse()
Structure ent
xe.w
ye.w
nom.s
cc.w ;code de conduite
vi.w ;nb vie
cr.w ; r couleur RGB
cg.w ; g "
cb.w ; b "
EndStructure
nbent=50
Dim ent.ent(nbent)
;}
;-charge les données des entitées:
;{
dnb=1:fnb=10:cd=1:rr=3:rg=252:rb=85:n$="neu"
Gosub charge ;pour les 10 neutres
dnb=11:fnb=14:cd=2:rr=255:rg=249:rb=3:n$="doc"
Gosub charge ;pour les 04 docteurs
dnb=15:fnb=16:cd=3:rr=0:rg=255:rb=255:n$="psy"
Gosub charge ;pour les 02 psy
dnb=17:fnb=48:cd=4:rr=255:rg=100:rb=0:n$="bad"
Gosub charge ;pour les 32 mauvais
dnb=49:fnb=50:cd=5:rr=255:rg=0:rb=0:n$="kill"
Gosub charge ;pour les 2 tueurs
;}
;-creation des entitées
;{
For i=1 To nbent
CreateSprite( i,32,32) ; on cree un sprite (une balle)
StartDrawing(SpriteOutput(i) ) ; on va dessiner dans le sprite
Circle(16, 16, 16, RGB(ent(i)\cr,ent(i)\cg,ent(i)\cb)) ; on dessine un rond dedans(dans le sprite)
DrawText(4,8,ent(i)\nom,RGB(0,0,125),RGB(ent(i)\cr,ent(i)\cg,ent(i)\cb)) ; on ecrit l'identité sur le sprite !
StopDrawing()
Next i
;}
;-boucle principale
Repeat
RandomSeed(ElapsedMilliseconds())
ExamineKeyboard()
ExamineMouse()
For i=1 To nbent
DisplayTransparentSprite(i,ent(i)\xe,ent(i)\ye) ; affichage des entitées
Next i
;-determine la direction
;{
For i=1 To nbent
;If ent(i)\vi=0 : Goto cont ; si il est crevé , lache l'affaire...
d=Random(7)+1; choix de la direction
If d=1 And ent(i)\ye>0: ent(i)\ye=ent(i)\ye-1
EndIf ; nord
If d=2 And ent(i)\ye>0 And ent(i)\xe<736 : ent(i)\ye=ent(i)\ye-1 : ent(i)\xe=ent(i)\xe+1
EndIf ; nord/est
If d=3 And ent(i)\xe<736: ent(i)\xe=ent(i)\xe+1
EndIf ; est
If d=4 And ent(i)\ye>32 And ent(i)\xe<737 : ent(i)\ye=ent(i)\ye-1 : ent(i)\xe=ent(i)\xe+1
EndIf ; sud/est
If d=5 And ent(i)\ye<736: ent(i)\ye=ent(i)\ye+1
EndIf ; sud
If d=6 And ent(i)\ye<736 And ent(i)\xe>0 : ent(i)\ye=ent(i)\ye+1 : ent(i)\xe=ent(i)\xe-1
EndIf ; sud/ouest
If d=7 And ent(i)\xe>0: ent(i)\xe=ent(i)\xe-1
EndIf ; ouest
If d=8 And ent(i)\ye>0 And ent(i)\xe>0 : ent(i)\ye=ent(i)\ye-1 : ent(i)\xe=ent(i)\xe-1
EndIf ; nord/ouest
cont:
Next i
;}
FlipBuffers() ; affiche le resultat a l'ecran !
ClearScreen(RGB(0, 0,0)) ; nettoie l'ecran apres affichage
Until KeyboardPushed(#PB_Key_Escape) Or MouseButton(2)
End
;**************************************************************************
;-sp: chargement des données
;{
charge:
For i=dnb To fnb
ent(i)\vi=10
x=Random(992) : y=Random(736)
ent(i)\xe=x : ent(i)\ye=y
ent(i)\nom=n$
ent(i)\cc=cd
ent(i)\cr=rr:ent(i)\cg=rg:ent(i)\cb=rb
Next
Return
;}
If ent(i)\xe<0
ent(i)\xe=1024
EndIf
If ent(i)\xe>1024
ent(i)\xe=0
EndIf
If ent(i)\ye<0
ent(i)\ye=768
EndIf
If ent(i)\ye>768
ent(i)\ye=0
EndIf
Méfiance... S'il s'agit de variables ayant un rapport avec l'affichage (vu les parametres, je pense que oui), remplace les 768 par des 767 et les 1024 par des 1023
If ent(i)\xe<0
ent(i)\xe=1024
EndIf
If ent(i)\xe>1024
ent(i)\xe=0
EndIf
If ent(i)\ye<0
ent(i)\ye=768
EndIf
If ent(i)\ye>768
ent(i)\ye=0
EndIf
Méfiance... S'il s'agit de variables ayant un rapport avec l'affichage (vu les parametres, je pense que oui), remplace les 768 par des 767 et les 1024 par des 1023
sert a rien de remplacer !!
parce qu'il s'agit de coordonnées pour les Sprites , et les Sprites on peut les envoyer en dehors de l'écran !!
Heureusement d'ailleurs !! sinon adieux les Scrolling
par contre s'il avait s'agit de faire des PLOT(), ou POINT() là SPH avait raison
j'avais compris ça monsieur Dobro, disons que je me suis empressé d'executer et devenir repondre ici avant d'avoir vu toutes tes modifs qui optimisent le codage. le probleme du "sortie d'ecran n'est plus d'actualité..
j'y retourne apres avoir fait une pause en me consacrant à la colision
ah! g diminuer de moitié le temps de changement de direction; tu ne m'en voudras pas