Code : Tout sélectionner
;Comtois 03/12/04
;Cercle par l'algorithme de Bresenham
;-Declare
Declare Erreur(Message$)
;-Initialisation
#ScreenWidth = 800 : #ScreenHeight = 600 : #ScreenDepth = 32
If InitEngine3D() = 0
Erreur("Impossible d'initialiser la 3D , vérifiez la présence de engine3D.dll")
ElseIf InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse()=0
Erreur("Impossible d'initialiser DirectX 7 Ou plus")
ElseIf OpenScreen( #ScreenWidth , #ScreenHeight , #ScreenDepth , "" ) = 0
Erreur("Impossible d'ouvrir l'écran ")
EndIf
;-Procedures
Procedure Erreur(Message$)
MessageRequester( "Erreur" , Message$ , 0 )
End
EndProcedure
Procedure cercle(x,y,R,c)
;Attention il n"y a pas de contrôle de débordement
xx = 0
yy = R
d = 1 - R
Plot(x+xx,y+yy,c)
Plot(x-xx,y+yy,c)
Plot(x+xx,y-yy,c)
Plot(x-xx,y-yy,c)
Plot(x+yy,y+xx,c)
Plot(x-yy,y+xx,c)
Plot(x+yy,y-xx,c)
Plot(x-yy,y-xx,c)
While yy > xx
If d < 0
d + (2 * xx + 3)
Else
d + (2 * (xx - yy) + 5)
yy - 1
EndIf
xx + 1
Plot(x+yy,y+xx,c)
Plot(x-yy,y+xx,c)
Plot(x+yy,y-xx,c)
Plot(x-yy,y-xx,c)
Plot(x+xx,y+yy,c)
Plot(x+xx,y-yy,c)
Plot(x-xx,y+yy,c)
Plot(x-xx,y-yy,c)
Wend
EndProcedure
;- Boucle principale
rayon=50
Repeat
ClearScreen(0,0,0)
ExamineKeyboard()
ExamineMouse()
If MouseButton(1) And rayon<#ScreenHeight
rayon+1
EndIf
If MouseButton(2) And rayon>2
rayon-1
EndIf
StartDrawing(ScreenOutput())
cercle(MouseX(),MouseY(),rayon,RGB(255,255,5))
;validez ces deux lignes pour comparer avec le cercle de pure
;DrawingMode(4)
;Circle(MouseX(),MouseY(),rayon,RGB(5,255,255))
StopDrawing()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
