[GELÖSTProgramm überprüft Bedingung erst beim zweiten Start?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

M0rgenstern

Betreff: [GELÖSTProgramm überprüft Bedingung erst beim zweiten Start?

BeitragDi, Jan 12, 2010 22:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey Leute, ich bin im Moment ne kleine Desktopuhr mit nem Überraschungseffekt am schreiben.
Und zwar will ich ein Bild anzeigen, das jeden Tag ein Stückchen weiter auf dem Bildschirm wandert.
Dazu lasse ich den Tag und Monat und die YPosition in einer Datei speichern und beim Start auslesen.
Wenn dann der Tag ungleich dem jetzigen Datum ist, dann soll er den y Wert verringern.
Aber irgendwie funktioniert das nicht richtig.
Also, ich starte das Programm, beende es, ändere meine Systemzeit und starte das Programm wieder.
Aber den yWert verändert er erst, wenn ich das Programm dann nochmal starte.

Hier ist mal ein Teil des Codes:

Code: [AUSKLAPPEN]
Local Exist = 0

Global AlterTag, AlterMonat, AltY

Global Uhrzeit$, Datum$, Tag$, Monat$
Global Day, Month

Global StartZeit = MilliSecs()
Global SaveTime = 1800000

Uhrzeit$ = CurrentTime()
Datum$ = CurrentDate()
Tag$ = Mid$(Datum$, 1, 2)
Monat$ = Mid(Datum$, 4, 3)
Day = Int(Tag$)
SetDate()

Exist = LoadData()

If Exist = 1 Then
   If AlterMonat = Month Then
      If AlterTag < Day Then
         HerzY = AltY-10
      ElseIf AlterTag = Day Then
         HerzY = AltY
      EndIf
   ElseIf AlterMonat < Month Then
      HerzY = AltY-15
   EndIf
EndIf

SaveData()


Danach geht er in die Hauptschleife über in der dann das Datum angezeigt wird und das Bild gemalt wird.

Hier sind noch die Funktionen von oben:

Code: [AUSKLAPPEN]
Function LoadData()
   
   Local Exist
   Local DateiSelbst
   
   DebugLog FileType("Data.txt")
   
   If FileType("Data.txt") = 1 Then
      
      Exist = 1
      
      DateiSelbst = ReadFile("Data.txt")
      
      AlterTag = ReadByte(DateiSelbst)
      AlterMonat = ReadByte(DateiSelbst)
      AltY = ReadInt(DateiSelbst)
      
      CloseFile(DateiSelbst)
      
   Else
      
      Exist = 0
      
      DateiSelbst = WriteFile("Data.txt")
      
      WriteByte(DateiSelbst, Day)
      WriteByte(DateiSelbst, Month)
      WriteInt(DateiSelbst, HerzY)
      
      CloseFile(DateiSelbst)
      
   EndIf
   
   Return Exist
   
End Function

Function SaveData()
   
   Local DateiSelbst
   
   DateiSelbst = WriteFile("Data.txt")
   
   WriteByte(DateiSelbst, Day)
   WriteByte(DateiSelbst, Month)
   WriteInt(DateiSelbst, HerzY)
   
   CloseFile(DateiSelbst)
   
End Function

Function SetDate()
   
   Monat$ = Lower$(Monat$)
   
   If Monat$ = "jan" Then Month = 1
   If Monat$ = "feb" Then Month = 2
   If Monat$ = "mar" Then Month = 3
   If Monat$ = "apr" Then Month = 4
   If Monat$ = "may" Then Month = 5
   If Monat$ = "jun" Then Month = 6
   If Monat$ = "jul" Then Month = 7
   If Monat$ = "aug" Then Month = 8
   If Monat$ = "sep" Then Month = 9
   If Monat$ = "oct" Then Month = 10
   If Monat$ = "nov" Then Month = 11
   If Monat$ = "dec" Then Month = 12
   
End Function



Kann sein, dass ich irgendwo nen Denkfehler drin hab.
Wäre also echt nett, wenn mir jemand helfen könnte.

Weil wenn ich drüber gucke, dann seh ich keinen Fehler.

Lg, M0rgenstern
  • Zuletzt bearbeitet von M0rgenstern am Di, Jan 12, 2010 22:55, insgesamt einmal bearbeitet

Midimaster

BeitragDi, Jan 12, 2010 22:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Leider sieht man nicht, wie du aus HerzY das Objekt verschiebst.

Ich vermute mal, es liegt daran, dass du HerzY nirgendwo definierst. z.b.

GLOBAL HerzY%

...am Anfang Deines Programms. Das führt dazu, dass der Versetzungsbefehl immer das alte HerzY vom Vortag kennt, während deine Änderungsroutine zwar HerzY verändert, aber dann eben nur abspeichert. Zurück im Hauptprogramm gilt dann wieder das alte HerzY. Erst nach dem Neustart wird HerzY aus der Datei gelesen und jetzt liegt der neue Wert vor.


Typisch BB-Coder: Bloß nix definieren?

Mach dir für jeden Variable Gedanken über ihren Geltungsbereich!

Nicdel

BeitragDi, Jan 12, 2010 22:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Typisch BB-Coder: Bloß nix definieren?

Das ist das schöne an BlitzMax: Es gibt Strict und SuperStrict. Das hilft wirklich enorm.
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

M0rgenstern

BeitragDi, Jan 12, 2010 22:28
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Wenn du dir den COde genau anguckst, dann wirst du sehen, dass dort HerzY = AltY-10 steht.
Also benutzt mein Hauptprogramm auch das HerzY das schon verändert wurde.
2. Ich deklariere bis auf ein, zwei Ausnahmen alle Variablen die ich brauche VORHER. Ich habs hier nur nicht für nötig gehalten, das mit einzubringen. Aber bitte: Code: [AUSKLAPPEN]
Global HerzX, HerzY
HerzX = GraphicsWidth()/2
HerzY = 605


Steht relativ weit oben, wo auch das Bild geladen wird.

Falls ich dich jetzt flalsch verstanden haben sollte, dann tut es mir leid.

Lg, M0rgenstern

Midimaster

BeitragDi, Jan 12, 2010 22:44
Antworten mit Zitat
Benutzer-Profile anzeigen
schade, dann war es das nicht...

dann rate ich dir, mal jeweils vor und nach...

- dem Laden des Wertes

- dem Abändern des HerzY

- dem Zeichnen des Image

ein DEBUGLOG " Vor dem Zeichnen: " + HerzY

...zu setzen und im Debugger zu prüfen, ob die Reihenfolge der Funktionen wie erwartet abläuft, bzw wo HerzY welchen Wert hatte.

Die 6 Ergebnisse kannste ja hier wieder reinsetzen. Event. auch mehr Code...

M0rgenstern

BeitragDi, Jan 12, 2010 22:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Also:
Debuglog gibt aus.
Vor loaddata() 605
Direkt nach Loaddata() 605
Nach dem Ändern 595
Nach SaveData() 595

Problem hat sich grade erledigt.
Ich hab gemerkt, dass ich die falsche Variable angezeigt bekomme.
Tut mir leid, mein Fehler.

Lg, m0rgenstern

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group