Simulator-Technik

Lange habe ich mir im Vorwege Gedanken über die technische Umsetzung des Projekts gemacht. Für ‘das Feeling’ werden Röhrenmonitore zum Einsatz kommen, die in die entsprechenden Konsolen eingebaut werden. Wie schon erwähnt, sollen alle Geräte nur duch Schalter, Taster, Drehregler e.t.c. bedient werden können. Eine Maus – wie bei normalen Spielen üblich – wird es nicht geben…

Wie erfasse ich externe Schaltzustände?
Für diesen Zweck gibt es Interfacekarten oder USB-Lösungen. Meistens bekommt man dafür eine DLL-Datei mit, damit man unter C++ zugriff auf die Interfaces bekommt. Nachteil: Der Kostenfaktor. Wenn irgendwann 300 Schalter und Taster erfasst werden müssen, wird es richtig teuer. Es musste also eine andere und vor allem günstigere Methode gefunden werden. Schließlich kam ich auf die Idee, es mit Joysticks umzusetzen. Dazu werden die Joysticks zerlegt und nur die Platine verwendet. Meine Schalter und Taster werden nun einfach an die Joystickplatine angelötet – also dort, wo normalerweise die Joystickbuttons einen Kontakt schließen. Funktioniert einwandfrei und das beste: Gebrauchte Joysticks bzw. Gamepads gibt es auf dem Flohmarkt für 1€ ;) Und die Erfassung der ‘Joystickzustände’ ist in C++ z.B. mit DirectX oder SFML eine Kleinigkeit…

 

Wie gebe ich Daten – wie z.B. Kurs, Tiefe e.t.c. auf externen Display aus?
Auch hier gibt es natürlich fertige Lösungen zu kaufen, die aber wieder viel Geld kosten würden. Nach etwas googeln fand ich allerdings Displays, die auch oft in PC-Gehäusen verbaut werden und u.a. CPU-Temperatur und Drehzal der Lüfter anzeigen. Diese Displays gibt es z.B. mit zwei oder vierzeiligen Anzeigen in verschiedenen Farben. Die meisten dieser Display werden durch einen Standard-Chip mit der Bezeichnung HD44780 gesteuert. Die Displays können über die parallele Schnittstellen angesteuert werden und es gibt viele Programmierbeispiele, so dass die Umsetzung nicht sehr schwer fiel. Ich habe keine genaue Angaben gefunden, wieviele LPT-Ports Windows XP oder Windows 7 unterstützt, aber als ich meine PCI-LPT-Portkarte eingebaut habe, konnte ich diese von LP1 – LPT8 konfigurieren. Das reicht, um acht Displays anzusteuern. Dadurch kann ich maximal 32 Zeilen Daten ausgeben… das sollte hoffentlich reichen. Falls nicht, gibt es auch noch größere Displays, die aber eher wie ein kleiner Monitor aussehen…

 
Wie gebe ich Werte auf externen (analogen) Meßgeräten aus?
Hier habe ich wirklich lange nach einer kostengünstigen Lösung gesucht. Bisher gibt es auch nur die Idee zur Umsetzung. Gebaut habe ich es noch nicht. Ich möchte diverse Werte des Bootes auf analogen (Zeiger)-Messgeräten anzeigen. Diese werden überwiegend in der ‘Maschinenraum-Konsole’ eingebaut. Wenn ich nun z.B. eine 0-100% Anzeige benötige, um Luftdruck oder Öldruck anzuzeigen, muss irgendwie eine bestimmte Spannung oder Strom an das Messgerät angelegt werden. Nun habe ich in meinem Programm z.B. die Variable ‘Luftdruck = 80′. Wie bekomme ich nun den Wert auf das externe Messgerät? Die Idee ist relativ simpel:

Es gibt sogenannte lichtempfindliche Bauteile (Fotohalbleiter), die je nach Helligkeit unterschiedlich viel Strom fließen lassen. Bei Dunkelheit (schwarz) wird gesperrt, bei Licht (weiß) wird geöffnet… Der PC, der in der (Maschinenraum)Konsole eingebaut wird, bekommt zwei Monitore. Auf einem werden die normalen Daten angezeigt, die nicht auf die externen Meßgeräte sollen. Auf dem zweiten Monitor, der versteckt in der Konsole steht, werden nun kleine Felder angezeigt (ähnlich einem Schachbrett), die von dem (Game)-Programm je nach Wert unterschiedlich hell angezeigt werden. Im Prinzip von schwarz (0) bis weiß (100). An diesem Monitor wird nun eine Art Wabengitter angebracht. In den einzelnen Waben – die genau die Größe des ‘Schachbretts’ haben, werden nun diese Fotohalbleiter eingebaut. Die Wabe ist wichtig, damit kein Licht von den Nachbarfeldern auf den Fotohalbleiter fällt. Die Schaltung, die nun mit dem Fotohalbleiter ein Anzeigegerät ansteuert, kostet an Bauteilen keinen Euro. Das Messgerät selbst wird je nach Schaltung ein fünf Volt oder 100 mA – Messgerät werden. Die Skala hinter dem Zeiger wird dann einfach durch selbstgedruckte Skalen ersetzt. So weit der Plan ;) Sobald ich die Testschaltung fertig habe, werde ich hier die Ergebnisse zeigen.

 

Sonstiges:
Normale Spiele sind meistens in etwa wie folgt programmiert (grobe Beschreibung): Das Spiel enthält eine sogenannte Gameloop, die die komplette Spielsteuerung, Ausgabe (Grafik, Menüs) und Usereingaben (Maus/Joystick) behandelt. Bei meinem Simulator funktioniert das so nicht, da mehrere PC’s in den einzelnen Konsolen eingebaut werden, auf denen je nur ein Programm läuft, was für die entsprechende Konsole entwickelt wurde. Zum Beispiel läuft auf der Radarkonsole ein Programm, welche nur das Radar anzeigt. Dieses Programm muss aber irgendwoher die entsprechenden Daten bekommen, was angezeigt werden soll (Kontakte). Genauso z.B. auch auf der Sonar/ESM Konsole u.s.w. Dafür gibt es den Gameserver. Auf diesem läuft nun die entsprechende Gameloop. Die PC’s, die in den Konsolen stecken, sind über Netzwerk verbunden und holen sich die entsprechenden Daten von dem Gameserver ab. Diese Gameloop berechnet sämtliche Daten für den gesamten Simulator. Diese wären:

  • Berechnen aller Kontakte (andere Schiffe, U-Boote, Helis) wie z.B. Kurs, Geschwindigkeit, Tiefe, Angriffe, Abwehr e.t.c.
  • Schadensystem vom eigenen Boot (Da kann ja mal etwas ausfallen…)
  • Funksprüche
  • und alles weitere, was zu so einer Simualation gehört.
Ich habe übrigens NICHT den Anspruch, eine 100%-Hardcore-Simulation zu entwickeln. Erstens reichen dazu meine Programmierkenntnisse bei weitem nicht aus und zweitens steht der Spielspaß im Vordergrund! Das bedeutet allerdings nicht, dass es z.B. irgendwelche utopischen, unrealistischen Waffen oder ähnliches geben wird.

Comments are closed.