Netzwerkspiel-Idee für den ZX81

ZX-Team Forum
Antworten
Benutzeravatar
Jens
User
Beiträge: 1036
Registriert: 23.08.2005, 13:31
Wohnort: D-31582 Nienburg/Weser
Kontaktdaten:

Netzwerkspiel-Idee für den ZX81

Beitrag von Jens » 05.07.2017, 21:56

Hallo User!

Vor einiger Zeit kam mir die Idee (ohne das ich auch nur entfernt weiß wie das zu realisieren ist) eines einfachen Netzwerk-Spiels für den ZX81 / 16kb / Zeddy-Net-Karte:

Schiffe versenken

Im Chat mit Paul und Olli haben wir die Idee mal weitergesponnen und ich gebe das hier mal zur Diskussion, ob so etwas möglich ist?!?

Zur Story:

"Der U-Boot-Krieg im 2.Weltkrieg tobt und die "Grauen Wölfe" sind sehr effizient. Sie jagen im Rudel. Du bist U-Boot-Kommandant und hast 10 Torpedos zur Verfügung. Eine Flotte von Englischen Kriegsschiffen ist unterwegs im Mittelmeer. Sie besteht aus insgesamt 5 Zerstörern, die jeweils mit 3 Torpedo-Treffern versenkt werden können. Ziel ist es, im Rudel alle 5 Schiffe zu versenken (es sind also 15 Treffer nötig)."

Das Spiel könnte so funktionieren:

Das Spielfeld ist 20x20 Felder groß, die 5 Schiffe sind je 3 Felder lang. Der "Host" verteilt die Schiffe auf dem Spielfeld geheim per Zufall. Jeder Spieler sieht auf seinem ZX81 durch ein Periskop und kann zB auf die Koordinate "F5" schießen. Auf seinem Bildschirm sieht er dann, ob das ein "Treffer" oder "Wasser" war. Jeder Spieler sieht also nur einen Ausschnitt.

Durch einen einfachen Text-Chat kann er nun allen mitteilen, das er auf F5 geschossen hat und das es (zB) ein "Treffer" war. Nun kann ein anderer Spieler zB auf F6 schießen und das Ergebnis mitteilen. Ein weiterer Spieler schießt zB auf E5.

Der Witz des Spiels liegt in der Kommunikation untereinander und in der Zusammenarbeit der einzelnen Spieler/U-Boote, d.h. man muss die Torpedos sinnvoll einsetzen. Je mehr Spieler, desto leichter. Und jeder muss sich dann selbst ein Bild machen, wo sich die Schiffe befinden. Also quasi wie in einem echten U-Boot.

Frage: kann man den Chat-Client so anpassen, das er nur den Text zulässt und die Befehle (zB CTCP usw) rausfallen? Und ist ein Rapsi als Host denkbar? Oder gar ein ZX81?

Ist erstmal nur eine Idee, aber ich könnte mir vorstellen, damit auf dem nächsten Treffen mal einen Wettbewerb zu starten... :-)

Ich bitte im Ideen/Vorschläge

Danke und Gruß
Jens
Wenn du tot bist, dann merkst du das selber nicht. Es ist nur schwer für die anderen. Wenn du blöd bist, dann ist es genauso.
Und: uıɐbɐ ʎɐqǝ uo pɹɐoqʎǝʞ ɐ ʎnq ɹǝʌǝ ɹǝʌǝu ןןıʍ ı
Der ZX81 rechnet mit allem, nur nicht mit seinem Besitzer...

Benutzeravatar
siggi
User
Beiträge: 2083
Registriert: 06.12.2005, 08:34
Wohnort: D, Hessen, tiefste Werreraa
Kontaktdaten:

Re: Netzwerkspiel-Idee für den ZX81

Beitrag von siggi » 05.07.2017, 23:17

Hi Jens
ich glaube, daß der Overhead, der durch das IRC-Protokoll notwenig ist, nicht mehr viel Platz für Spiel läßt. Besser wäre, ein einfacheres Protokoll fast nur aus Nutzdaten bestehend, zu nutzen.

Ein ähnliches Spiel (CTFGAME), allerding mit Panzern statt Schiffen, hat Winston als Beispiel zu seinem Spectranet gebastelt.
Da kann man ja mal reingucken und sich Ideen holen:

http://spectrum.alioth.net/svn/listing. ... es_ctfgame_

Gruß
Siggi
Mein ZX81-Web-Server: online seit 2007
http://zx81-siggi.endoftheinternet.org/index.html

Benutzeravatar
siggi
User
Beiträge: 2083
Registriert: 06.12.2005, 08:34
Wohnort: D, Hessen, tiefste Werreraa
Kontaktdaten:

Re: Netzwerkspiel-Idee für den ZX81

Beitrag von siggi » 06.07.2017, 09:29

Hier noch das README-File zu Winston's Spiel:

Code: Alles auswählen

Capture the Flag
================

This example is the most complex example for the Spectranet. It runs
on a 48K or 128K machine.

It's a client/server team game for two teams of up to two players in
each team (it could be expanded). It shows the use of the following:

- Making a multi-load game which uses the Spectranet filesystem.
- Passing an open socket from one program to another when multiloading.
- Using a short BASIC program to orchestrate the multiloading.
- Using the Z88DK's sprite library with a networked game.

The server code keeps track of all the objects in the game, and is written
in straight C. It is targeted at modest hardware, and runs perfectly on
an ancient MicroVAX just as well as it does on a brand new multi-core
AMD64 box.

The protocol between the client and server is a 'packed binary' protocol,
basically, it basically copies the C structs into a buffer and sends it
in a datagram. However, not much attention has been paid to portability,
at present it requires a little-endian system to be the server. This means
it runs happily on:

- Intel/AMD based PCs and Macintoshes under Linux, BSD, Mac OSX, Windows etc.
- VAX
- Raspberry Pi (ARM)

It will need some porting work to run on SPARC or POWER. With some work
(supporting the Unixisms and any endian issues) it might not be too 
hard to port to old Acorn ARM hardware or perhaps the Amiga when TCP/IP 
is available.

Building
========

You'll need the z88dk and the SP1 sprite library to build the Spectrum
client, as well as the Spectranet socket library. Then just go into
the 'client' directory and run 'make'. You'll get a couple of binaries.
The 'boot.zx' file is a BASIC program that may be loaded on a Spectrum
and will load the client.

To build the server, on anything Unixy you just need the basic C compiler.
Run 'make -f Makefile.linux' for anything non-BSD, run 'make' for anything
BSD-like (including Mac OSX), run 'make -f Makefile.win32' for Windows.
On Windows, it will build using MinGW.

Running the game
================

On the server, start it by running 'ctfserv' with the filename of the
map file. A couple of maps are provided named 'map<something>.txt'. Maps
are just text files. You can easily create your own with a text editor.
If you look at the example ones, you can get the basics of it.

On the Spectrum, mount the filesystem where the client is, and then
do %load "" (the location should have boot.zx, matchmake.bin and
ctfclient.bin in it). Then follow the instructions on screen, basically
just enter a player name and the IP address of the server, make all the
players ready then start the game.

Keys are QAOPM.
So wie ich das verstanden habe, können 2 Teams mit je max. 2 Spielern ihre Panzer auf ihrem eigenen Screen steuern und auf gegnerische Panzer ballern. Die Bewegung/Drehung des eigenen Panzers wird auf die Bildschirme der anderen Spieler übertragen, die die Aktion sehen können. Deren Reaktion (Ballern, Bewegung ihres Panzers) wird zurück bzw. zu den anderen Spielern geschickt, die dann alle auf gleichem Kenntnisstand über die Spielsituation sind.
Eine ähnliche Technik, die dazu verwandt wird, müßte man dann wohl auch beim Schiffe-Spiel anwenden, auch wenn das Schiff nicht als Sprite auf dem Zeddy dargestellt würde, wie die Panzer beim Speccy-Spiel.
Mein ZX81-Web-Server: online seit 2007
http://zx81-siggi.endoftheinternet.org/index.html

Benutzeravatar
siggi
User
Beiträge: 2083
Registriert: 06.12.2005, 08:34
Wohnort: D, Hessen, tiefste Werreraa
Kontaktdaten:

Re: Netzwerkspiel-Idee für den ZX81

Beitrag von siggi » 06.07.2017, 11:12

Jens hat geschrieben:
05.07.2017, 21:56
"Der U-Boot-Krieg im 2.Weltkrieg tobt und die "Grauen Wölfe" sind sehr effizient. Sie jagen im Rudel. Du bist U-Boot-Kommandant und hast 10 Torpedos zur Verfügung. Eine Flotte von Englischen Kriegsschiffen ist unterwegs im Mittelmeer. Sie besteht aus insgesamt 5 Zerstörern, die jeweils mit 3 Torpedo-Treffern versenkt werden können. Ziel ist es, im Rudel alle 5 Schiffe zu versenken (es sind also 15 Treffer nötig)."

Das Spiel könnte so funktionieren:

Das Spielfeld ist 20x20 Felder groß, die 5 Schiffe sind je 3 Felder lang. Der "Host" verteilt die Schiffe auf dem Spielfeld geheim per Zufall. Jeder Spieler sieht auf seinem ZX81 durch ein Periskop und kann zB auf die Koordinate "F5" schießen. Auf seinem Bildschirm sieht er dann, ob das ein "Treffer" oder "Wasser" war. Jeder Spieler sieht also nur einen Ausschnitt.

Durch einen einfachen Text-Chat kann er nun allen mitteilen, das er auf F5 geschossen hat und das es (zB) ein "Treffer" war. Nun kann ein anderer Spieler zB auf F6 schießen und das Ergebnis mitteilen. Ein weiterer Spieler schießt zB auf E5.
Ob das so "realistisch" ist? Als gelernter ZIVI kenne ich mich da nicht so gut aus, aber wenn die Zerstörer "unterwegs" sind, dann halten sie nicht still und lassen sich beschießen, sondern fahren weiter und ändern ggf. die Fahrtrichtung. Wenn also F5 eine "Fahrkarte" war, kann der nächste Spieler da einen Treffer machen, wenn der Zerstörer da inzwischen hingefahren ist ...

Und die Zerstörer-Fahrer sind ja auch nicht ganz blöde: die haben normalerweise Sonar, Radar und Wasserbomben für die U-Bootler, siehe:
https://www.youtube.com/watch?v=G7K4YT2zZ5g

So ganz einfach abballern wie beschrieben, kann man allenfalls langsamfahrende Frachter. Allerdings wurden die damals auch gern mal von Zerstörern begleitet .... :wink:
Und so geht das dann: https://www.youtube.com/watch?v=_jP-eOrv2Ok

:mrgreen:
Mein ZX81-Web-Server: online seit 2007
http://zx81-siggi.endoftheinternet.org/index.html

Benutzeravatar
siggi
User
Beiträge: 2083
Registriert: 06.12.2005, 08:34
Wohnort: D, Hessen, tiefste Werreraa
Kontaktdaten:

Re: Netzwerkspiel-Idee für den ZX81

Beitrag von siggi » 06.07.2017, 11:53

Als vereinfachte realitätsnähere Spielerweiterrung: Zerstörer sind mobil und ballern zurück. U-Boote sind mobil und können auf/untertauchen

Also:
U-Boot ist aufgetaucht. Nachdem es Torpedos Richtung Frachter oder Zerstörer losgetreten hat (oder zufällig RND!), greift Zerstörer an. Zerstörer "sieht" (Radar) das U-Boot und fährt darauf zu.

Solange U-Boot über Wasser ist: Zerstörer ballert mit Geschützen zufällig auf Koordinaten des U-Boot +/- 1 Raster (also 9 Felder, U-Boot in der Mitte). Bei direktem Treffer: :(

Wenn U-Boot untergetaucht ist und Abstand zwischen U-Boot und Zerstörer (in X/Y-Richtung) < ebbes (200m), kann Zerstörer Wasserbomben schmeißen auf Koordinaten des U-Boot +/- 1 Raster (also 9 Fehler, U-Boot in der Mitte). Wenn Explosionshöhe weniger als ebbes (30m) von U-Boot-Höhe entfernt ist: Treffer :(

Zerstörer hat Sonar und hört U-Boot, wenn dessen Vx oder Vy > ebbes (geringe Geschwindigkeit: Abtreiben durch Strömung oder "Schleichfahrt") ist. Dann fährt er darauf zu, ansonsten zum letzen bekannten Standort des U-Boots oder fährt zufällig weiter.

Wenn U-Boot zu tief ist: :(

Randbedingungen
Frachter und Zerstörer (und U-Boot :roll: ) können nur versenkt werden, wenn deren X/Y mit dem des Torpedos exakt übereinstimmt.

Frachter und Zerstörer und U-Boote können auch durch Rammen versenkt werden (X1=X2 & Y1=Y2 & abs(Z1-Z2) <ebbes (10m)).

Torpedos explodieren nur bei Einschlag und laufen ggf. weiter bis zum nächsten aufgetauchten U-Boot und schlagen da ein :roll:

Torpedos können vom U-Boot nur abgeschossen werden, wenn es aufgetaucht ist oder seine Tauchtiefe nicht größer ebbes (10m) ist

Granaten aus den Geschützen fliegen und Wasserbomben sinken "unendlich schnell". Ihr Ort/Tiefe muß nicht zeitlich berechnet werden.

Also:
- Zerstörer haben Ort (X, Y) und Geschwindigkeit Vx, Vy
- Torpedos haben Ort (X, Y) und Geschwindigkeit Vx, Vy
- U-Boote haben Ort (X,Y,Z) und Geschwindigkeit (Vx, Vy, Vz).
- Wasserbomben haben Ort (X, Y) und Explosionstiefe Z
- Frachter haben Ort (X, Y)

Offen:
- was ist eine Zeiteinheit (zur Errechnung neuer Koordinaten)
- wer ist schneller? U-Boot über/unter Wasser? Oder Zerstörer? Torpedo ist wohl am schnellsten (und explodiert nicht sofort am eigenen U-Boot, selbst wenn sie sich in die gleiche Richtung bewegen) ..
- wie viele U-Boote (Spieler)? Wie viele Zerstörer?
Zuletzt geändert von siggi am 07.07.2017, 13:04, insgesamt 2-mal geändert.
Mein ZX81-Web-Server: online seit 2007
http://zx81-siggi.endoftheinternet.org/index.html

Benutzeravatar
sbetamax
User
Beiträge: 443
Registriert: 04.03.2006, 22:01
Wohnort: Deutschland / Hessen / Nidda
Kontaktdaten:

Re: Netzwerkspiel-Idee für den ZX81

Beitrag von sbetamax » 06.07.2017, 12:36

Ich weiß nicht ob ich das hier schon breit getreten habe:
Schiffe.zip
(31.39 KiB) 9-mal heruntergeladen
Das Programm ist mal auf dem Zddy entstanden und mit ziemlich beschieden spagettcode über C128 Basic in QBasic überstezt.
Ich wollt es ja immer mal wider zurück auf den Zeddy übertragen.
Zuletzt geändert von sbetamax am 06.07.2017, 12:55, insgesamt 1-mal geändert.
Gruß Stephan
_______________
ZX80 (nachbau), ZX81, ZX 2000, ZX NU, IQ8300, ZX Spectrum, ZX Spectrum plus, ZX Spectrum 128, Harlequin, C64

Benutzeravatar
siggi
User
Beiträge: 2083
Registriert: 06.12.2005, 08:34
Wohnort: D, Hessen, tiefste Werreraa
Kontaktdaten:

Re: Netzwerkspiel-Idee für den ZX81

Beitrag von siggi » 06.07.2017, 12:44

Stephan: da ist ne EXE-Datei drin :twisted:

Und noch was: vielleicht sollten auch die Frachter eine kleine Geschwindigkeit haben?

Server hat wohl am meisten zu tun: Koordinaten und Geschwindigkeiten aller Objekte verwalten und auf Rammen, Explodieren, usw. checken. Und neue Koordinaten aller berechnen und an alle Clients (Spieler/U-Boote) verschicken.

Neuer Client (neues U-Boot, neuer Spieler) macht Connect zum Server und teilt ihm seine aktuelle Geschwindigkeit mit. Er taucht dann am Rande des Feldes auf.
Spiel ist zu Ende, wenn alle Frachter/Zerstörer versenkt sind oder aus dem Spielfeld gefahren sind. Oder alle U-Boote versenkt oder aus dem Spielfeld gefahren sind (dann schmeißt Server den Client raus).

Ach ja: U-Boote "sehen" sich unter Wasser nicht. Sie können sich gegenseitig rammen, wenn sich ihre "Kaleus" nicht absprechen (per Chat???) ...
Zuletzt geändert von siggi am 06.07.2017, 12:55, insgesamt 1-mal geändert.
Mein ZX81-Web-Server: online seit 2007
http://zx81-siggi.endoftheinternet.org/index.html

Benutzeravatar
sbetamax
User
Beiträge: 443
Registriert: 04.03.2006, 22:01
Wohnort: Deutschland / Hessen / Nidda
Kontaktdaten:

Re: Netzwerkspiel-Idee für den ZX81

Beitrag von sbetamax » 06.07.2017, 12:54

Hallo Siggi,
ja ist die Compilerte Version. Eigentlich sollte die BAS Datei auch drinnen sein. Ist sie aber nicht ich habs getauscht.
Gruß Stephan
_______________
ZX80 (nachbau), ZX81, ZX 2000, ZX NU, IQ8300, ZX Spectrum, ZX Spectrum plus, ZX Spectrum 128, Harlequin, C64

Benutzeravatar
msch
User
Beiträge: 3312
Registriert: 05.02.2013, 15:42
Wohnort: Hessen, Rhein-Main-Gebiet

Re: Netzwerkspiel-Idee für den ZX81

Beitrag von msch » 06.07.2017, 13:41

siggi hat geschrieben:
06.07.2017, 12:44
Ach ja: U-Boote "sehen" sich unter Wasser nicht.
Warum sollen sich U-Boote nicht gegenseitig "sehen" können? Sie können sich doch mittels Sonar anpingen - was natürlich ggf. ihre Position verraten würde ;-)
manche meinen lechts und rinks kann man nicht velwechsern.
werch ein illtum! (Lichtung, Ernst Jandl)

Benutzeravatar
msch
User
Beiträge: 3312
Registriert: 05.02.2013, 15:42
Wohnort: Hessen, Rhein-Main-Gebiet

Re: Netzwerkspiel-Idee für den ZX81

Beitrag von msch » 06.07.2017, 13:56

sbetamax hat geschrieben:
06.07.2017, 12:36
Ich weiß nicht ob ich das hier schon breit getreten habe:
Schiffe.zip
Das Programm ist mal auf dem Zddy entstanden und mit ziemlich beschieden spagettcode über C128 Basic in QBasic überstezt.
Ich wollt es ja immer mal wider zurück auf den Zeddy übertragen.
Cool, sogar mit Sound! Wie positioniere ich die Schiffe horizontal? Edit: mit space
Bildschirmfoto 2017-07-06 um 13.54.58.png
Bildschirmfoto 2017-07-06 um 13.54.58.png (22.9 KiB) 553 mal betrachtet
P.S.: wer eine schön einfache DOS-Box unter OS X laufen lassen möchte, dem empfehle ich
http://boxerapp.com/
Einfach die EXE auf die Boxer.app ziehen und schon gehts los :-)

Eine freie Quickbasic-Implementierung gibt es hier: http://www.qb64.net/
manche meinen lechts und rinks kann man nicht velwechsern.
werch ein illtum! (Lichtung, Ernst Jandl)

Benutzeravatar
sbetamax
User
Beiträge: 443
Registriert: 04.03.2006, 22:01
Wohnort: Deutschland / Hessen / Nidda
Kontaktdaten:

Re: Netzwerkspiel-Idee für den ZX81

Beitrag von sbetamax » 06.07.2017, 18:34

Ich muss mal nach der C128 Version suchen. Da ist der Sound besser.
Gruß Stephan
_______________
ZX80 (nachbau), ZX81, ZX 2000, ZX NU, IQ8300, ZX Spectrum, ZX Spectrum plus, ZX Spectrum 128, Harlequin, C64

Benutzeravatar
siggi
User
Beiträge: 2083
Registriert: 06.12.2005, 08:34
Wohnort: D, Hessen, tiefste Werreraa
Kontaktdaten:

Re: Netzwerkspiel-Idee für den ZX81

Beitrag von siggi » 08.07.2017, 14:12

Vieleicht müsste man beim Spielchen auch Fliescher samt Wassereinbruch einplanen?

https://www.youtube.com/watch?v=CIQETV30_u8

Die "Schaufel Sand" riecht aber stark nach IF RND<0.000000001 oder so :wink:

Und Wassereinbruch im U-Boot, nach dem es dann flott abwärts geht, gibbet ja auch anderswo:
https://www.youtube.com/watch?v=4q9X6yHVNlo :mrgreen:
Mein ZX81-Web-Server: online seit 2007
http://zx81-siggi.endoftheinternet.org/index.html

Benutzeravatar
siggi
User
Beiträge: 2083
Registriert: 06.12.2005, 08:34
Wohnort: D, Hessen, tiefste Werreraa
Kontaktdaten:

Re: Netzwerkspiel-Idee für den ZX81

Beitrag von siggi » 08.07.2017, 21:08

Da gibt's einige Daten (Geschwindigkeit/Reichweite über/unter Wasser, max. Tauchtiefe/Tauchdauer ...) von damaligen U-Booten:

https://de.wikipedia.org/wiki/U-Boot-Klasse_VII
Mein ZX81-Web-Server: online seit 2007
http://zx81-siggi.endoftheinternet.org/index.html

Benutzeravatar
siggi
User
Beiträge: 2083
Registriert: 06.12.2005, 08:34
Wohnort: D, Hessen, tiefste Werreraa
Kontaktdaten:

Re: Netzwerkspiel-Idee für den ZX81

Beitrag von siggi » 10.07.2017, 21:29

Aus den Links ergeben sich noch ein paar weitere (denkbare) Randbedingungen:
- wenn Zerstörer ein getauchtes U-Boot lokalisieren wollen (mittels ASDIC), müssen sie sehr langsam fahren (wenig Krach machen, damit sie besser "hören"). Da können sie dann leicht von anderen U-Booten angegriffen werden (ist ja Netzwerkspiel :mrgreen: )
- wenn Zerstörer Wasserbomben schmeißen wollen (auf getauchtes U-Boot), müssen sie flott (AK!) unterwegs sein, damit sie sich vom Acker machen, bevor sie die eigene Wasserbombe hochjagen kann. Wenn Höchstgeschwindigkeit der Zerstörer bekannt ist (Google ;-) ), können andere U-Boote abschätzen, wo der Zerstörer demnächst sein wird und ihn dort angreifen (Torpedos also entsprechend vorhalten)
- wenn Wasserbomben neben(!) U-Boot explodieren, kann viel passieren (siehe "Ansprengversuche"): von Abfallen des Zeigers des Tiefenanzeigers, Wassereinbruch, bis zum Auslaufen der Batteriesäure ist da vieles möglich. Das sieht nach einer "State-Machine" aus, die im Client (U-boot/Spieler) laufen sollte, und die, je nach Qualität der Besatzung (RND!) dies Reparieren kann, bevor der Kahn unterhalb der "rechnerische Zerstörungstiefe" abgesunken ist (oder auch nicht).

Und da die Zerstörer auch viele Freiheitsgrade haben: sollte so ein Zerstören per KI vom Server "gefahren" werden? Oder eher von einem generischen Mitspieler (z. B. aus dem englischen Forum :wink: )

Siggi
Mein ZX81-Web-Server: online seit 2007
http://zx81-siggi.endoftheinternet.org/index.html

Antworten