text: Verfasst am: 16.04.2016, 18:57 Titel:
  So, hat etwas länger gedauert... aber jetzt:
  Manchmal komm ich mir vor wie ein Unruhestifter, dass ist aber nicht meine Absicht
  Falls das als Kritik rübergekommen sein sollte, bitte ich um Entschuldigung, das war ganz und gar nicht so gemeint, ich wollte lediglich meinen Gedankengang erläutern.
  Du musst dich bei mir gar nicht Entschuldigen sondern ich mich eher bei dir! Irgendwie hab ich nämlich was falsch verstanden, da hier munter mit FB weiter Programmiert wurde und nicht mit QuickBASIC 4.5 (das Speicherplatzproblem hätte man damit ja gelöst), entstand bei mir der Eindruck das das gesamte Spiel in FB neu Aufgebaut wird. So sind meine Vorschläge bezüglich Menü/Grafik System natürlich Blödsinn!
  @Schnism: Könntest du die Pfadangabe nicht durch eine Konstante ersetzten? Ich verwende z.B. den Dosemulator unter Linux und Speichere alles im User Verzeichnis und das wird als Laufwerk D angesprochen. So könnte jeder das Programm da hin Braten wo er will und müsste nur noch die Konstante anpassen!?
  Verfasst am: 16.04.2016, 22:11 Titel:
  Hey Elor
  Tu das doch selbst? Ich weiss nichtmal genau, was du damit meinst.
  Verfasst am: 17.04.2016, 12:28 Titel:
  Schnism hat Folgendes geschrieben:
  Tu das doch selbst? …
  Ich muss die Pfade ja anpassen, sonst kann ich das Programm gar nicht Ausführen. Wäre es nicht besser das im Projekt zu machen?
  … Ich weiss nichtmal genau, was du damit meinst.
  In deinen drei Programmteilen werden ja Dateien zum lesen und schreiben geöffnet wobei hier Laufwerk, Pfad und Dateiname angegeben werden. Laufwerk und Pfad würde ich entweder durch eine Konstante am Anfang jeder Datei ersetzten, z.B:
  Const Path = "C:\QB45GER\"
  oder eine Variable verwenden die eine Umgebungsvariable List, dann müsste im Code gar nichts mehr verändert werden.
  Verfasst am: 02.05.2016, 20:21 Titel:
  *klopf* noch jemand da?
  Verfasst am: 03.05.2016, 10:23 Titel:
  Sicher doch. Nur bin ich im Augenblick vollauf damit beschäftigt, meinen fahrbaren Untersatz in einen HU - kompatiblen Zustand zu versetzen. Da bleibt zum Programmieren momentan nicht viel Zeit (dengeln statt tippen ).
  Außerdem konnte ich nicht widerstehen, mich zwischendurch an einem kleinen Wettbewerb zu beteiligen. Wenn also jemand einen schnellen Stringparser braucht...
  http://www.freebasic.net/forum/viewtopic.php?f=3&t=24563
  Aber ich bleibe natürlich dran.
  Verfasst am: 22.05.2016, 11:47 Titel:
  So, jetzt ist die Simulation endlich ein "richtiges" Projekt mit einem entsprechenden Thread.
  Verfasst am: 25.05.2016, 00:04 Titel:
  Ok. Beteiligt sich denn da wer?
  Verfasst am: 25.05.2016, 06:52 Titel:
  Du doch, hoffe ich. Und auch alle anderen, die hier bisher mitgetestet und Tips gegeben haben.
  Ich probiere übrigens gerade, ob es praktikabel ist, jedes "Krieger" - Objekt in einem eigenen Thread agieren zu lassen. Bis jetzt muß ja jede Aktivität von außen angestoßen werden. Wie man einen Thread aus einem Objekt heraus startet, habe ich inzwischen herausgefunden, und auch, wie man dann aus dem Thread heraus auf die nicht statischen Variablen des Objekts zugreift. Ist jetzt nur die Frage, was das Betriebssystem zu mehreren hundert (oder auch tausend) gleichzeitig laufenden Threads sagt, und ob das nicht wegen der notwendigen Mutexe die Ausführungsgeschwindigkeit beeinträchtigt.
  Allerdings beschleicht mich mittlerweile eine leise Ahnung, daß ich damit mehr Probleme schaffe als löse.
  Verfasst am: 25.05.2016, 09:44 Titel:
  Da es ein "altes" Spiel ist und auch nicht zu absoluten ungerechtigkeiten kommen soll, ist eine Begrenzung des Militärs eh sinnvoll. Das kann man am Rang oder auch der Bevölkerungsmenge festmachen.
  Auch sind alle Milizen mit einer zufälligen stärke ausgestattet (als gesamteinheit) und die Bewaffnung ist ebenfalls gleich.
  Jedem einzelnen Soldaten seine Stärke zuzuweisen halte ich für unzweckmässig im Hinblick, dass es kein Kriegsspiel sein soll. Es soll schon noch eine Wirtschaftssimulation mit Kriegerischen Elementen bleiben..
  Somit muss (soll) es gar keine unendlichen Soldatenmengen geben.
  Verfasst am: 26.05.2016, 01:50 Titel:
  Ich fürchte, da hast du mich jetzt missverstanden. Thread bedeutet -etwas verkürzt formuliert- daß eine Sub oder Function als eigenes Programm ausgeführt wird, parallel zum Hauptprogramm. Jeder "Krieger" auf dem Schlachtfeld wäre also quasi ein separates, selbständig agierendes Programm. Der Vorteil wäre, daß bei Mehrkernprozessoren die komplette Prozessorleistung genutzt werden könnte und nicht nur ein Kern, wie im Augenblick.
  Verfasst am: 26.05.2016, 13:46 Titel:
  Ah super.. wieder etwas, was sich ausserhalb meines geistigen Horizonts befindet.
  Gut, dann will ich nichts gesagt haben
  Verfasst am: 26.05.2016, 21:03 Titel: Thread Pool
  Wahrscheinlich noch effizienter wird es in diesem Fall, wenn man thread pools (worker pool) verwendet.
  Verfasst am: 27.05.2016, 03:17 Titel:
  Ja, ich denke auch, für jeden Krieger einen eigenen Thread zu erzeugen wäre eher kontraproduktiv. Am besten ist es wohl, ich bringe das Programm erst einmal zum Laufen, bevor ich mir Gedanken um Performanceverbesserungen mache.
  Verfasst am: 08.06.2016, 07:19 Titel:
  Ich möchte gerne soetwas wie Diplomatie einbringen.
  Dazu gehört für mich das Senden einer Nachricht von einem Spieler zum Anderen.
  Soweit, so gut. Mit zwei Spielern klappt das auch sehr gut.
  Es sieht ungefähr so aus:
  GOSUB seitenstart: COLOR 3: LOCATE 3, 1: PRINT "Willkommen im Diplomatenmenü"
  LOCATE 5, 1: PRINT "Hier haben Sie die Möglichkeit, mit ihren Kontrahenten kontakt aufzunehmen."
  PRINT : a2temp = a2
  FOR t = 1 TO a4 #a4 = Spielermenge von 1 - 6
  IF t <> a2 THEN COLOR 3: PRINT "Wollen sie "; : COLOR 15: PRINT mw$(t); name$(t); land$(t); : COLOR 3: PRINT " kontaktieren?(j/n)"; :
  IF t = a2 THEN COLOR 3: PRINT "Sie k"nnen sich nicht selbst kontaktieren "
  DO: key$ = INKEY$
  IF key$ = "n" THEN GOTO 1010
  IF key$ = "j" AND t <> a2 THEN a3 = t: GOSUB nachricht: EXIT FOR
  IF key$ = "0" THEN GOTO seitenstart
  LOOP WHILE key$ = ""
  1010 NEXT t: a2 = a2temp: GOTO zurück
  GOSUB seitenstart: COLOR 3
  PRINT : PRINT "Sie haben folgende Möglichkeiten:": PRINT
  REM COLOR 4: PRINT "1. "; mw$(a3); name$(a3); land$(a3); " beschenken (to be continue)"
  COLOR 3: PRINT "1. "; mw$(a3); name$(a3); land$(a3); " Nachricht senden"
  LOCATE 30, 1: COLOR 15: PRINT "0 für zurück!";
  IF key$ = "1" THEN nachrichtsenden
  REM IF key$ = "2" THEN schenken
  nachrichtsenden:
  PRINT : PRINT "Geben Sie den Text ein, den Sie senden wollen"
  INPUT diplomatentext$(a3)
  Und im nachrichtsenden ist das eigentliche Problem.
  Wenn ich Spieler 1 bin, und 3 gesamt mitspielen, und Spieler zwei und Spieler 3 mir eine Nachricht senden, wird nur die nachricht von Spieler 3 an mich gesendet, da sie "überschrieben" wird.
  Ich weiss, das es da irgendetwas gibt wie dimplomatie$(a2,a2) oder man das dimplomatie$ immer mit z.b 100 zeichen auffüllt, und alle 100 zeichen im String einen "schnitt" macht und beide oder auch nur den mit Text gefüllten anzeigt.
  Aber das hab ich nie begriffen
  ich hoffe, das war einigermassen klar
  Verfasst am: 08.06.2016, 10:32 Titel:
  Ich denke, ein 2-dimensionales Array wäre die einfachste Lösung des Problems. Eingerichtet würde das Array dann mit
  DIM SHARED diplomatentext$(<Anzahl der Spieler>,<Anzahl der Spieler>)
  der Zugriff erfolgt dann in der Form
  diplomatentext$(von,an)
  wobei bei Schreibzugriffen jeder Spieler als "von" nur seinen eigenen Index benutzen darf, bei Lesezugriffen entsprechend für "an" nur seinen eigenen Index, also
  PRINT diplomatentext$(<Index des Absenders>,<eigener Index>) 'zum Lesen
  INPUT diplomatentext$(<eigener Index>,<Index des Empfängers>) 'zum Senden
  Verfasst am: 08.06.2016, 13:39 Titel:
  Einbauen tu ich das in dem Kotext wie genau?
  INPUT diplomatentext$(a2,derandere) # a2 = ich, derandere = ausgewählte Empfänger
  und auslesen?
  IF diplomatentext$(derandere,a2) = "" THEN RETURN
  COLOR 15: LOCATE 11, 1: PRINT "Ihnen wurde eine Nachricht von Ihrem Diplomaten überreicht"
  COLOR 3: LOCATE 13, 1: PRINT diplomatentext$(derandere,a2)
  diplomatentext$(derandere,a2) = "": GOTO zurück
  Ich versteh dann aber noch nicht, wie ich als Spieler 2 beides, von Spieler 1 und Spieler 3 ausgeben kann, wenn denn was drinsteht. (Nach ausgabe setze ich das eigentlich auf "" )