Tage zählen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

ToeB

Betreff: Tage zählen

BeitragFr, Nov 24, 2006 21:55
Antworten mit Zitat
Benutzer-Profile anzeigen
wie krig ich dat hin, ich möchte eine Tages anzeige erstellen, so als ob im spiel ein neuer tag beginnt, nur das dieser auch angezeigt wird... Exclamation Question
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

NightPhoenix

BeitragFr, Nov 24, 2006 22:18
Antworten mit Zitat
Benutzer-Profile anzeigen
willst du einen optischen Tageswechsel, oder eine Anzeige für die Zeit (z.b. für eine Uhr im Game)??
Bisschen klarer ausdrücken bitte Wink
MfG.
 

0penguin0

BeitragFr, Nov 24, 2006 22:19
Antworten mit Zitat
Benutzer-Profile anzeigen
versteh ich nicht ganz... willst du, dass wenn man 30 min. spielt die sonne langsam untergeht und der mond auf oder wie?!?
i never finish anyth

ToeB

BeitragFr, Nov 24, 2006 22:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich will das da ne Zeitanzeige ist, die, wenn z.b. 10 min rum sind dann auf denn nächsten tag "Überspringt".
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

NightPhoenix

BeitragFr, Nov 24, 2006 22:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
while not keyhit(1)


a=120+(sin(millisecs()/60000)*120) ; Verändere die 60000 um die Zeit zu verändern!
ambientlight a,a,a

; die +120 beim a= seht dafür, dass die Zahl die durch die Sinuskurve erzeugt wird, nicht in den Minus(-)Bereich geht (erzeugte Schwingung von -120 bis +120 >>> durch +120 also jetz 0-240)

Das ist für das Licht.... (obiger Code)

Eine Anzeige für die Zeit als Text... mmh....
Code: [AUSKLAPPEN]
b=1
if a=0 then b=b+1


UpdateWorld
RenderWorld

Text 0,20,"Es ist nun der Tag "+b

Flip
Wend



Habe es nicht getestet aber müsste funktionieren

ToeB

BeitragFr, Nov 24, 2006 22:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab ich getestet, aber der mach da nur fehler...
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

NightPhoenix

BeitragFr, Nov 24, 2006 22:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Präzieser... Very Happy
Du sprichst in Rätseln ^^
Welche Fehler?

mas93

BeitragFr, Nov 24, 2006 22:42
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn ich das richtig versteh willst du das wenn man 10 min gespielt hat das dann da steht
" Tag : Montag "
" Zeit : 12.00 "
oder???
dann:
Code: [AUSKLAPPEN]

tag=1;montag
if tag = 1 then print"montag"
if tag = 2 then print"dienstag"
...
...
...
if zeit = 24.00 then tag = tag+1
if tag > 7 then tag = 1
if zeit > 24.00 then zeit = 0.01
print tag
print zeit

dann solltest du eben noch einbauen dasdie variable zeit jede 1000 millisecs um 1 erhöht wir
ich denke dann is es das was du möchtest.

ToeB

BeitragFr, Nov 24, 2006 22:43
Antworten mit Zitat
Benutzer-Profile anzeigen
mhmm, könnte sein...
probier ich ma aus...
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!
 

0penguin0

BeitragFr, Nov 24, 2006 23:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Crack93 hat Folgendes geschrieben:
Ich will das da ne Zeitanzeige ist, die, wenn z.b. 10 min rum sind dann auf denn nächsten tag "Überspringt".


meinst du sowas:

Code: [AUSKLAPPEN]

wiederhole

     wenn jetziger_zeitpunkt-startzeit > dauer_eines_tages dann tag = tag + 1


solange nicht ende


sorry, ich versteh dein problem ehrlich gesagt nicht...
i never finish anyth
 

Mr Hopp

BeitragSa, Nov 25, 2006 1:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weiß au net was du wirklich willst, aber hier ein Beispiel (auf 1 minute gekürzt)

Code: [AUSKLAPPEN]
Graphics 400,300,16,2
SetBuffer BackBuffer()

day_start=MilliSecs()   ;Startpunkt für Zeitmessung
tag=1               ;Wir starten Montags
tag_str$="Montag"

;******************************+HAUPTSCHLEIFE*****************************************************
Repeat
Cls

;-----------------------------------------------------------------------------------------
;Berechnungen

day_time=MilliSecs()-day_start;Ganz wichtig, hier wird die Zeit geupdatet

stunden=Int(Floor#(day_time*0.0004));Berechnet die Stunden (24/60000=0.0004; daher dieser Faktor)
minuten=Int((day_time*0.0004-stunden)*60);Die Geammtzeit minus die vollen Stunden * 60 ergibt die minuten

stunden_$="" ;Leert die Zusatzstrings
minuten_$=""
If stunden<10 Then stunden_$="0" ;Fügt eine Null vor den String, falls er zu klein ist (z.B.: aus 9 wird 09)
If minuten<10 Then minuten_$="0"

zeit$=stunden_$+Str$(stunden)+":"+minuten_$+Str$(minuten);Erstellt den finalen String

;Es wird hell....
If day_time<30000 Then ClsColor day_time*0.0085,day_time*0.0085,day_time*0.0085
;Es wird dunkel....
If day_time>30000 Then ClsColor 510-day_time*0.0085,510-day_time*0.0085,510-day_time*0.0085

If day_time>60000 Then ;Wenn der Tag vorbei ist, dann:
day_start=MilliSecs()  ;Beginnt er HIER neu,
tag=tag+1            ;wird der nächste Wochentag gewählt
If tag>7 Then tag=1
If tag=1 Then tag_str$="Montag"
If tag=2 Then tag_str$="Dienstag"
If tag=3 Then tag_str$="Mittwoch"
If tag=4 Then tag_str$="Donnerstag"
If tag=5 Then tag_str$="Freitag"
If tag=6 Then tag_str$="Samstag"
If tag=7 Then tag_str$="Sonntag"
EndIf

;------------------------------------------------------------------------------------------
;Ausgaben

Text 200,150,tag_str$+", "+zeit$,1,1+" Uhr" ;Hauptausgabe (Wochentag+Uhrzeit)

;Nur ein paar Ausgaben zur Hilfe - nicht nötig ;)
Color 255,0,0
Text 0,0,"Systemtageszeit "+day_time
Text 0,20,"Umrechnungszeit: "+day_time*0.0004

Flip
Until KeyHit(1)


Ich weiß...Zeitberechnung ist kompliziert...aber versuche bitte ERST den Code zu verstehen und DANN nochmal nachzufragen, wenn du's net gleich kapierst Wink
Zitat:
Wie poste ich falsch?

Nachdem ich Google, die FAQ's und die Boardsuche erfolgreich ignoriert habe, erstelle ich zwei bis fünf neue Themen, in den falschen Unterforen, mit kreativen Titeln und undeutlichem Text, unter dem sich jeder etwas anderes vorstellen kann.

TheMatrix

BeitragSa, Nov 25, 2006 1:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Meinst du so etwas eventuell?

Hatte mal langeweile und hatte mal eine Funktion von mir ein wenig modifiziert Very Happy

Code: [AUSKLAPPEN]

Graphics 600,400,16,2
Dim monate(12) : Global schaltjahr=28
monate(1)=31 : monate(2)=29 : monate(3)=31
monate(4)=30 : monate(5)=31 : monate(6)=30
monate(7)=31 : monate(8)=31 : monate(9)=30
monate(10)=31 : monate(11)=30 : monate(12)=31
; -------------------- Synonyme ------------------
; %jahr  = Das Jahr wird voll ausgeschrieben
; %jj    = Das Jahr wird verkürzt angezeigt
; %monat = Der Monat wird voll ausgeschrieben
; %month = Der Monat wird verkürzt gezeigt
; %tag   = Der Tag wir voll ausgeschrieben
; %tt    = Die ersten zwei Buchstaben des Tages
; %dd    = Der Tag wird als Zahl zurückgegeben
; %hh    = Stunden
; %mm    = Minuten
; %ss    = Sekunden

timer = 0
tag = 1 : monat = 1 : jahr = 1980
Global current_time$

Global current_date$ = "01 Jan 1980"
While Not KeyHit(1)
Cls
sekunden = sekunden+8000 ; <-- gameSpeed

If sekunden >=86400
 sekunden = sekunden-86400
 tag = tag+1
 If tag>monate(monat) Then tag = 1 : monat=monat+1
 If monat>12 Then monat=1 : jahr = jahr+1
 
 If tag<10   Then a$ = "0"+tag   Else a$ = tag
 c$ = jahr
 current_date$ = a$ +" "+ monatname$(monat) +" "+ c$
End If

hh = sekunden / 3600       : If hh<10 Then h$ = "0"+hh Else h$ = hh
mm = (sekunden-hh*3600)/60  : If mm<10 Then m$ = "0"+mm Else m$ = mm
ss = sekunden Mod 60   : If ss<10 Then s$ = "0"+ss Else s$ = ss

current_time$ = h$+":"+m$+":"+s$
draw_clock(220,20,200)
   Text  320,240,uhranzeige$("%tt %hh:%mm:%ss %dd, %tag %month %jahr"),1
Flip
Wend

Function uhranzeige$(zeile$)
time$ = current_time$
date$ = current_date$
hh$ = Left$(time$,2) : mm$ = Mid$(time$,4,2) : ss$ = Right$(time$,2)
dd$ = Left$(date$,2) : month$ = Mid$(date$,4,3) : jahr$ = Right$(date$,4)
jj$ = Right$(jahr$,2) : monat$ = monatname$(month$)
tag$ = getTag$(dd,monatzahl(month$),jahr)
tt$ = Left$(tag$,2)
For a=1 To Len(zeile$)
st$ = Mid$(zeile$,a,1)

If read_befehl=1
 befehl$=befehl$+st$
 Select befehl$
  Case "hh" : n$ = hh$
  Case "mm" : n$ = mm$
  Case "ss" : n$ = ss$
  Case "jj" : n$ = jj$
  Case "dd" : n$ = dd$
  Case "month" : n$ = month$
  Case "tt" : n$ = tt$
  Case "tag" : n$ = tag$
  Case "monat" : n$ = monat$
  Case "jahr" : n$ = jahr$
 End Select
 If n$<>"" Then anzeige$=anzeige$+n$ : n$="" : read_befehl=0 : befehl$=""
Else
 If st$<>"%" Then anzeige$=anzeige$+st$
End If

If st$="%" Then read_befehl=1
Next

Return anzeige$
End Function


Function monatname$(mon$)
 Select mon$
  Case "Jan" : monat$="Januar"
  Case "Feb" : monat$="Februar"
  Case "Mar" : monat$="März"
  Case "Apr" : monat$="April"
  Case "May" : monat$="Mai"
  Case "Jun" : monat$="Juni"
  Case "Jul" : monat$="Juli"
  Case "Aug" : monat$="August"
  Case "Sep" : monat$="September"
  Case "Oct" : monat$="Oktober"
  Case "Nov" : monat$="November"
  Case "Dec" : monat$="Dezember"
 End Select

 If mon>0
  Select mon
   Case 1 : monat$ = "Jan"
   Case 2 : monat$ = "Feb"
   Case 3 : monat$ = "Mar"
   Case 4 : monat$ = "Apr"
   Case 5 : monat$ = "May"
   Case 6 : monat$ = "Jun"
   Case 7 : monat$ = "Jul"
   Case 8 : monat$ = "Aug"
   Case 9 : monat$ = "Sep"
   Case 10 : monat$ = "Oct"
   Case 11 : monat$ = "Nov"
   Case 12 : monat$ = "Dec"
  End Select
 End If

 Return monat$
End Function
Function monatzahl(mon$)

 Select mon$
  Case "Jan" : m=1
  Case "Feb" : m=2
  Case "Mar" : m=3
  Case "Apr" : m=4
  Case "May" : m=5
  Case "Jun" : m=6
  Case "Jul" : m=7
  Case "Aug" : m=8
  Case "Sep" : m=9
  Case "Oct" : m=10
  Case "Nov" : m=11
  Case "Dec" : m=12
 End Select
Return m

End Function
Function getTag$(tag,monat,jahr)
 start_jahr = 1980 : start_tag=1
 dif_jahre = jahr-start_jahr
 schalt_jahre = dif_jahre/4

 tage = (dif_jahre*365)+schalt_jahre


 normal_jahr = dif_jahre Mod 4 : If normal_jahr>0 Then normal_jahr=1 Else tage=tage-1

 For a=1 To monat-1
  If a=2 Then plus_tage=monate(2)-normal_jahr Else plus_tage=monate(a)
  tage=tage+plus_tage
 Next : tage=tage+tag
 If dif_jahre=0 Then tage=tage+1
 
 Select (tage+start_tag) Mod 7
  Case 0 : n$ = "Montag"
  Case 1 : n$ = "Dienstag"
  Case 2 : n$ = "Mittwoch"
  Case 3 : n$ = "Donnerstag"
  Case 4 : n$ = "Freitag"
  Case 5 : n$ = "Samstag"
  Case 6 : n$ = "Sonntag"
 End Select
 Return n$
End Function

Function draw_clock(x,y,s)
Color 255,255,255
mx = x + s/2
my = y + s/2
For a=0 To 11
 lx = mx+Sin(a*30)*s/2
 ly = my+Cos(a*30)*s/2
 Line lx,ly,lx-Sin(a*30)*4,ly-Cos(a*30)*4
Next
Oval x,y,s,s,0

st$ = current_time$
hh = Left$(st$,2) : mm = Mid$(st$,4,2) : ss = Right$(st$,2)

; Sekundenzeiger
Color 255,255,0 : Line mx,my,mx+Sin(ss*6)*(s-100)/2,my-Cos(ss*6)*(s-100)/2
; Minutenzeiger
Color 0,0,255 : Line mx,my,mx+Sin(mm*6)*(s-50)/2,my-Cos(mm*6)*(s-50)/2
; Stundenzeiger
Color 255,0,0 : Line mx,my,mx+Sin(hh*30)*s/2,my-Cos(hh*30)*s/2
End Function


Du kannst oben in current_date$ ein Start datum setzen. Das frühste Jahr was du nehmen kannst ist 1980. Den Monat musst du abgekützt in Englisch hinschreiben. Halte dich dabei genau an die Formatierung die schon vorgegeben ist. Über Uhranzeige kannst du dir jegliche Formatierung deiner persönlichen Zeitanzeige selbst zurechtlegen.

Der erhöhungswert für die Sekunden pro Umlauf, gibt dann sozusagen den Speed des Games an.

Wenn du das nun meintest, dann könnte ich mich eventuell dazu bewegen, den Code ordentlich für dich aufzuschreiben Wink
°_° °.° °~° °v° .. -.-
 

Mr Hopp

BeitragSa, Nov 25, 2006 13:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Nurmal zur Info: Er muss den Code LERNEN und nicht geschrieben bekommen Wink Ich hab ihn extra nicht so ausführlich geschrieben^^
Zitat:
Wie poste ich falsch?

Nachdem ich Google, die FAQ's und die Boardsuche erfolgreich ignoriert habe, erstelle ich zwei bis fünf neue Themen, in den falschen Unterforen, mit kreativen Titeln und undeutlichem Text, unter dem sich jeder etwas anderes vorstellen kann.

BladeRunner

Moderator

BeitragSa, Nov 25, 2006 15:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich finde es auch sehr lustig dass ein Schaltjahr bei Matrix 28 und ein normales 29 Tage im Februar hat.

Als vorgehen: Du ermittelst zum Start deines Games mit ql:millisecs() die Zeit.
Wenn du willst das alle 10 Minuten ein neuer Tag beginnt musst du zu diesem Wert 10min*60*sec*1000Millisec -> 600000 hinzuzählen. Wenn millisecs() größer als dieser Wert ist hat der neue Tag begonnen. Nun merkst Du dir diesen Wert und wartest auf den nächsten Tag, und so weiter und so fort.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

ToeB

BeitragSa, Nov 25, 2006 15:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Ey danke euch allen, ich habe das problem gelöst:
Code: [AUSKLAPPEN]

Repeat
Day = Day + 1
Print "Tag "+ Day
Delay 10000
Forever
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

BladeRunner

Moderator

BeitragSa, Nov 25, 2006 16:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Jop, und in der zeit des Delays macht dein Programm exakt NICHTS. Tolles Spiel.

Vergiss das also sofort wieder und mach es mit Millisecs.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Triton

BeitragSa, Nov 25, 2006 18:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Mr Hopp hat Folgendes geschrieben:


Code: [AUSKLAPPEN]
[langer code]



...

TheMatrix hat Folgendes geschrieben:

Code: [AUSKLAPPEN]

noch länger..






Crack93 hat Folgendes geschrieben:
Ey danke euch allen, ich habe das problem gelöst:
Code: [AUSKLAPPEN]

[5-Zeilen-Code]


Smile

Naja, damit das Programm nicht stehen bleibt, versuchs mal so:
Code: [AUSKLAPPEN]

;** Zeitzähler
;** 25.11.2006 by Triton
;** http://www.silizium-net.de

t=MilliSecs()

While Not KeyDown(1)
   diff=MilliSecs()-t
   If diff > 10000 Then
      Cls
      t=MilliSecs()
      day=day+1
   End If
   Text 10,10,   day+" Tage vergangen!"
   Text 10,40, "Der aktuelle Tag ist "+diff+" ms alt."
   Flip
   Cls
Wend


Smile
Coding: silizium-net.de | Portfolio: Triton.ch.vu

TheMatrix

BeitragSa, Nov 25, 2006 23:08
Antworten mit Zitat
Benutzer-Profile anzeigen
@BladeRunner
Du hast aber nur den Anfang des Codes gelesen. Wink

Später wird das Schaltjahr so verarbeitet, das da 29 rauskommt und für ein normales Jahr nur 28 Tage Wink

Naja, aber ein Versuch wars doch wert Razz .

Aber was haltet ihr generell von dem Code. Wäre er würdig in das Codearchive zu posten, wenn ich ihn entsprechend anpasse? Very Happy
°_° °.° °~° °v° .. -.-
 

Mr Hopp

BeitragSo, Nov 26, 2006 13:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich dachte er wollte einen ganz genauen tageswechsel mit Sonnenauf- und Untergang...deswegen son langer code Very Happy
Zitat:
Wie poste ich falsch?

Nachdem ich Google, die FAQ's und die Boardsuche erfolgreich ignoriert habe, erstelle ich zwei bis fünf neue Themen, in den falschen Unterforen, mit kreativen Titeln und undeutlichem Text, unter dem sich jeder etwas anderes vorstellen kann.

TheMatrix

BeitragSo, Nov 26, 2006 15:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Hehe, ich hab halt gleich ein wenig weiter gedacht Rolling Eyes

So kann er mit dem Code nicht nur einen Tageswechsel simulieren, sondern auch wissen, welcher Tag, Monat und welches Jahr es grad in seinem Spiel ist Laughing . Nagut, ich muss aber auch zugeben, dass das ein wenig übertrieben war Rolling Eyes .

Ich versuch halt immer gern zu helfen Very Happy .

mfg,TheMatrix
°_° °.° °~° °v° .. -.-

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group