[BB,B+] Binäre Uhr

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

 

da_poller

Betreff: [BB,B+] Binäre Uhr

BeitragDo, Feb 26, 2009 18:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie im Blitzmax Codearchiv schon zu finden jetzt auch für BB und B+: die binäre uhr..


in den 6 type objekten(bc_w.bc_wert) finden sich folgende werte:
dezimal Arrow dezimalwert der aktuellen stelle
binär[4] (blitzarray) Arrow die 4 binärwerte(0/1) die zahlenreihe ist wie folgt: 1,2,4,8
id Arrow 1-6(fals die types mal durcheinander geraten zur sicherheit)
bc_bin_max Arrow die maximale anzahl an stellen

Installation: einfach am anfang des projektes die "binar uhr.bb" includieren und vor anzeigen bc_update() aufrufen.

hier erstmal die lib:Code: [AUSKLAPPEN]
; Author: da_poller
; Email: bpoller2810[at]aol[dot]com
; Copyright: FFA(Free For All)
; Description: gives you an type stack with the actual binary time
;                   
;                   
;====================================================================

Type bc_wert
   Field bc_binar[4]
   Field bc_dezimal
   Field bc_bin_max
   Field id
End Type
Global bc_w.bc_wert

Local bc_wert$="243434"
For bc_k=0 To 5
   bc_w.bc_wert=New bc_wert
   bc_w\bc_bin_max=Mid(bc_wert$,bc_k+1,1)
   bc_w\id=bc_k+1
Next



Function bc_update()
   Local i
   Local zeit$=CurrentTime()
   zeit$=Replace(zeit$,":","")
   
   For bc_w.bc_wert=Each bc_wert
      bc_i=bc_i+1
      For bc_k=0 To 3
         bc_w\bc_binar[bc_k]=0
      Next
      bc_w\bc_dezimal=Int(Mid(zeit$,bc_i,1))
      
      Local bc_zahl=bc_w\bc_dezimal
      Local bc_count=3
      Local bc_stack=8
      
      While bc_zahl>0
         
         If bc_zahl>=bc_stack
            bc_w\bc_binar[bc_count]=1
            bc_zahl=bc_zahl-bc_stack
         EndIf
         
         bc_stack=bc_stack/2
         bc_count=bc_count-1
      Wend
      
   Next
   
End Function


und hier ein beispiel:Code: [AUSKLAPPEN]
Include "binar uhr.bb"

Graphics 400,300,0,2
SetBuffer BackBuffer()
timer=CreateTimer(30)
Repeat
   Cls
   bc_update()
   draw_clock(10,200)
   draw_clock2(100,230,30)
   WaitTimer(timer)
   Flip 0
Forever
End

Function draw_clock(x,y)
   Local zz$
   Color 255,255,255
   For bc_k=0 To 3
      For bc_w.bc_wert=Each bc_wert
         If bc_k<bc_w\bc_bin_max
            zz$=zz$+bc_w\bc_binar[k]
         Else
            zz$=zz$+" "
         EndIf
      Next
      zz$=Left(zz$,2)+":"+Mid(zz$,3,2)+":"+Right(zz$,2)
      Text x,y+40-(bc_k*10),zz$
      zz$=""
   Next
End Function


Function draw_clock2(x,y,size)
   Local bc_dx=0
   For bc_w.bc_wert=Each bc_wert
      For bc_k=0 To 3
         If bc_k<bc_w\bc_bin_max
            Select bc_w\bc_binar[bc_k]
               Case 0
                  Color 100,100,100
               Case 1
                  Color 255,255,255
            End Select
            
            Oval x+(bc_dx*(size+5)),y-(bc_k*(size+5)),size,size,1
         EndIf   
      Next
      bc_dx=bc_dx+1
   Next
End Function


ich weiß alles recht spärlich kommentiert jedoch ist der code so einfach das er leicht und schnell selbst verstanden werden kann.

ob meine art die beste ist wage ich zu beweifeln aber es ist eine und ich hoffe der ein oder andere findet gebrauch dafür..

ps: kritik lob etc immer her damit(natürlich auch verbesserungen und weitere beispiele)

edit: 2. anzeigebeispiel eingefügt und korrigiert

Starwar

BeitragDo, Feb 26, 2009 21:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Sieht gut aus, nur im Beispiel:
Code: [AUSKLAPPEN]
Repeat
   Cls
   bc_update()
   draw_clock(10,200)
   draw_clock2(100,230,30)
   WaitTimer(timer)
   Flip 0
Forever

Das ist ne Endlosschleife...Razz
MFG

EDIT
Ja, ich find den Code gut, aber ich kann die Kreise nicht wirklich Stunde/Minute/Sekunde zuordnen.
  • Zuletzt bearbeitet von Starwar am Do, Feb 26, 2009 21:40, insgesamt einmal bearbeitet
 

da_poller

BeitragDo, Feb 26, 2009 21:38
Antworten mit Zitat
Benutzer-Profile anzeigen
ich weiß,

dumme angewohnheit ich drück immer aufs X is ja fenstermodus Smile

wie findest du und der rest des forums den code?

SpionAtom

BeitragFr, Feb 27, 2009 2:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ganz überspitzt kann man auch sowas machen: 191b (Dank Holzchopf, der wusste, dass man manche Doppelpunkte weglassen kann!)
Und nochmal ein paar Bytes rausgekitzelt, weil keine mehrstelligen Zahlen mehr verwendet^^.
Code: [AUSKLAPPEN]
SetBuffer BackBuffer()While 1Cls:For i=1To 8z=4If i=1z=2ElseIf i=4Or i=7z=3
If i Mod 3For j=1To z:Oval 9+9*i,9+9*(4-j),9,9,Mid(Right(Bin(Mid(CurrentTime(),i,1)),4),5-j,1)Next
Next:Flip:Wend


Ach, und wers nicht lesen kann: Wiki weiß alles
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080
 

da_poller

BeitragSa, Feb 28, 2009 20:40
Antworten mit Zitat
Benutzer-Profile anzeigen
spion kannst du den code auch mal leserlich formatieren? ich dacht das codearchiv soll nciht nur codes sondern auch lektionen vermiteln(ich zumindest hab viel im CA gefunden woraus ich lernen konnte)
 

DjDETE

BeitragSa, Feb 28, 2009 21:49
Antworten mit Zitat
Benutzer-Profile anzeigen
sieht gut aus, ich müsste noch irgendwo 'ne binäre Uhr für die Taskleiste rumliegen haben (B+), vlt finde ich sie.
MfG
Aktuelles Projekt: XXX |XXX | 3% der v1b fertig
www.emu-soft.de.vu Für die Homepage suche ich noch Linktauschpartner, bei Interesse einfach melden.
 

FWeinb

ehemals "ich"

BeitragSa, Feb 28, 2009 21:52
Antworten mit Zitat
Benutzer-Profile anzeigen
@da_poller
Der Code von SpionAtom soll nur Zeigen wie kurz man das Zeichnen einer Binäruhr machen kann.

Und das Formatiren von den 4 Zeilen Code sollte eig kein Problem, für dich sein.

mfg

ich
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group