Seite 1 von 1

Verknüpfen

Verfasst: 12.05.2009 19:35
von saphc
Huhu,

Ich möchte auch gerne mal etwas fragen, falls es simpel ist, bitte nicht lachen. ;)

Und zwar: Wie kann ich Pure-Basic Code miteinander verknüpfen, da ich auch von anderen Programmiersprachen, bis auf ( PHP; HTML ) und vor einigen Jahren mal ansatzweise Java habe ich keinen Ansatzpunkt.

Gedacht habe ich mir das so:

Ich führe einen Code mit dem Compiler aus, z.B. eine For : Next Schleife, wie in diesem Beispiel eine Zeitrechnung. Da der Code noch keine Stop Funktion hat bitte in der IDE mit "Kill-Programm" beenden.

Code: Alles auswählen

If OpenWindow(0, 0, 0, 300, 200, "Zeitrechner")

  ButtonGadget(1, 10, 10, 200, 20, "Standard Button") 
    Repeat
    
     Event1 = WaitWindowEvent()
     
     Select Event1
     
       Case #PB_Event_Gadget
         
         Select EventGadget()
           Case 1 : Goto Stop
         EndSelect
     EndSelect   

  Jahr.l = 2000
  
  Monat.l = 1
  
  Datum:
  

  
  For Tag.l = 1 To 30
   
  If Tag = 1 
  TagString.s = "1. "
  
  ElseIf Tag = 2 
  TagString.s = "2. "
  
  ElseIf Tag = 3 
  TagString.s = "3. "
  
  ElseIf Tag = 4 
  TagString.s = "4. "
  
  ElseIf Tag = 5 
  TagString.s = "5. "
  
  ElseIf Tag = 6 
  TagString.s = "6. "
  
  ElseIf Tag = 7 
  TagString.s = "7. "
  
  ElseIf Tag = 8 
  TagString.s = "8. "
  
  ElseIf Tag = 9 
  TagString.s = "9. "
  
  ElseIf Tag = 10 
  TagString.s = "10. "
  
  ElseIf Tag = 11 
  TagString.s = "11. "
  
  ElseIf Tag = 12 
  TagString.s = "12. "
  
  ElseIf Tag = 13 
  TagString.s = "13. "
  
  ElseIf Tag = 14 
  TagString.s = "14. "
  
  ElseIf Tag = 15 
  TagString.s = "15. "
  
  ElseIf Tag = 16 
  TagString.s = "16. "
  
  ElseIf Tag = 17 
  TagString.s = "17. "
  
  ElseIf Tag = 18 
  TagString.s = "18. "
  
  ElseIf Tag = 19 
  TagString.s = "19. "
  
  ElseIf Tag = 20 
  TagString.s = "20. "
  
  ElseIf Tag = 21 
  TagString.s = "21. "
  
  ElseIf Tag = 22 
  TagString.s = "22. "
  
  ElseIf Tag = 23 
  TagString.s = "23. "
  
  ElseIf Tag = 24 
  TagString.s = "24. "
  
  ElseIf Tag = 25 
  TagString.s = "25. "
  
  ElseIf Tag = 26
  TagString.s = "26. "
  
  ElseIf Tag = 27 
  TagString.s = "27. "
  
  ElseIf Tag = 28 
  TagString.s = "28. "
  
  ElseIf Tag = 29 
  TagString.s = "29. "
  
  ElseIf Tag = 30 
  TagString.s = "30. "
  
  EndIf
  
  If Monat = 1
  MonatString.s = "Januar, "
  
  ElseIf Monat = 2 
  MonatString.s = "Februar, "
  
  ElseIf Monat = 3 
  MonatString.s = "März, "
  
  ElseIf Monat = 4 
  MonatString.s = "April, "
    
  ElseIf Monat = 5 
  MonatString.s = "Mai, "
    
  ElseIf Monat = 6 
  MonatString.s = "Juni, "
    
  ElseIf Monat = 7
  MonatString.s = "Juli, "
    
  ElseIf Monat = 8 
  MonatString.s = "August, "
    
  ElseIf Monat = 9 
  MonatString.s = "September, "
    
  ElseIf Monat = 10 
  MonatString.s = "Oktober, "
    
  ElseIf Monat = 11 
  MonatString.s = "November, "
   
  ElseIf Monat = 12 
  MonatString.s = "Dezember, "
  
  EndIf
  
  If Jahr = 2000
  JahrString.s = "2000"
  
  ElseIf Jahr = 2001
  JahrString.s = "2001"
  
  EndIf
  
  TextGadget(0, 190,  5, 105, 25, TagString + MonatString + JahrString, #PB_Text_Right)
  
  Delay(25)
  
  Next
  
  If Tag = 31
      Monat +1
  EndIf
  
  If Monat = 13
      Jahr + 1
      Monat = 1
  EndIf
  
  Goto Datum:
  
  Stop:
  
  Until StopGadget = Stop
  
  EndIf


Die Zeitrechnung funktioniert ja schonmal, nur stellt sich mir nun die Frage ob das so sinnvoll gelöst ist, weil wenn ich z.B. will das jeden Monat etwas passiert, dann kann ich das durch die Endlosschleifen der Zeitrechnung vergessen. Daher: Wie kann ich verknüpfen, dass ich Monat.l für eine andere .exe anwenden kann, sodass diese Endlosschleife mit anderen Gadgets aus anderen executables synchron laufen kann?

Sonstige Vorschläge nehme ich natürlich gerne entgegen und wenn jemand eine Idee hat wie ich das Problem mit den Jahren in den Griff kriege, dann wäre ich auch dankbar, denn eine If-Schleife mit 500 Optionen bis zum Jahre 2500 würde ja viel Speicher fressen oder? xD

saphc

Edit by NicTheQuick: Codetags gesetzt

Verfasst: 12.05.2009 20:10
von ts-soft
> nur stellt sich mir nun die Frage ob das so sinnvoll gelöst ist
Nein, in keinem Fall.

Erstmal sollteste den Code kürzen indem Du z.B. DataSection verwendest:

Code: Alles auswählen

DataSection
  TagString:
  Data.s "1. ", "2. ", "3. " ; ...
  Data.s ""
  MonatsString:
  Data.s "Januar, ", "Februar, " ; ...
  Data.s ""
  JahresString:
  Data.s "2000", "2001"
  Data.s ""
EndDataSection

Define TagString.s, tmp.s
Restore TagString
Repeat 
  Read.s tmp
  If tmp <> ""
    TagString + tmp + ";"
  EndIf
Until tmp = ""

Define i
Debug "TagStrings:"
For i = 1 To CountString(TagString, ";")
  Debug StringField(TagString, i, ";")
Next

Define MonatsString.s
Restore MonatsString
Repeat 
  Read.s tmp
  If tmp <> ""
    MonatsString + tmp + ";"
  EndIf
Until tmp = ""

Debug ""
Debug "MonatsString:"
For i = 1 To CountString(MonatsString, ";")
  Debug StringField(MonatsString, i, ";")
Next
StringField erspart Dir tausende von Ifs :wink:

Goto ist bäh bäh
Deine Eventschleife erzeugt unter Umständen einen Hitzetod der CPU :mrgreen:

TimerCallback oder ähnlich sollte helfen, so ist der Code nicht anwendbar.

Re: Verknüpfen

Verfasst: 12.05.2009 20:13
von Kiffi
saphc hat geschrieben:Ich möchte auch gerne mal etwas fragen
ja, hast Du denn auch schon Deine Support-Gebühr bezahlt? :-)
saphc hat geschrieben:
Wenn ich mir den Code anschaue, bin ich mir sicher, dass man ihn auf
wenige Zeilen verkürzen kann, aber ehrlich gesagt habe ich jetzt nicht
kapiert, was Du mit Deinem Programm eigentlich bezwecken willst.

Wenn Du das noch mal kurz erklären könntest, bin ich mir sicher, dass Du in
Kürze auch zahlreiche Antworten erhältst.

Grüße ... Kiffi

Verfasst: 12.05.2009 20:27
von saphc
schonmal danke für die Antwort, die Code-Verkürzung ist eine gute Idee :D

Was ich mit dem Code erreichen will? Nennen wir es eine Echtzeit-Berechnung. Ich wollte verschiedene Geschwindigkeiten einfügen z.B. mit (Delay)*2/3/4 etc. die im Programm frei wählbar sind. Und nach jedem Monat bekäme dann der Benutzer z.B. 2 Goldstücke pro Mensch und die Menschen die pro Monat dazukämen würden per Zufall ermittelt werden. Diese beiden Variablen sind auch nicht das Problem, nur verstehe ich nicht wie ich das mit der Echtzeit verknüpfe, das es quasi eine Endlosschleife ist. Ich hoffe man kann mich verstehen.

Ein Beispiel in Textform

Monat 1: 20 Menschen 40 Gold
Monat 2: 30 Menschen 60 Gold

und das während das Programm nicht gestoppt werden soll, es sei denn ich betätige den entsprechenden Button.

Verfasst: 12.05.2009 21:18
von Kaeru Gaman
auch von mir Willkommen im Board!

Du wirst meistens in irgendeiner Form mit Schleifen arbeiten.
Also, so gut wie jedes Programm hat eine Hauptschleife, in der die hauptsächlichen Funktionen ablaufen und von dem der ganze Rest aufgerufen wird.

In den wenigsten Fällen wird das eine Endlosschleife sein.

Was meinst du mit "Echtzeit"...?

also, ich vermute einfach mal, dass du von irgendeiner Virtuellen Zeitlinie sprichst, und nicht dass deine Monate echte Monate sind.

und wafür dann eine andere exe?


also sorry, wenn ich jetzt so viele Rückfragen stelle, aber ich finde es sinnvoller,
wenn ich erstmal halbwegs eine Vorstellung davon habe, worauf du hinaus willst,
bevor ich dir jetzt Achtzehn Stunden lang das Krieg-und-Frieden der Programmierung erzähle
und nachher brauchst du davon ganix.