racine carré difficulté [résolu]

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
nemerod256
Messages : 39
Inscription : dim. 19/févr./2012 1:51
Localisation : la ou la météo est bizarre
Contact :

racine carré difficulté [résolu]

Message par nemerod256 »

bonjour, je sais.
je suis pas venu depuis un bon moment
mais je suis la avec un New-problème avec la ligne de code:

Code : Tout sélectionner

debug Sqr((x1-x2)^2 + (y1-y2)^2)
il me dit qu'il y a une erreur de syntaxe
donc j'ai trouvé une alternative a se New-problème

Code : Tout sélectionner

debug Sqr((x1-x2)!2 + (y1-y2)!2)
mais il me dit que je pas faire de XOR avec des chiffre a virgule
je voudrais bien savoir si on peu faire autrement ?
je suis en création d'un jeu un peu sadique (il est bien compliqué, un jeu d’adresse avec la souri)
et je dois s'avoir la distance entre le point 1 et point 2
mes je suis pas bon pour se truc (j'ai juste piqué la ligne de code de l'aide)
je serai ravi de le finir car il sera pure-aléatoire
voila j'ai crée un nouveau topic donc qu'on ne viens pas me dire que c'est du déterrage
mais bien de l’enterrage :lol: dsl de l'humour pourri

cordialement nemerod
(edité 2 foit)
Dernière modification par nemerod256 le jeu. 15/nov./2012 23:58, modifié 1 fois.
purebasic 5.00
minecraft (en jeu (redstone))
perturbe les programme 32 et 64-bit directement dans la RAM du pc !!! (aussi se que je crée avec purebasic (rien que pour le lol ou a des fin de débogage)
bref rien que du plaisir !!!!!
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Re: racine carré difficulté

Message par cederavic »

Utilise la fonction Pow, il n'y a pas d'opérateur pour ça.
Avatar de l’utilisateur
nemerod256
Messages : 39
Inscription : dim. 19/févr./2012 1:51
Localisation : la ou la météo est bizarre
Contact :

Re: racine carré difficulté

Message par nemerod256 »

ok mais je fais comment pour fais mon calcule ?
car je doit faire la distance en le point 1 et 2
car voila se qui ecrit dans l'aide

Code : Tout sélectionner

Resultat.f = Pow(Nombre.f, Puissance.f)
donc moi pas comprendre (PUREBASIC, la )"puissance" (a l’état pure(vanne de m*rde))
purebasic 5.00
minecraft (en jeu (redstone))
perturbe les programme 32 et 64-bit directement dans la RAM du pc !!! (aussi se que je crée avec purebasic (rien que pour le lol ou a des fin de débogage)
bref rien que du plaisir !!!!!
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: racine carré difficulté

Message par comtois »

pour ce genre de calculs, mieux vaut éviter Pow()

Code : Tout sélectionner

#Nb = 1000000
x1.f = 5.6
y1.f = 78.2
x2.f = 76.1
y2.f = 10.09

Mem = ElapsedMilliseconds()
For i = 0 To #Nb
  Sqr((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2))
Next 
Time1 = ElapsedMilliseconds() - Mem

Mem = ElapsedMilliseconds()
For i = 0 To #Nb
  Sqr(Pow((x1-x2), 2) + Pow((y1-y2),2))
Next 
Time2 = ElapsedMilliseconds() - Mem

MessageRequester("", Str(Time1) + " / " + Str(Time2),0)
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Avatar de l’utilisateur
nemerod256
Messages : 39
Inscription : dim. 19/févr./2012 1:51
Localisation : la ou la météo est bizarre
Contact :

Re: racine carré difficulté

Message par nemerod256 »

ba voila
un code qui me sera utile
purebasic 5.00
minecraft (en jeu (redstone))
perturbe les programme 32 et 64-bit directement dans la RAM du pc !!! (aussi se que je crée avec purebasic (rien que pour le lol ou a des fin de débogage)
bref rien que du plaisir !!!!!
Avatar de l’utilisateur
nemerod256
Messages : 39
Inscription : dim. 19/févr./2012 1:51
Localisation : la ou la météo est bizarre
Contact :

Re: racine carré difficulté

Message par nemerod256 »

autre petit problème
je veux récupéré la valeur d'un pixel sur mon écran de jeu
je doit faire un test pour savoir si la souri touche un pixel "bombe"
mais des que je récupère la valeur avec un

Code : Tout sélectionner

if StartDrawing(ScreenOutput())
Couleur = Point(x1, y1)
StopDrawing()
endif
couleur a une valeur de
0
se resulta se fais (pour une surface de 800x800)
98% de l'ecran
donc il y a 2% de donné valide
et logiquement il doit me faire 75% de donné valide
a la place d'un zero

HELP je vien de grillé ma logique en 15 seconde montre en main
se truc va me tué
si vous avez desoin de plus d'info vous pouvais me demandé
le programme fais la routine a chaque fois que la souri et deplacé
purebasic 5.00
minecraft (en jeu (redstone))
perturbe les programme 32 et 64-bit directement dans la RAM du pc !!! (aussi se que je crée avec purebasic (rien que pour le lol ou a des fin de débogage)
bref rien que du plaisir !!!!!
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: racine carré difficulté

Message par graph100 »

c'est tellement pas clair ton dernier post que j'ai envie de te dire combien il y a de fautes dedans, et de les souligner... (ça pique les yeux.)
Mais bon, je vais pas faire mon sadique.

Une piste de réflexion pour ton Point(x,y).

Si tu le fais avant de dessiner quoi que ce soit sur ton écran, ou bien juste après l'avoir effacée, je pense que c'est normal que tu trouve 0 (si tu effaces en noir...)
Renvoie dans la couleur d'un point de la surface de dessin en cours.
Donc fait ton test à la fin du dessin, ou juste avant l'effaçage.

Une remarque comme ça, si tu connais la position de tes bombes, par exemple tu as mis les coordonnées dans une liste ou un tableau pour pouvoir les dessiner, je ne comprend pas bien pourquoi tu ne les utilises pas pour voir si la souris est dessus... Ca me parait plus rapide et moins sujet à plantage.

sinon, si tu utilises un screen pour l'affichage, il y a la fonction spritepixelcollision(). C'est pas super rapide, mais ça rend la détection d'une collision très précise, et simple.

évidement sans code et avec un post aussi illisible, c'est moins facile d'aider :lol:
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
nemerod256
Messages : 39
Inscription : dim. 19/févr./2012 1:51
Localisation : la ou la météo est bizarre
Contact :

Re: racine carré difficulté

Message par nemerod256 »

(dsl, des faute, je suis pas forte en écrit)
le jeu fais 50 x 50 bombe
les bombe sont aléatoire
donc sa fais 2500 a faire dans une liste si elle sont tout la
on va évité

voila une image (zoom x8)
Image
(le lien mesure 2 Km, mais c'est mon stockage de mes fichier)

et je dois avoir la valeur au pixel
donc sa fais un peur gros
800 x 800 le plateau
Dernière modification par nemerod256 le ven. 16/nov./2012 0:49, modifié 2 fois.
purebasic 5.00
minecraft (en jeu (redstone))
perturbe les programme 32 et 64-bit directement dans la RAM du pc !!! (aussi se que je crée avec purebasic (rien que pour le lol ou a des fin de débogage)
bref rien que du plaisir !!!!!
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: racine carré difficulté

Message par graph100 »

mouais, ok. MAis je n'ai pas compris ton soucis. je pensais que tu n'arravais pas à utiliser la fonction Point(), mais ça a l'air de fonctionner non ?

Et pour les fautes, c'est pas vraiment ça qui me gène même si c'est horrible, c'est surtout le fait que tu ne fais pas de phrases, ça rend le post incompréhensible...
Si tu veux qu'on puisse t'aider, faut être compréhensible. J'imagine que quand tu parles tu ne dis pas :
et je dois avoir la valeur au pixel
donc sa fais un peur gros
800 x 800 le plateau
Parce que ça ne veux pas dire grand chose. Alors écris au moins comme tu parles, ça sera mieux.

Maintenant tu peux peut-être énoncer clairement le soucis, et poster un code pas trop long qui souligne ton problème :D
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
nemerod256
Messages : 39
Inscription : dim. 19/févr./2012 1:51
Localisation : la ou la météo est bizarre
Contact :

pixel carré difficulté

Message par nemerod256 »

Code : Tout sélectionner

MessageRequester("solution n°26", "voila j'ai viré le code car il sera invisible temps que j'ai pas fini", 0)
voila sa peu aidé ?
le jeu se base sur des Event que Windows donne au programme
vous pouvais teste si vous le voulais
des que vous déplacé la souri ou bougé la fenêtre (ou une autre, qui et par dessus ou qui va dessus)
le clavier le fais aussi tilte
tous les Event de Windows le font tilte
et j'ai pas fini la creation
purebasic 5.00
minecraft (en jeu (redstone))
perturbe les programme 32 et 64-bit directement dans la RAM du pc !!! (aussi se que je crée avec purebasic (rien que pour le lol ou a des fin de débogage)
bref rien que du plaisir !!!!!
Avatar de l’utilisateur
nemerod256
Messages : 39
Inscription : dim. 19/févr./2012 1:51
Localisation : la ou la météo est bizarre
Contact :

Re: racine carré difficulté [résolu]

Message par nemerod256 »

graph100 a écrit : Si tu veux qu'on puisse t'aider, faut être compréhensible. J'imagine que quand tu parles tu ne dis pas:
le-code-mauvais a écrit : le code et raté, mal fais et non optimisé, donc je le refais bien
et je le re-merci encore une fois pour :
graph100 a écrit : Maintenant tu peux peut-être énoncer clairement le soucis ...
le code sera claire (fontaine (je sais, humour pourri :lol: ))
donc merci a
-cederavic ( pow())
-comtois (pour une amélioration)
et pour finir le soutien moral et codage de
-graph100 (car il est graphiquement super pour sa (je sais(encore un humour pourri)))
purebasic 5.00
minecraft (en jeu (redstone))
perturbe les programme 32 et 64-bit directement dans la RAM du pc !!! (aussi se que je crée avec purebasic (rien que pour le lol ou a des fin de débogage)
bref rien que du plaisir !!!!!
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: racine carré difficulté [résolu]

Message par Ar-S »

Voilà un exemple avec CanvasGadget
Lorsque tu survol le Canvas, la couleur s'affiche dans le stringgadget.
J'ai créé 20 bombes aléatoires, si tu en survoles une, ça le détecte. Si tu cliques sur une, ça te dis "Touchée" sinon ça te dit "loupée"
Le curseur devrait aussi changé si tu survol une bombe

Code : Tout sélectionner


Enumeration
  #Win
  #CANVAS
  #AFF
EndEnumeration

Global.i CubSize, WinL, WinH, NbrBombe

; Elements de base --------
NbrBombe = 20
CubSize = 10
WinL = 400
WinH = 423
; ------------------------------------

Declare PaintBackGround_Canvas(Gadget, Color)
Declare PaintBomb_Canvas(Gadget, Color)
Declare PickColor(CanvasGadget, MouseX, MouseY)


Procedure PaintBackGround_Canvas(Gadget, Color)
  ; Ar-S
  StartDrawing(CanvasOutput(Gadget))
     Box(0, 0, WinL, WinH-23, ColorCadre) 
  StopDrawing()
EndProcedure


Procedure PaintBomb_Canvas(Gadget, Color)
   ;  Ar-S
   PaintBackGround_Canvas(#canvas, $0)
   StartDrawing(CanvasOutput(#canvas))
   For i = 0 To NbrBombe
     PosX = Random(WinL-CubSize)
     PosY = Random(WinH-23-CubSize)
     Box(PosX, PosY, CubSize, CubSize, $0000FF) 
     Box(PosX+2, PosY+2, CubSize-4, CubSize-4, $110099)
    Next i  
  StopDrawing()

EndProcedure

Procedure PickColor(CanvasGadget, MouseX, MouseY)
  Shared Color.i
    ; Ar-S
    StartDrawing(CanvasOutput(CanvasGadget))
      Color = Point(MouseX, MouseY)
    StopDrawing()
    
    ProcedureReturn(Color)
  EndProcedure

Procedure OpenWindow_Win()
  hwnd = OpenWindow(#Win, 754, 47, WinL, WinH, "test", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
    If hwnd <> 0
      CanvasGadget(#CANVAS, 0, 0, WinL, WinH-23, #PB_Canvas_ClipMouse)
      StringGadget(#AFF, 1, WinH-21, WinL, 20, "Affichage des couleurs", #ES_CENTER)

      PaintBomb_Canvas(Gadget, Color)
      
    EndIf
    
EndProcedure

OpenWindow_Win()

;{- Event loop
Repeat
  Select WaitWindowEvent()
    ; ///////////////////
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Canvas  
          
          Select EventType()
              
            Case #PB_EventType_MouseEnter
              SetGadgetData(#Canvas , #True)
              SetGadgetAttribute(#Canvas , #PB_Canvas_Cursor, #PB_Cursor_Cross)
              
              
            Case #PB_EventType_MouseLeave
              SetGadgetData(#Canvas , #False)
              
            Case #PB_EventType_LeftButtonDown
              Col_Select = PickColor(#Canvas, MouseX, MouseY)
              If Col_Select <> $0
                Debug "Bombe touchée"
              Else
                Debug "Bombe Loupée"
                
              EndIf
              
            Case #PB_EventType_MouseMove
              MouseX = GetGadgetAttribute(#canvas, #PB_Canvas_MouseX) ;Mémorisation des coordonnées X de la souris
              MouseY = GetGadgetAttribute(#Canvas, #PB_Canvas_MouseY) ;Mémorisation des coordonnées Y de la souris
              Col_Survol = PickColor(#canvas, MouseX, MouseY)
              If Col_Survol <> $0
                Debug "Bombe Détectée"
                SetGadgetAttribute(#Canvas , #PB_Canvas_Cursor, #PB_Cursor_Hand)
              Else
                SetGadgetAttribute(#Canvas , #PB_Canvas_Cursor, #PB_Cursor_Cross)
                Debug "Détection de bombes en cours"
               EndIf 
              SetGadgetText(#AFF, "R : " + Str(Red(Col_Survol)) + " G : " + Str(Green(Col_Survol)) + " B : " + Str(Blue(Col_Survol)))
              
          EndSelect   
          
          
        Case #AFF
      EndSelect
    ; ////////////////////////
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #Win
          CloseWindow(#Win)
          Break
      EndSelect
  EndSelect
ForEver
;
;}


Dernière modification par Ar-S le sam. 17/nov./2012 11:13, modifié 1 fois.
~~~~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
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: racine carré difficulté [résolu]

Message par Mesa »

L'exemple d'Ar-S est excellent, pédagogiquement parlant.

Juste pour le plaisir, une petite optimisation de la vitesse en réduisant les appels à startdrawing:

Code : Tout sélectionner


Enumeration
	#Win
	#CANVAS
	#AFF
EndEnumeration

Global.i CubSize, WinL, WinH, NbrBombe

; Elements de base --------
NbrBombe = 20
CubSize = 10
WinL = 400
WinH = 423
; ------------------------------------

Declare PaintBackGround_Canvas(Gadget, Color)
Declare PaintBomb_Canvas(Gadget, Color)
Declare PickColor(CanvasGadget, MouseX, MouseY)


Procedure PaintBackGround_Canvas(Gadget, Color)
	; Ar-S
	StartDrawing(CanvasOutput(Gadget))
			Box(0, 0, WinL, WinH-23, ColorCadre) 
	StopDrawing()
EndProcedure


Procedure PaintBomb_Canvas(Gadget, Color)
		;  Ar-S
		PaintBackGround_Canvas(#canvas, $0)
		StartDrawing(CanvasOutput(#canvas))
		For i = 0 To NbrBombe
			PosX = Random(WinL-CubSize)
			PosY = Random(WinH-23-CubSize)
			Box(PosX, PosY, CubSize, CubSize, $0000FF) 
			Box(PosX+2, PosY+2, CubSize-4, CubSize-4, $110099)
		Next i  
	StopDrawing()

EndProcedure

Procedure PickColor(CanvasGadget, MouseX, MouseY)
	Shared Color.i
		; Ar-S
		StartDrawing(CanvasOutput(CanvasGadget))
			Color = Point(MouseX, MouseY)
		StopDrawing()
		
		ProcedureReturn(Color)
	EndProcedure
	
;--ajout-----------------------------	
Procedure PickColor2(MouseX, MouseY)
	Shared Color.i
		
		;StartDrawing(CanvasOutput(CanvasGadget))
			Color = Point(MouseX, MouseY)
		;StopDrawing()
		
		ProcedureReturn(Color)
	EndProcedure
;---------------------------------
	
Procedure OpenWindow_Win()
	hwnd = OpenWindow(#Win, 754, 47, WinL, WinH, "test", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
		If hwnd <> 0
			CanvasGadget(#CANVAS, 0, 0, WinL, WinH-23, #PB_Canvas_ClipMouse)
			StringGadget(#AFF, 1, WinH-21, WinL, 20, "Affichage des couleurs", #ES_CENTER)

			PaintBomb_Canvas(Gadget, Color)
			
		EndIf
		
EndProcedure

OpenWindow_Win()

;{- Event loop
Repeat
	Select WaitWindowEvent()
		; ///////////////////
		Case #PB_Event_Gadget
			Select EventGadget()
			  Case #Canvas 
			    ;--ajout-----------------------------
			    StartDrawing(CanvasOutput(#Canvas))
			    ;-----------------------------------
			    
					Select EventType()
							
						Case #PB_EventType_MouseEnter
							SetGadgetData(#Canvas , #True)
							SetGadgetAttribute(#Canvas , #PB_Canvas_Cursor, #PB_Cursor_Cross)
							
							
						Case #PB_EventType_MouseLeave
							SetGadgetData(#Canvas , #False)
							
						Case #PB_EventType_LeftButtonDown
						  ;------------------------------------------------
						  Col_Select = PickColor2(MouseX, MouseY)
						  ;------------------------------------------------
							If Col_Select <> $0
								Debug "Bombe touchée"
							Else
								Debug "Bombe Loupée"
								
							EndIf
							
						Case #PB_EventType_MouseMove
							MouseX = GetGadgetAttribute(#canvas, #PB_Canvas_MouseX) ;Mémorisation des coordonnées X de la souris
							MouseY = GetGadgetAttribute(#Canvas, #PB_Canvas_MouseY) ;Mémorisation des coordonnées Y de la souris
							;------------------------------------------------
							Col_Survol = PickColor2(MouseX, MouseY)
							;------------------------------------------------
							If Col_Survol <> $0
								Debug "Bombe Détectée"
								SetGadgetAttribute(#Canvas , #PB_Canvas_Cursor, #PB_Cursor_Hand)
							Else
								SetGadgetAttribute(#Canvas , #PB_Canvas_Cursor, #PB_Cursor_Cross)
								Debug "Détection de bombes en cours"
								EndIf 
							SetGadgetText(#AFF, "R : " + Str(Red(Col_Survol)) + " G : " + Str(Green(Col_Survol)) + " B : " + Str(Blue(Col_Survol)))
							
					EndSelect   
					
					;--ajout-----------------------------
					StopDrawing()
					;------------------------------------
					
				Case #AFF
			EndSelect
		; ////////////////////////
		Case #PB_Event_CloseWindow
			Select EventWindow()
				Case #Win
					CloseWindow(#Win)
					Break
			EndSelect
	EndSelect
ForEver
;
;}




Avatar de l’utilisateur
nemerod256
Messages : 39
Inscription : dim. 19/févr./2012 1:51
Localisation : la ou la météo est bizarre
Contact :

Re: racine carré difficulté [résolu]

Message par nemerod256 »

encore merci
mais je voulais le faire avec 0 "Énumération", "Global", "Procédure Pr$"
je veux pas de liste avec quoi que se soit
car sa oblique a la vidé après 3600 info et de plus les bombe font 16 x 16 sur des position a multiple de 16

Code : Tout sélectionner

          bombX = (Random(60)*16)
          bombY = (Random(60)*16)
          Box(bombX+1, bombY+1, 14, 14, RGB(RVB1+32, RVB2+32, 0))
          Box(bombX+4, bombY+4, 8, 8, RGB(RVB1+16, RVB2+16, 0)) 
          Couleur = Point(x1, y1)
purebasic 5.00
minecraft (en jeu (redstone))
perturbe les programme 32 et 64-bit directement dans la RAM du pc !!! (aussi se que je crée avec purebasic (rien que pour le lol ou a des fin de débogage)
bref rien que du plaisir !!!!!
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Re: racine carré difficulté [résolu]

Message par kernadec »

bonsoir nemerod256

tient voilà un autre exemple avec une grille.

Cordialement

Code : Tout sélectionner

Enumeration 
	#Win 
	#Container1
	#Container2
	#Canvas1
	#Canvas2
	#Canvas3
	#bouton1
	#bouton2
	#bouton3
EndEnumeration 

OpenWindow(#Win, 0, 0, 460, 360, "Canvas Icone", #PB_Window_SystemMenu |  #PB_Window_ScreenCentered)

ContainerGadget(#Container1, 6, 6, 349,349, #PB_Container_Flat) 
CloseGadgetList() 
SetGadgetColor(#Container1,#PB_Gadget_BackColor, RGB(0,255,0))
DisableGadget(#Container1, 1)
ContainerGadget(#Container2, 8,8, 345,345, #PB_Container_Flat) 
CloseGadgetList() 
SetGadgetColor(#Container2,#PB_Gadget_BackColor, RGB(255,255,255))
DisableGadget(#Container2, 1)

CanvasGadget(#Canvas1, 10, 10, 341, 341)
CanvasGadget(#Canvas2, 370,10, 17, 17)
CanvasGadget(#Canvas3, 370,60, 17, 17)

ButtonGadget(#bouton1, 400, 10, 50, 20, "Efface")
ButtonGadget(#bouton2, 400, 60, 50, 20, "Data")
ButtonGadget(#bouton3, 400, 110, 50, 20, "Quit")


t=19                                                             ;variable pour mode Step 
b=t+1

Structure pixel
  x.l
  y.l
  c.l
EndStructure

Dim pos.pixel(320)

StartDrawing(CanvasOutput(#Canvas1))                            ; dessin de la grille 
 DrawingMode(4)
 For iii=0 To 320
  For  ii=0 To 320 
    For i=ii To 320 
      Box(i,iii,t+2,t+2,RGB(128,128,128))
     i+t                                                         ; Step
    Next i
    ii+t                                                          ; Step
  Next ii
  iii+t                                                           ; Step
 Next iii
StopDrawing()

Repeat
  Event = WindowEvent()
  If Event = #PB_Event_Gadget And EventGadget() = #Canvas1 
    If EventType() = #PB_EventType_LeftButtonDown Or (EventType() = #PB_EventType_MouseMove And GetGadgetAttribute(#Canvas1, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton)
     If StartDrawing(CanvasOutput(#Canvas1))
         x = GetGadgetAttribute(#Canvas1, #PB_Canvas_MouseX)
         y = GetGadgetAttribute(#Canvas1, #PB_Canvas_MouseY)
         ;c=RGBA(0,0,0,0)
         c=RGBA(Random(255),Random(255),Random(255),Random(255))  ; couleurs aléatoires pour le fun
         FillArea(((x/b)*b)+1,((y/b)*b)+1,RGB(128,128,128),c)     ; dessine les couleurs sur la grille avec la souris
        StopDrawing()
        StartDrawing(CanvasOutput(#Canvas2))                       ; dessine icone pixel
         Box((x/b),(y/b),1,1,c)
        StopDrawing()
         
      EndIf
    EndIf
    
    If EventType() = #PB_EventType_RightButtonDown Or (EventType() = #PB_EventType_MouseMove And GetGadgetAttribute(#Canvas1, #PB_Canvas_Buttons) & #PB_Canvas_RightButton)
      If StartDrawing(CanvasOutput(#Canvas1))
         x = GetGadgetAttribute(#Canvas1, #PB_Canvas_MouseX)
         y = GetGadgetAttribute(#Canvas1, #PB_Canvas_MouseY)
         FillArea(x, y,RGB(128,128,128),RGBA(255,255,255,255))     ; efface les couleurs de la grille
        StopDrawing()
        
        StartDrawing(CanvasOutput(#Canvas2))                       ; efface icone pixel
         Box((x/b),(y/b),1,1,RGBA(255,255,255,255))
        StopDrawing()
         
      EndIf
    EndIf
  EndIf    
  
  If Event = #PB_Event_Gadget 
    If EventGadget() = #bouton1                                     ; efface tout
      t=19                                                          ; pour mode Step variable
      StartDrawing(CanvasOutput(#Canvas1))
       For iii=0 To 320 
         For ii=0 To 320 
          For i=ii To 320 
            FillArea(i+1,iii+1,RGB(128,128,128),RGBA(255,255,255,255)) ;i+1,iii+1 = partie interne de la box pour fillarea 
            i+t                                                     ; Step
          Next i
          ii+t                                                      ; Step
        Next ii
        iii+t                                                       ; Step
       Next iii
      StopDrawing()
      
      StartDrawing(CanvasOutput(#Canvas2))
       Box(0,0,17,17,RGBA(255,255,255,255))                         ; efface tous les pixels
       StopDrawing()
       
       StartDrawing(CanvasOutput(#Canvas3))
       Box(0,0,17,17,RGBA(255,255,255,255))                         ; efface tous  les pixels
      StopDrawing()
    EndIf
    
    If EventGadget() = #bouton2                                     ;lecture de la grille miniature pour obtenir un icône
      uuu=0
      For u=0 To 16
        For uu=0 To 16 
          pos(uuu)\c=16777215                                       ; pixel du tableau par défaut blanc
          pos(uuu)\x=u
          pos(uuu)\y=uu
         StartDrawing(CanvasOutput(#Canvas2))
           pos(uuu)\c=Point(pos(uuu)\x,pos(uuu)\y)   ; sauve la couleur et les coordonnées du pixel vers la structure
         StopDrawing()
           
          If pos(uuu)\c <> 16777215                                ; pas de point blanc
             Debug "Data.l  "+Str(pos(uuu)\x)+", "+Str(pos(uuu)\y)+", "+Str(pos(uuu)\c)  ; création lignes datas
           EndIf
           
         StartDrawing(CanvasOutput(#Canvas3))
          Box(pos(uuu)\x,pos(uuu)\y,1,1,pos(uuu)\c)                 ; redessine depuis la structure pour verif.
         StopDrawing()
           
         uuu+1
        Next uu
      Next u
    EndIf
    
    If EventGadget() = #bouton3                                     ; Quit
      Break
    EndIf
  EndIf
Until Event = #PB_Event_CloseWindow

End
Dernière modification par kernadec le dim. 18/nov./2012 11:40, modifié 2 fois.
Répondre