Page 1 sur 2

ATTENTION FRED NOUS SURVEILLE !!!

Publié : dim. 13/juin/2004 14:52
par Backup
..............

Publié : dim. 13/juin/2004 14:57
par Le Soldat Inconnu
:roll: :mrgreen:

Publié : dim. 13/juin/2004 15:00
par comtois
tu devrais calculer l'angle entre la souris et chaque oeil , ça serait encore :)

Publié : dim. 13/juin/2004 15:02
par Backup
les yeux sont bien independant ! :)

Publié : dim. 13/juin/2004 15:52
par nico
Ah Ah Ah...ce Dobro alors...... :lol:

Publié : dim. 13/juin/2004 15:57
par Backup
je viens de reediter le prg pour mettre la fenetre au premier plan en permanence (Merci le CODE FR) :)


et le faire plus petit car ça prenais trop de place !! Maintenant il est discret !
:D

Publié : dim. 13/juin/2004 16:15
par fweil
J'ajouterai bien ça entre le ClearScreen et le Until à la fin :

Code : Tout sélectionner

    If yyd = 50 And yyg = 50 And xyd = 110 And xyg = 50
        hDesktop = GetDesktopWindow_()
        hDC = GetWindowDC_(hDesktop)
        rect.RECT
        rect\right = GetSystemMetrics_(#SM_CXSCREEN)
        rect\bottom = GetSystemMetrics_(#SM_CYSCREEN)
        oldFont = SelectObject_(hDC, LoadFont(23, "Verdana", 128))
        SetBkMode_(hDC, #TRANSPARENT)
        SetTextColor_(hDC, #Red)
        DrawText_(hDC, "Arf !", Len("Arf !"), @rect, #DT_CENTER | #DT_VCENTER | #DT_SINGLELINE)
        SelectObject_(hDC, oldFont)
        ReleaseDC_(hDesktop, hDC)
    EndIf

Publié : dim. 13/juin/2004 16:31
par Backup
oui j'ai changer mon prog depuis : il est plus petit maintenant

pour que ça marche il faudrai faire


Code : Tout sélectionner

If yyd = 25 And yyg = 25 And xyd = 55 And xyg = 25
        hDesktop = GetDesktopWindow_()
        hDC = GetWindowDC_(hDesktop)
        rect.RECT
        rect\right = GetSystemMetrics_(#SM_CXSCREEN)
        rect\bottom = GetSystemMetrics_(#SM_CYSCREEN)
        oldFont = SelectObject_(hDC, LoadFont(23, "arial", 128))
        SetBkMode_(hDC, #TRANSPARENT)
        SetTextColor_(hDC, #Red)
        DrawText_(hDC, "Arf !", Len("Arf !"), @rect, #DT_CENTER | #DT_VCENTER | #DT_SINGLELINE)
        SelectObject_(hDC, oldFont)
        ReleaseDC_(hDesktop, hDC)
    EndIf 

mais l'ecran ne se renettoie pas tout seul !!!
c'est embetant ! :)

Publié : dim. 13/juin/2004 17:24
par Le Soldat Inconnu
avec un masque pour enlever le coutour des yeux, c'est cela que tu cherches :?: j'ai pas essayé ton bout de code au dessus mais comme il y a de la transparence, je pense que c'est cela

regarde ceci : (extrait de codes-fr également)

Code : Tout sélectionner

; Auteur : Le Soldat Inconnu
; Version de PB : 3.90
;
; Explication du programme :
; Donner à une fenêtre une forme spécifique. Par exemple faire une fenêtre ronde ou triangulaire.


Enumeration
  #Quitter
  #Forme1
  #Forme2
  #Forme3
  #Forme4
  #Forme5
EndEnumeration



Procedure Forme()
  If GetGadgetState(#Forme1) ; si on a choisi la forme 1
    
    Region = CreateRoundRectRgn_(0, 0, WindowWidth(), WindowHeight(), 40, 60) ; Création de la région pour faire une fenêtre avec les angles arrondis
    ; CreateRoundRectRgn_(X1, Y1, X2, Y2, R1, R2)
    ; X1, Y1 : coordonné du point haut gauche de la region
    ; X1, Y1 : coordonné du point haut gauche de la region
    ; R1, R2 : rayon de l'ellipse qui va servir à arrondir les angles de la region
    SetWindowRgn_(WindowID(), Region, #True) ; On applique la région
    DeleteObject_(Region) ; On supprime la région
    
  ElseIf GetGadgetState(#Forme2) ; si on a choisi la forme 2
    
    Region = CreateEllipticRgn_(0, 0, WindowWidth(), WindowHeight()) ; Création de la région pour faire une fenêtre elliptique
    ; CreateEllipticRgn_(X1, Y1, X2, Y2)
    ; X1, Y1 : coordonné du point haut gauche de la region
    ; X1, Y1 : coordonné du point haut gauche de la region
    SetWindowRgn_(WindowID(), Region, #True) ; On applique la région
    DeleteObject_(Region) ; On supprime la région
    
  ElseIf GetGadgetState(#Forme3) ; si on a choisi la forme 3
    
    Region = CreatePolygonRgn_(?Triangle, 4, #Alternate) ; Création de la région pour faire une fenêtre elliptique
    ; CreateRoundRectRgn_(Array, NbPoints, Type)
    ; Array : Adresse de la liste ou de la Data
    ; NbPoints : Nombre de points du polygone + 1 (car on fait une boucle donc on a 2 fois le premier point)
    ; Type : Voir msdn
    SetWindowRgn_(WindowID(), Region, #True) ; On applique la région
    DeleteObject_(Region) ; On supprime la région
    
  ElseIf GetGadgetState(#Forme4) ; si on a choisi la forme 4
    
    Region1 = CreateRectRgn_(0, 0, WindowWidth(), WindowHeight()) ; Création d'une région en rectangle
    Region2 = CreateRectRgn_(10, 10, WindowWidth() - 10, 50) ; Création d'une région en rectangle
    ; CreateRectRgn_(X1, Y1, X2, Y2)
    ; X1, Y1 : coordonné du point haut gauche de la region
    ; X1, Y1 : coordonné du point haut gauche de la region
    CombineRgn_(Region1, Region1, Region2, #RGN_DIFF) ; On combine les 2 régions
    ; Les modes suivants sont disponibles :
    ; #RGN_AND : Intersection
    ; #RGN_OR : Union
    ; #RGN_DIFF : Différences
    ; #RGN_XOR : Union moins les intersections
    SetWindowRgn_(WindowID(), Region1, #True) ; On applique la région finale
    DeleteObject_(Region1) ; On supprime les régions
    DeleteObject_(Region2)
    
  ElseIf GetGadgetState(#Forme5) ; si on a choisi la forme 5
    
    Region1 = CreatePolygonRgn_(?Triangle, 4, #Alternate)
    Region2 = CreateEllipticRgn_(0, 0, WindowWidth(), WindowHeight())
    CombineRgn_(Region1, Region1, Region2, #RGN_OR) ; On combine les 2 régions
    SetWindowRgn_(WindowID(), Region1, #True) ; On applique la région finale
    DeleteObject_(Region1) ; On supprime les régions
    DeleteObject_(Region2)
    
  EndIf
EndProcedure




; Création de la fenêtre et dela GadgetList
If OpenWindow(0, 0, 0, 400, 400, #PB_Window_Borderless | #PB_Window_ScreenCentered, "Test") = 0 Or CreateGadgetList(WindowID(0)) = 0
  End
EndIf

; Création des boutons et de l'option d'affichage
ButtonGadget(#Quitter, 100, 100, 200, 20, "Quitter")
OptionGadget(#Forme1, 100, 125, 200, 15, "Angles arrondis")
OptionGadget(#Forme2, 100, 140, 200, 15, "Ronde")
OptionGadget(#Forme3, 100, 155, 200, 15, "Triangle")
OptionGadget(#Forme4, 100, 170, 200, 15, "Trouée")
OptionGadget(#Forme5, 100, 185, 200, 15, "Triangle + Rond")


Repeat
  Event = WaitWindowEvent()
  
  If Event = #PB_EventGadget
    Select EventGadgetID() ; boutons, zone de texte, ...
      Case #Quitter
        Event = #PB_EventCloseWindow ; On quitte
      Default
        Forme() ; sinon, on change la forme de la fenêtre
    EndSelect
  EndIf
  
Until Event = #PB_EventCloseWindow

End



DataSection
  Triangle :
    Data.l 200, 400, 0, 0, 400, 0, 200, 400 ; Coordonnées des points du triangle en x, y (il faut faire une boucle donc on revient au premier point du triangle
EndDataSection

Publié : dim. 13/juin/2004 20:50
par Anonyme2
Très bon Dobro, je vais faire attention ... :mrgreen:

Publié : dim. 13/juin/2004 21:23
par garzul
:D cool les gars je ferai jamais comme vous je suis trop bete :roll: :( :!:

Publié : dim. 13/juin/2004 22:30
par hardy
Amusant! :lol: :lol: :lol:

Publié : dim. 13/juin/2004 23:40
par Backup
@ Le soldat :

Non non je repondais a Fweil qui avait idéee de rajouter ce petit code
a la fin du mien !!
alors j'ai reposté son code legerement modifie pour qu'il s'adapte a "fred"
que j'avais entre temp modifier pour le reduire en taille ..
voila , mis j'ai recupere ton listing pour ma logiteque perso
car je le trouve tres cool Merci .. :D

Publié : mar. 15/juin/2004 8:59
par Le Soldat Inconnu
Salut,

bon, moi j'ai fait avec l'astuce que je t'ai donné plus haut. me suis bien marrer.

les yeux se déplacent sur l'écran, ils regardent la souris et essayent de l'éviter quand ils se déplacent.

voilà quoi que ça donne :D

Code : Tout sélectionner

#TailleOeil = 12
#TaillePupille = 4
#EspaceOeilPupille = 4
#EspaceEntreYeux = 0

#CentreOeilG = #TailleOeil + #TaillePupille - #EspaceOeilPupille
#CentreOeilD = (#TailleOeil + #TaillePupille - #EspaceOeilPupille) * 3 + #EspaceEntreYeux
#RayonOeil = #TailleOeil - #EspaceOeilPupille

#Cadre = 100
#DistanceMinSouris = 150

#Vitesse = 10
#Avance = 1

Global TailleEcranX.l, TailleEcranY.l, PosX.f, PosY.f, CibleX, CibleY, PosXSave.f, PosYSave.f

TailleEcranX = GetSystemMetrics_(#SM_CXSCREEN)
TailleEcranY = GetSystemMetrics_(#SM_CYSCREEN)

Procedure Yeux()
  ; Position de la souris
  GetCursorPos_(CursorPos.POINT)
  MouseX = CursorPos\x
  MouseY = CursorPos\y
  
  ; Position du centre de l'oeil gauche
  Dx.f = MouseX - WindowX() - #CentreOeilG
  Dy.f = MouseY - WindowY() - #CentreOeilG
  DistanceSouris1.f = Sqr(Pow(Dx, 2) + Pow(Dy, 2))
  Dx = Dx / DistanceSouris1
  Dy = Dy / DistanceSouris1
  Distance.f = DistanceSouris1 / TailleEcranY * 4
  If Distance > 1 : Distance = 1 : EndIf
  
  OeilGX = Dx * Distance * #RayonOeil + #CentreOeilG
  OeilGY = Dy * Distance * #RayonOeil + #CentreOeilG
  
  ; Position du centre de l'oeil droit
  Dx.f = MouseX - WindowX() - #CentreOeilD
  Dy.f = MouseY - WindowY() - #CentreOeilG
  DistanceSouris2.f = Sqr(Pow(Dx, 2) + Pow(Dy, 2))
  Dx = Dx / DistanceSouris2
  Dy = Dy / DistanceSouris2
  Distance = DistanceSouris2 / TailleEcranY * 4
  If Distance > 1 : Distance = 1 : EndIf
  
  OeilDX = Dx * Distance * #RayonOeil + #CentreOeilD
  OeilDY = Dy * Distance * #RayonOeil + #CentreOeilG
   
   ; on dessine les yeux
  UseImage(0)
  StartDrawing(ImageOutput())
    Box(0, 0, 200, 200, $FFFFFF)
    Circle(OeilGX, OeilGY, #TaillePupille, 0)
    Circle(OeilDX, OeilDY, #TaillePupille, 0)
  StopDrawing()

  ; on affiche la fenêtre
  SetGadgetState(0, UseImage(0))
  
  ; Déplacement de la fenêtre
  If Abs(PosX - CibleX) <= 2 And Abs(PosY - CibleY) <= 2 ; On donne un point à rejoindre
    CibleX = Random(TailleEcranX + 2 * #Cadre) - #Cadre
    CibleY = Random(TailleEcranY + 2 * #Cadre) - #Cadre
    Debug StrF(CibleX, 0) + "    " + StrF(CibleY, 0)
  EndIf
  
  DistanceSouris.l = (DistanceSouris1 + DistanceSouris2) / 2
  
  ; on se déplace vers la cible
  Dx = CibleX - PosX
  Dy = CibleY - PosY
  DistanceCible = Sqr(Pow(Dx, 2) + Pow(Dy, 2))
  Dx = Dx / DistanceCible * #Avance
  Dy = Dy / DistanceCible * #Avance
  PosX +  Dx
  PosY + Dy
  
  If DistanceSouris < #DistanceMinSouris
    ; on s'écarte de la souris
    Dx = PosX - MouseX
    Dy = PosY - MouseY
    DistanceCible = Sqr(Pow(Dx, 2) + Pow(Dy, 2))
    PosX +  Dx / DistanceCible * #Avance
    PosY + Dy / DistanceCible * #Avance
  EndIf
  
  If Abs(PosX - PosXSave) < 0.02 And Abs(PosY - PosYSave) < 0.02
    ; si la souris est proche de la cible
    Dx = CibleX - PosX
    Dy = CibleY - PosY
    DistanceCible = Sqr(Pow(Dx, 2) + Pow(Dy, 2))
    Dx = Dx / DistanceCible * #Avance
    Dy = Dy / DistanceCible * #Avance
    PosX +  Dx
    PosY + Dy
  EndIf
  
  PosXSave = PosX
  PosYSave = PosY
  
  MoveWindow(PosX - (#TailleOeil + #TaillePupille - #EspaceOeilPupille) * 2 + #EspaceEntreYeux / 2, PosY - (#TailleOeil + #TaillePupille - #EspaceOeilPupille) * 2)

EndProcedure






If OpenWindow(1, 0, 0, 200, 200, #PB_Window_Invisible, "Yeux")
  If OpenWindow(0, 0, 0, (#TailleOeil + #TaillePupille - #EspaceOeilPupille) * 4 + #EspaceEntreYeux, (#TailleOeil + #TaillePupille - #EspaceOeilPupille) * 2, #PB_Window_BorderLess | #WS_SYSMENU | #PB_Window_ScreenCentered, "Yeux", WindowID(1))
    SetWindowPos_(WindowID(), -1, 0, 0, 0, 0, #SWP_NOSIZE | #SWP_NOMOVE)
    
    ; on découpe la fenêtre
    RegionOeilG = CreateEllipticRgn_(#CentreOeilG - #TailleOeil, #CentreOeilG - #TailleOeil, #CentreOeilG + #TailleOeil, #CentreOeilG + #TailleOeil)
    RegionOeilD = CreateEllipticRgn_(#CentreOeilD - #TailleOeil, #CentreOeilG - #TailleOeil, #CentreOeilD + #TailleOeil, #CentreOeilG + #TailleOeil)
    CombineRgn_(RegionOeilG, RegionOeilG, RegionOeilD, #RGN_OR)
    SetWindowRgn_(WindowID(), RegionOeilG, #True)
    DeleteObject_(RegionOeilG) 
    DeleteObject_(RegionOeilD)
    
    PosX = WindowX()
    PosY = WindowY()
    CibleX = PosX
    CibleY = PosY
    
    CreateImage(0, WindowWidth(), WindowHeight())
    If CreateGadgetList(WindowID())
      ImageGadget(0, 0, 0, 0, 0, UseImage(0))
    EndIf
    Yeux()
    
    Timer = SetTimer_(WindowID(), 0, #Vitesse, @Yeux())
    Repeat
      Event = WaitWindowEvent()
      
      If Event = #WM_LBUTTONDOWN ; Si on clique sur les yeux, on quitte
        Event = #PB_Event_CloseWindow
      EndIf
      
    Until Event = #PB_Event_CloseWindow
    KillTimer_(WindowID(), Timer)
  EndIf
EndIf

Publié : mar. 15/juin/2004 9:15
par Backup
exellent !! :D (j'allai dire comme d'hab!)