Verknüpfen

Anfängerfragen zum Programmieren mit PureBasic.
saphc
Beiträge: 3
Registriert: 12.05.2009 17:11

Verknüpfen

Beitrag 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
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Verknüpfen

Beitrag 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
a²+b²=mc²
saphc
Beiträge: 3
Registriert: 12.05.2009 17:11

Beitrag 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.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten