Schiffe Versenken (Battleships) V2.0
 2005-2022 Stan Holoubek
http://www.stans-world.de/schiffe_versenken.html
Kommentare bitte an battleships@stans-world.de

Kurzbeschreibung:
Das beliebte Spiel als Client/Server Variante zum Spielen ber das Internet oder im LAN.

Mindestsystemvoraussetzungen:
Java 8 Runtime Environment

Features
====================
- Hauptprogramm als Client/Server Applikation
- Sound bei Treffer, versenkt, usw. 
- frei konfigurierbare Sprache, Feldgre, Farben, etc.; s. server.cfg und config.htm fr Optionen
- Schiffe per Maus-Drag frei positionierbar 
- Untersttzung von diagonalen Schiffen 
- Anpassung der Client-Konfiguration an die des Servers beim Verbindungsaufbau 
- Chat 
- Dedizierter Server 
- Bot

Installation
====================
BattleShips.zip ins Verzeichnis BattleShips entpacken, config-xx.htm der bevorzugten Sprache umbenennen nach config.htm (Voreinstellung ist en) und zum Starten Doppelklick auf BattleShipsApplication.bat.
Linux: *.sh; siehe Kommentare fr Einstellungen und Benutzung

Einstellungsdateien
====================
config.htm		Texte fr alle Ausgaben im Hauptprogramm, dediziertem Server und Bot, sowie einige weitere Einstellungen fr das Hauptprogramm
server.cfg		- Generelle Spielkonfiguration fr Hauptprogramm und Dedizierten Server
				- weitere Server-spezifische Einstellungen, wie z.B. Webserver Benutzung und Remote-Befehle

Hauptprogramm: BattleShipsApplication
=====================================
Nach dem Starten hat man die Wahl ob der eigene PC als Client oder als Server fungieren soll. Die zwei Radio-Buttons am unteren linken Rand des Fensters ndern den Modus entsprechend. Die Schiffe verden positioniert indem man sie mit der Maus an die gewnschte Stelle zieht. Die Richtung ndert man per Rechtsklick. Nach dem Verbindungsaufbau wird der "Bereit"-Knopf aktiv. Wird dieser gedrckt, kann man seine Schiffe nicht mehr bewegen, hat der Gegner dies auch getan beginnt das Spiel. Es beginnt derjenige, der zuerst den "Bereit"-Knopf angeklickt hat. Jeder ist abwechselnd dran, es sei denn der letzte Schuss war ein Treffer. In diesem Fall hat man noch einen Schuss, d.h. man darf solange schieen wie man trifft. Sowohl die eigenen als auch die gegnerischen Schsse werden markiert, der letzte Schuss ist farblich hervorgehoben. Treffer werden entsprechend angezeigt, auf dem gegnerischen Feld erscheint das entsprechende Segment des getroffenen Schiffes. Rest, siehe Benutzeroberflche (Status, Schiffe Verstecken, Punktestand, etc.).

Kommandozeilen-Parameter:
-action <Name>
	mgliche Aktionen:
	startserver
		Startet die Anwendung im "Server Modus" und gleichzeitig den Server, sprich wartet auf eine Client-Verbindung
	startbot
		Startet die Anwendung im "Computer Modus", den Server sowie eine unsichtbare Instanz des BattleShipsBot, welche sich mit der Anwendung verbindet. Dadurch ist es mglich lokal gegen den Computer zu spielen ohne die BattleShipsBot-Anwendung separat starten zu mssen
-configfile <Name>
	Eine andere Konfigurationsdatei verwenden als die voreingestellte server.cfg

Dedizierter Server: BattleShipsServerApplication
================================================
Als Alternative zur Peer-to-Peer Verbindung - bei der einer der Mitspieler das Hauptprogramm im Server-Modus laufen lsst - gibt es den dedizierten Server als Konsolen-Anwendung. Die Anzahl der mglichen Verbindungen ist hierbei nur durch die Hardware-Resourcen und Netzwerkanbindung des Servers limitiert.
Wenn sich ein Client mit dem Server verbindet wird ihm ein zufallsgenerierter Spielername zugewiesen und befindet sich zunchst in einem virtuellen Wartezimmer. Der Spielername kann mithilfe des entsprechenden Eingabefeldes und "Einstellen" Knopfes auf der Benutzeroberflches der Spiels gendert werden. Wenn ein Client gerade nicht mit einem anderen verbunden ist erscheint ein Popup in dem der Benutzer einen Gegner auswhlen kann. 
Eine bestehende Verbindung mit einem anderen Client kann jederzeit getrennt werden indem man das rote Symbol in der rechten unteren Ecke der Spiel-UI anklickt.
Der Server startet ebenfalls den mitgelieferten Webserver sofern dies eingestellt wurde. Es ist mglich Befehle in der lokalen Server-Konsole abzusetzen.

Kommandozeilen-Parameter:
-configfile <Name>
	Eine andere Konfigurationsdatei verwenden als die voreingestellte server.cfg

Untersttzte Befehle:
c - Client-Liste ausgeben
k - Spieler entfernen; Benutzung: k <Spielername>
h - Hilfe
x - Beenden

Es ist ebenfalls mglich Remote-Befehle im Chateingabefeld eines jeden Clients abzusetzen, vorausgesetzt dieses Merkmal wurde in server.cfg aktiviert und der Benutzer hat sich mit dem korrekten Passwort eingeloggt. Jedem Befehl muss ein / vorangestellt werden:
 
Untersttzte Befehle:
c - Client-Liste ausgeben
k - Spieler entfernen; Benutzung: k <Spielername>
l - Login; Benutzung: l <Passwort>
h - Hilfe
x - Ausloggen
Beispiel: /l Passwort

Bot: BattleShipsBot
====================
Die BattleShipsBot-Anwendung basiert grafisch auf dem Hauptprogramm BattleShipsApplication und ermglicht es gegen den Computer zu spielen. Sie can sich mit dem Hauptprogramm im Server-Modus verbinden oder mit dem dedizierten Server, wo der Bot genauso wie ein menschlicher Spieler unter dem per Commandozeile (komplette Liste s. unten) angegebenen Namen im virtuellen Wartezimmer angezeigt wird. Nachdem man den Bot als seinen Gegner im Popup des Hauptprogramms ausgewhlt hat, positioniert man wiederum seine Schiffe und klickt den "Bereit"-Knopf. Daraufhin sendet der Bot ebenfalls ein Bereit-Signal und das Spiel beginnt!

Kommandozeilen-Parameter:
-name <Botname>
	Name des Bots wenn man sich mit dem dedizierten Server verbindet; kann auch im Spielername-Feld gesetzt werden, falls der Bot im sichtbaren Modus luft
-server <Hostname>
	Server mit dem sich der Bot verbinden soll; Voreinstellung: battleships.dynv6.net
-port <Port #>
	Port mit dem sich der Bot verbingen soll
-invisible
	Den Bot unsichtbar laufen lassen; Hinweis: im Gegensatz zum dedizierten Server ist der Bot nach wie vor eine UI-Anwendung und funktioniert deshalb nur wenn eine GUI vorhanden ist - das sollte man erwgen, z.B. beim Einsatz auf schlanken, Linux-basierten Servern wie dem Raspberry Pi
-timeout <Sekunden>
	Zeit ohne Aktivitt nach der sich der Bot trennt wenn er mit einem Spieler auf einem dedizierten Server verbunden ist; Voreinstellung: 600

Lokalisierung
====================
Die config(-xx).htm Dateien knnen in einer der gngigen Unicode Kodierungen (UTF-8, UTF-16 oder auch UTF-32) gespeichert werden, um die Benutzung von erweiterten Zeichenstzen wie z.B. Chinesisch zu ermglichen.
