Horloge digitale 7 segments sans dessins, images ou sprites

Programmation d'applications complexes
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Horloge digitale 7 segments sans dessins, images ou sprites

Message par MLD »

Bonjour a tous
Pour le fun une petite horloge style 1975 modifiée 1980 :roll:
Je ne sait pas si quelqu’un a déjà fait la même chose en programmant de cette façon.
J'ai fait un peu ceci a l'arrache. A vous les améliorations.

Code : Tout sélectionner

;essais Horloge digit 7 segments MLD le 7/11/2022
;¤¤¤¤ Assignation des gadgets ¤¤¤¤
#Ma_fen = 1
Enumeration 10 
  #seg_11:#seg_12:#seg_13:#seg_14:#seg_15:#seg_16: #seg_17
EndEnumeration
Enumeration 20
  #seg_21:#seg_22:#seg_23:#seg_24:#seg_25:#seg_26:#seg_27
EndEnumeration
Enumeration 30 
  #seg_31:#seg_32:#seg_33:#seg_34:#seg_35:#seg_36:#seg_37
EndEnumeration
Enumeration 40 
  #seg_41:#seg_42:#seg_43:#seg_44:#seg_45:#seg_46:#seg_47
EndEnumeration

Macro clf(gad)
  SetGadgetColor(gad,#PB_Gadget_BackColor,$FF309B)
EndMacro
Macro hd(gad,eta)
  HideGadget(gad,eta) 
EndMacro 

Procedure fseg(g,nb$)
 If nb$ = "0":hd(g + 1,0):hd(g + 2,1):hd(g + 3,0):hd(g + 4,0):hd(g + 5,0):hd(g + 6,0):hd(g + 7,0):EndIf
 If nb$ = "1":hd(g + 1,1):hd(g + 2,1):hd(g + 3,1):hd(g + 4,0):hd(g + 5,0):hd(g + 6,1):hd(g + 7,1):EndIf
 If nb$ = "2":hd(g + 1,0):hd(g + 2,0):hd(g + 3,0):hd(g + 4,0):hd(g + 5,1):hd(g + 6,1):hd(g + 7,0):EndIf
 If nb$ = "3":hd(g + 1,0):hd(g + 2,0):hd(g + 3,0):hd(g + 4,0):hd(g + 5,0):hd(g + 6,1):hd(g + 7,1):EndIf
 If nb$ = "4":hd(g + 1,1):hd(g + 2,0):hd(g + 3,1):hd(g + 4,1):hd(g + 5,0):hd(g + 6,0):hd(g + 7,1):EndIf
 If nb$ = "5":hd(g + 1,0):hd(g + 2,0):hd(g + 3,0):hd(g + 4,1):hd(g + 5,0):hd(g + 6,0):hd(g + 7,1):EndIf
 If nb$ = "6":hd(g + 1,0):hd(g + 2,0):hd(g + 3,0):hd(g + 4,1):hd(g + 5,0):hd(g + 6,0):hd(g + 7,0):EndIf
 If nb$ = "7":hd(g + 1,0):hd(g + 2,1):hd(g + 3,1):hd(g + 4,0):hd(g + 5,0):hd(g + 6,1):hd(g + 7,1):EndIf
 If nb$ = "8":hd(g + 1,0):hd(g + 2,0):hd(g + 3,0):hd(g + 4,0):hd(g + 5,0):hd(g + 6,0):hd(g + 7,0):EndIf
 If nb$ = "9":hd(g + 1,0):hd(g + 2,0):hd(g + 3,0):hd(g + 4,0):hd(g + 5,0):hd(g + 6,0):hd(g + 7,1):EndIf
EndProcedure

Procedure TimerProc(hwnd.l, uMsg.l, idEvent.l, dwTime.l) 
  Static m$ = "10": Static dm$ = "7":Static h$ = "10":Static dh$ = "3"
  Select uMsg 
    Case #WM_TIMER
      dt$ = FormatDate("%hh%ii", Date())
      If Right(dt$,1) <> m$:m$ = Right(dt$,1):fseg(40,m$):EndIf
      If Mid(dt$,3,1) <> dm$:dm$ = Mid(dt$,3,1):fseg(30,dm$):EndIf
      If Mid(dt$,2,1) <> h$:h$ = Mid(dt$,2,1):fseg(20,h$):EndIf
      If Left(dt$,1) <> dh$:dh$ = Left(dt$,1):fseg(10,dh$):EndIf
  EndSelect 
EndProcedure

OpenWindow(1,740,175,700,250,"DIGIT",#PB_Window_MinimizeGadget|#NUL|#NUL|#NUL)
SetWindowColor(1,$080FF)
StickyWindow(1,1)
;Vos gadgets ici
hsg1 = 50
For hz = 1 To 3
 TextGadget(hz +10,50,hsg1,100,2,""):clf(hz + 10)
 TextGadget(hz +20,200,hsg1,100,2,""):clf(hz + 20) 
 TextGadget(hz +30,400,hsg1,100,2,""):clf(hz + 30)
 TextGadget(hz +40,550,hsg1,100,2,""):clf(hz + 40)
 hsg1 = hsg1 + 50
Next
hsg1 = 50
For vtd = 4 To 5
 TextGadget(vtd +10,150,hsg1,2,50,""):clf(vtd +10)
 TextGadget(vtd +20,300,hsg1,2,50,""):clf(vtd +20)
 TextGadget(vtd +30,500,hsg1,2,50,""):clf(vtd +30)
 TextGadget(vtd +40,650,hsg1,2,50,""):clf(vtd +40)
 hsg1 = hsg1 + 50
Next
hsg1 = 50
For vtg = 6 To 7
  TextGadget(vtg +10,50,hsg1,2,50,""):clf(vtg +10)
  TextGadget(vtg +20,200,hsg1,2,50,""):clf(vtg +20)
  TextGadget(vtg +30,400,hsg1,2,50,""):clf(vtg +30)
  TextGadget(vtg +40,550,hsg1,2,50,""):clf(vtg +40)
 hsg1 = hsg1 + 50
Next

SetTimer_ (WindowID (1) ,0,1000, @TimerProc()) ; envoie un evenement toutes les 1000 millisecondes 
Repeat
  Event = WaitWindowEvent()
Until Event  = #PB_Event_CloseWindow
End
A+
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Horloge digitale 7 segments sans dessins, images ou sprites

Message par Kwai chang caine »

Simple, basique mais sympa :wink:
Merci du partage 8)
Ca doit bien se vendre les montres en ce moment parce que on a noir de jolis codes à ce sujet :lol:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Horloge digitale 7 segments sans dessins, images ou sprites

Message par MLD »

Bonjour Kcc
Content de te lire. :lol:
Tu te fait rare sur le fofo Français. Apparemment le us t'on adopté comme le beaujolais nouveau :oops:
Non je ne vend pas de montre dans un parapluie au départ de la route du rhum :roll:
Merci pour ta réponse. :lol:
a+
Michel
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Horloge digitale 7 segments sans dessins, images ou sprites

Message par MLD »

@ TedOS
Bonjour et bienvenue sur ce forum.
Cet exemple d'horloge était juste fait pour indiquer que c'est possible de faire une horloge sans avoir recours a des dessins.
Si je devais faire une reconnaissance vocale, ce serais sur une horloge bien plus sophistiquée.
Mais vous pouvez vous mettre au travail, reprendre mon code, et vous essayer a cet exercice. :lol: :lol:
Merci a vous et bonne continuation :lol: :lol: avec °PB .
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: Horloge digitale 7 segments sans dessins, images ou sprites

Message par SPH »

Mon horloge sans dessins, images ou sprites :

Code : Tout sélectionner

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  Les horloges de SPH  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;; Code : SPH(2022) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;é

InitSprite() 
InitMouse() 
InitKeyboard() 

;SetPriorityClass_ ( GetCurrentProcess_ (), #IDLE_PRIORITY_CLASS ) 

ExamineDesktops()
dw.w=DesktopWidth(0) 
dh.w=DesktopHeight(0)
do.b=DesktopDepth(0)

OpenScreen(dw,dh,do,"Les horloges de SPH") 


xx=dw/2
yy=dh/2
pis.f=ATan(1)*12.1585
pim.f=ATan(1)*12.1585
pih.f=ATan(1)*2.4317
echp=yy/1.4
;echh=yy/2.4
echm=yy/1.5
col=RGB(33,33,33)
ii.f=Random(20)/100
uu.f=Random(20)/100
ii2.f=Random(20)/100
uu2.f=Random(20)/100

;;;;;;;;;;;
sphii.f=0
sphuu.f=0
sphii2.f=0
sphuu2.f=0
sphiii.f=Random(1000)/100000
sphuuu.f=Random(1000)/100000
sphiii2.f=Random(1000)/100000
sphuuu2.f=Random(1000)/100000
rayonx=dw/5
rayony=dh/6
ShowCursor_(0)
;;;;;;;;;;;
;;;;;;;;;;;

MouseLocate(xx,yy)

Repeat ; Boucle principale

xxx=Cos(ii)*45+Sin(ii2)*40
yyy=Sin(uu)*45-Cos(uu2)*40
decx.f=Cos(ii)/18+Sin(uu2)/15

ExamineMouse()
x2mouse=MouseX()
y2mouse=MouseY()

xmouse=Cos(sphii)*rayonx+Sin(sphii2)*rayonx
ymouse=Sin(sphuu)*rayony+Cos(sphuu2)*rayony

xx2021=xmouse+x2mouse
yy2021=ymouse+y2mouse



If MouseButton(#PB_MouseButton_Left)<>0
s+1:If s>=60:s-60:m+1:EndIf:If m=60:m=0:h+1:EndIf:If h=12:h=0:EndIf
Else
h=Hour(Date()):m=Minute(Date()):s=Second(Date())
EndIf

If MouseButton(#PB_MouseButton_Right)<>0
sphiii.f=Random(1000)/100000
sphuuu.f=Random(1000)/100000
sphiii2.f=Random(1000)/100000
sphuuu2.f=Random(1000)/100000
EndIf


;*****
ClearScreen(0)
StartDrawing(ScreenOutput()) 
;;;;;;;;;;;
ss.f=decx+s/pis
mm.f=decx+(m+s/60)/pim
hh.f=decx+(h+m/60)/pih
For i=0 To 11
For u=1 To 5
If i=0 Or i=3 Or i=6 Or i=9
co=RGB(255,255,255)
Else
co=RGB(80,80,80)
EndIf

  sphx=xx2021+Sin(decx+i/pih)*(echp+xxx)+Random(6)-3 ;;;;;;;;;;;;xx
  sphy=yy2021-Cos(decx+i/pih)*(echp+yyy)+Random(6)-3 ;;;;;;;;;;;;yy
  
  If sphx<0
    co=RGB(00,80,00)
  sphx=(sphx*-1)/2
  EndIf
  If sphx>=dw
    co=RGB(00,80,00)
    sphx=dw-1-Abs(dw-sphx)/2
  EndIf
  
  If sphy<0
    co=RGB(00,80,00)
  sphy=(sphy*-1)/2
  EndIf
  If sphy>=dh
    co=RGB(00,80,00)
  sphy=dh-1-Abs(dh-sphy)/2
  EndIf
  
  Plot(sphx,sphy,co)
Next
Next


x1=Sin(mm)*(echm+xxx)
y1=-Cos(mm)*(echm+yyy)
;Line(xx,yy,x1,y1,RGB(200,200,0))
dist=Sqr(x1*x1+y1*y1)
xx1.f=x1/dist
yy1.f=y1/dist
xx2.f=xx2021;;;;;;;xx
yy2.f=yy2021;;;;;;;yy
u=0
;r=255;Random(255)
For i=0 To dist/3
  co=RGB(255,255,00)
  sphx=xx2-u/32+Random(u/16)
  sphy=yy2-u/32+Random(u/16)
  If sphx<0
    co=RGB(00,80,00)
  sphx=(sphx*-1)/2
  EndIf
  If sphx>=dw
    co=RGB(00,80,00)
    sphx=dw-1-Abs(dw-sphx)/2
  EndIf
  
  If sphy<0
    co=RGB(00,80,00)
  sphy=(sphy*-1)/2
  EndIf
  If sphy>=dh
    co=RGB(00,80,00)
    sphy=dh-1-Abs(dh-sphy)/2
  EndIf
  
Plot(sphx,sphy,co)
xx2+xx1
yy2+yy1
u+2
Next
;r=255;Random(255)
For i=0 To dist/2
  co=RGB(255,255,00)
  u-1
  sphx=xx2-u/32+Random(u/16)
  sphy=yy2-u/32+Random(u/16)
  If sphx<0
    co=RGB(00,80,00)
  sphx=(sphx*-1)/2
  EndIf
  If sphx>=dw
    co=RGB(00,80,00)
    sphx=dw-1-Abs(dw-sphx)/2
  EndIf
  
  If sphy<0
    co=RGB(00,80,00)
  sphy=(sphy*-1)/2
  EndIf
  If sphy>=dh
    co=RGB(00,80,00)
    sphy=dh-1-Abs(dh-sphy)/2
  EndIf
  
Plot(sphx,sphy,co)
xx2+xx1
yy2+yy1
Next


x1=Sin(hh)*(echm+xxx)
y1=-Cos(hh)*(echm+yyy)
dist=Sqr(x1*x1+y1*y1)
xx1.f=x1/dist
yy1.f=y1/dist
xx2.f=xx2021;;;;;;;xx
yy2.f=yy2021;;;;;;;yy
u=0
;r=255;Random(255)
For i=0 To dist/8
  co=RGB(255,20,86)
  sphx=xx2-u/8+Random(u/4)
  sphy=yy2-u/8+Random(u/4)
  If sphx<0
    co=RGB(00,80,00)
  sphx=(sphx*-1)/2
  EndIf
  If sphx>=dw
    co=RGB(00,80,00)
    sphx=dw-1-Abs(dw-sphx)/2
  EndIf
  
  If sphy<0
    co=RGB(00,80,00)
  sphy=(sphy*-1)/2
  EndIf
  If sphy>=dh
    co=RGB(00,80,00)
    sphy=dh-1-Abs(dh-sphy)/2
  EndIf
  
Plot(sphx,sphy,co)
xx2+xx1
yy2+yy1
u+2
Next
r=255;Random(255)
For i=0 To dist/4
  u-1
    co=RGB(255,20,86)
    sphx=xx2-u/8+Random(u/4)
  sphy=yy2-u/8+Random(u/4)
  If sphx<0
    co=RGB(00,80,00)
  sphx=(sphx*-1)/2
  EndIf
  If sphx>=dw
    co=RGB(00,80,00)
    sphx=dw-1-Abs(dw-sphx)/2
  EndIf
  
  If sphy<0
    co=RGB(00,80,00)
  sphy=(sphy*-1)/2
  EndIf
  If sphy>=dh
    co=RGB(00,80,00)
    sphy=dh-1-Abs(dh-sphy)/2
  EndIf
  
Plot(sphx,sphy,co)
xx2+xx1
yy2+yy1
Next

x1=Sin(ss)*(echm+xxx)
y1=-Cos(ss)*(echm+yyy)
dist=Sqr(x1*x1+y1*y1)
xx1.f=x1/dist
yy1.f=y1/dist
xx2.f=xx2021-2;;;;;;;xx-2
yy2.f=yy2021-2;;;;;;;yy-2
For i=0 To dist
  If Random(2)=1
    co=RGB(86,20,255)
    sphx=xx2+Random(4)
  sphy=yy2+Random(4)
  If sphx<0
    co=RGB(00,80,00)
  sphx=(sphx*-1)/2
  EndIf
  If sphx>=dw
    co=RGB(00,80,00)
    sphx=dw-1-Abs(dw-sphx)/2
  EndIf
  
  If sphy<0
    co=RGB(00,80,00)
  sphy=(sphy*-1)/2
  EndIf
  If sphy>=dh
    co=RGB(00,80,00)
    sphy=dh-1-Abs(dh-sphy)/2
  EndIf
  
Plot(sphx,sphy,co)
EndIf
xx2+xx1
yy2+yy1
Next

ii+0.007
uu+0.0059
ii2+0.0043
uu2+0.0031

sphii.f+sphiii.f
sphuu.f+sphuuu.f
sphii2.f+sphiii2.f
sphuu2.f+sphuuu2.f

;;;;;;;;;;;
StopDrawing() 
;*****

FlipBuffers() 

Delay(1)

ExamineKeyboard() 
Until KeyboardPushed(#PB_Key_All)
ShowCursor_(1)
End 


!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Horloge digitale 7 segments sans dessins, images ou sprites

Message par MLD »

@ SPH
Je cherche les 7 segments :oops:
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: Horloge digitale 7 segments sans dessins, images ou sprites

Message par SPH »

... Ha ! Tu voulais des segments ?

Alors : désolé... :?

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Horloge digitale 7 segments sans dessins, images ou sprites

Message par MLD »

@SPH
Ta pendule a l'avantage d'être très originale. :lol:
Répondre