Ton idée était la bonne

ça marche tres bien voici un prog vite fait pour simuler la fuite.
Imaginons un lapin dans un champs avec plein de chasseur (Gniark ! Gniark !)
Le lapin c'est le point Rouge ! Les chasseurs les point Vert, et le point Bleu le chasseur selectioné
Les commandes :
[Espace] Le lapin avance d'une case
[Clic Droit] tu retire un obstacle
[Clic Gauche] tu rajoute un obstacle
[TAB] on change de chasseur
[UP] fait monter le chasseur selectionné
[DOWN] fait descendre le chasseur selectionné
[LEFT] le Chasseur va a gauche
[RIGHT] le chasseur va a droite
[ESC] pour Quitter !!
Code : Tout sélectionner
InitSprite()
InitMouse()
InitKeyboard()
#MW=20
#Taille=25
Global Dim Map(#MW,#MW)
Structure p
x.l
y.l
point.f
EndStructure
Global Dim Perso.p(10) ;Les être vivant s
Global Dim Cases.p(4) ;Les cases a testé au tout du lapin
Global Nbp.l ;
Nbp=5 ; Nombre d'être vivant
;Le N°1 c'est le lapin et tout les autres les chasseurs
Perso(1)\x=#MW>>1 ; Lapin au Milieu du champ
Perso(1)\y=#MW>>1
;Je place les chasseurs
For t=2 To Nbp
Perso(t)\x=Random(#MW-2)+1
Perso(t)\y=Random(#MW-2)+1
Next
Pselect=2 ;Chasseur selectionné par defaut
Nbpaff=Nbp ;Nombre de perso affiché (pour faire des test avec + ou - de chasseur
;Si on arrive a ouvrir la fenêtre (sinon c'est pas la peine de continuer..:P)
If OpenWindow(0, 0, 0, 800, 600, "La Chasse au Lapin", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
OpenWindowedScreen(WindowID(0), 0, 0,800, 600, 0, 0, 0)
Repeat
WEvent = WaitWindowEvent() ; Un Evenement ?!
If WEvent = #PB_Event_CloseWindow
Quit = #True
EndIf
ExamineMouse()
ExamineKeyboard()
;Chouette on va faire du dessin
StartDrawing(ScreenOutput())
;On dessine le cadrillage
For t=0 To #MW+1
Line(0,t*#Taille,(#MW+1)*#Taille,0,RGB(255,255,255))
Line(t*#Taille,0,0,(#MW+1)*#Taille,RGB(255,255,255))
Next
;On dessine les obstacle si il y en a
For zx=0 To #MW
For zy=0 To #MW
If map(zx,zy)=1
Box(zx*#Taille+1,zy*#Taille+1,#Taille-2,#Taille-2,RGB(255,255,255))
EndIf
Next zy
Next zx
;Un petit mode pour que le fond du texte sois transparent
DrawingMode(#PB_2DDrawing_Transparent)
;Je dessine tout les perso a l'ecran
For t=1 To Nbpaff;Nbp
If t=1:col=#Red:Else:col=#Green:EndIf
If t=Pselect:col=#Blue:EndIf
Circle(Perso(t)\x*#Taille+#Taille>>1,Perso(t)\y*#Taille+#Taille>>1,#Taille>>1,col)
Next
;Allez on test les cases au tour du lapin
For pf=1 To 4
Select pf
Case 1 ; La case a droite
Cases(pf)\x=Perso(1)\x+1
Cases(pf)\y=Perso(1)\y
Cases(pf)\point=0
Case 2 ; La case en bas
Cases(pf)\x=Perso(1)\x
Cases(pf)\y=Perso(1)\y+1
Cases(pf)\point=0
Case 3 ; La case a gauche
Cases(pf)\x=Perso(1)\x-1
Cases(pf)\y=Perso(1)\y
Cases(pf)\point=0
Case 4 ; la case en haut
Cases(pf)\x=Perso(1)\x
Cases(pf)\y=Perso(1)\y-1
Cases(pf)\point=0
EndSelect
;Un petit test pour être sur que le lapin ne sort pas du champ ..
If Cases(pf)\x<0 Or Cases(pf)\x>#MW Or Cases(pf)\y<0 Or Cases(pf)\y>#MW
Cases(pf)\x=Perso(1)\x
Cases(pf)\y=Perso(1)\y
EndIf
;Si il n'y a pas d'obstacle alors on calcul le coef de danger
If Map(Cases(pf)\x,Cases(pf)\y)=0
;On trace une case grise pour dire que cette case est testé
Box(Cases(pf)\x*#Taille+1,Cases(pf)\y*#Taille+1,#Taille-2,#Taille-2,RGB(60,60,60))
;On trouve le gars le plus loin
Vx=0 ;
Vy=0 ;
;On additionne le danger que represente chaque chasseur
For p=2 To Nbpaff; Nbp
Vx=(Cases(pf)\x-Perso(p)\x)
Vy=(Cases(pf)\y-Perso(p)\y)
TV=Sqr(Vx*Vx+Vy*Vy)
If TV<Cases(pf)\point Or Cases(pf)\point=0
Cases(pf)\point=TV
EndIf
Next
;On affiche le coef de la case
DrawText(Cases(pf)\x*#Taille+5,Cases(pf)\y*#Taille+5,Str(Cases(pf)\point),RGB(255,255,255))
EndIf
Next pf
;Le lapin passe a la case suivante
If KeyboardPushed(#PB_Key_Space) And ElapsedMilliseconds()>waitkey
;On selectionne la case qui a le Coef le moins elevé
Point=-1
n=0
For pf=1 To 4
tp=Cases(pf)\point
If tp>Point Or Point=-1
Point=tp
n=pf
ElseIf tp=Point And pf=Memn ;Random(1)=1
n=pf
EndIf
Next
Memn=n
;si on a bien une case alors le lapin vas sur cette case
If n>0
Perso(1)\x=Cases(n)\x
Perso(1)\y=Cases(n)\y
EndIf
waitkey= ElapsedMilliseconds()+500
EndIf
;Pour diminuer le nombre de chasseur
If KeyboardPushed(#PB_Key_Subtract) And ElapsedMilliseconds()>waitkey
Nbpaff-1
If Nbpaff<2:Nbpaff=2:EndIf
waitkey= ElapsedMilliseconds()+500
EndIf
;POur augmenter le nombre de chasseur
If KeyboardPushed(#PB_Key_Add) And ElapsedMilliseconds()>waitkey
Nbpaff+1
If Nbpaff>Nbp:Nbpaff=Nbp:EndIf
waitkey= ElapsedMilliseconds()+500
EndIf
;POur selectionner le chasseur suivant
If KeyboardPushed(#PB_Key_Tab) And ElapsedMilliseconds()>waitkey
Pselect+1
If Pselect>Nbp:Pselect=2:EndIf
waitkey= ElapsedMilliseconds()+500
EndIf
;Le chasseur selectioné monte
If KeyboardPushed(#PB_Key_Up) And ElapsedMilliseconds()>waitkey
Perso(Pselect)\y-1
waitkey= ElapsedMilliseconds()+500
EndIf
;Le chasseur selectionné descent
If KeyboardPushed(#PB_Key_Down) And ElapsedMilliseconds()>waitkey
Perso(Pselect)\y+1
waitkey= ElapsedMilliseconds()+500
EndIf
;Le chasseur selectionné va a gauche
If KeyboardPushed(#PB_Key_Left) And ElapsedMilliseconds()>waitkey
Perso(Pselect)\x-1
waitkey= ElapsedMilliseconds()+500
EndIf
;Le chasseur va a droite
If KeyboardPushed(#PB_Key_Right) And ElapsedMilliseconds()>waitkey
Perso(Pselect)\x+1
waitkey= ElapsedMilliseconds()+500
EndIf
;On efface un obstacle
If MouseButton(#PB_MouseButton_Right) And MouseX()<#MW*#Taille And MouseY()<#MW*#Taille
Map(Int(MouseX()/#Taille),Int(MouseY()/#Taille))=0
EndIf
;On rajoute un obstacle
If MouseButton(#PB_MouseButton_Left) And MouseX()<#MW*#Taille And MouseY()<#MW*#Taille
Map(Int(MouseX()/#Taille),Int(MouseY()/#Taille))=1
EndIf
;Un petit curseur pour la souris ... :P
Line(MouseX(),MouseY(),16,0,#Red)
Line(MouseX(),MouseY(),0,16,#Red)
;On affiche le text
DrawText(#MW*#Taille+#Taille,20,"[Espace] Le lapin avance d'une case",RGB(255,200,200))
DrawText(#MW*#Taille+#Taille,40,"[Clic Droit] tu retire un obstacle",RGB(255,200,200))
DrawText(#MW*#Taille+#Taille,60,"[Clic Gauche] tu rajoute un obstacle",RGB(255,200,200))
DrawText(#MW*#Taille+#Taille,80,"[TAB] on change de chasseur",RGB(255,200,200))
DrawText(#MW*#Taille+#Taille,100,"[UP] fait monter le chasseur selectionné",RGB(255,200,200))
DrawText(#MW*#Taille+#Taille,120,"[DOWN] fait descendre le chasseur selectionné",RGB(255,200,200))
DrawText(#MW*#Taille+#Taille,140,"[LEFT] le Chasseur va a gauche",RGB(255,200,200))
DrawText(#MW*#Taille+#Taille,160,"[RIGHT] le chasseur va a droite",RGB(255,200,200))
DrawText(#MW*#Taille+#Taille,180,"[ESC] pour Quitter !!",RGB(255,200,200))
StopDrawing() ;On a finit de dessiner
FlipBuffers() ;On affiche l'image
ClearScreen(0) ; Et on efface le buffer pour travailler sur une page toute prore :oP
Delay(10);On laisse un peu de temps libre pour les autres
Until Quit = #True Or KeyboardPushed(#PB_Key_Escape)
;On quitte alors on fait ça bien on verme la fenêtre
CloseWindow(0)
EndIf
Le code peut être améliorer et optimisé, mais ce n'était pas mon but premier. J'ai essayé de commenté un maximum pour que tout le monde comprenne !
Voilà ! Merci a ceux qui m'on lu et merci a ATHOW pour cette idée que j'aurais du avoir avant lui ! hi hi !
