amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > Netzwerkspiel [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

01.10.2002, 20:19 Uhr

Mazze
Posts: 263
Nutzer
Hi,

ich bastle zu Zeit an einem Spiel, welches im Prinzip ein rundenbasiertes Multiuserspiel ist. Nun möchte ich das Ganze so erweitern, dass es über ein Netzwerk gespielt werden kann. Wie mache ich das? Soll ich mir mal AMarque anschauen? Kann ich damit das Netzwerk simulieren, in dem ich das Spiel mehrfach auf meinem Rechner starte?

MFG Mazze

[ - Antworten - Zitieren - Direktlink - ]

03.10.2002, 00:35 Uhr

mrbbc
Posts: 101
Nutzer
Kenne TCP/IP auf Amiga nicht; simulieren wirst du aber mit localhost (127.0.0.1) nichts können.

Am besten, du denkst dir selbst eine Pseudo-Netzwerk-API aus, die die Daten einfach in eine Datei zwischenspeichert oder so ähnlich, und "wrapst" (einwickeln) anschließend deine API-Funktionen um die echten Netzwerkfunktionen, wenn's funzt.

Beachte dabei, dass du die anderen Rechner direkt addressierst; benenne also deine Datei unterschiedlich nach Zieladressen und gebe jeder Programm-Instanz eine andere Pseudo-Netzwerkaddresse.

Netzwerkkarten/-treiber haben einen Datenpuffer. Also hänge neue Daten immer an die bestehende Datei an anstatt die Datei zu überschreiben.

[ - Antworten - Zitieren - Direktlink - ]

03.10.2002, 22:55 Uhr

HAK
Posts: 85
Nutzer
@Mazze


Ich kenne zwar Amarquee nicht, aber es sollte doch möglich sein - wenn dein
Spiel mehrfach startbar ist - jedes dieser Instanzen auf eine eigene Portnummer
zu konfigurieren und so ein Netzwerk zu simulieren.

Im "richtigen" Netzwerk sind dann die IP-Adressen unterschiedlich, dafür aber
die Portnummern (wahrscheinlich) dieselben.


Bye HAK

[ - Antworten - Zitieren - Direktlink - ]

04.10.2002, 08:02 Uhr

Bladerunner
Posts: 1474
Nutzer
Tja und ich programiere nicht (*lol* jetzt kannst du dir die besten Sachen zusammenpicken)
Aber hab bisher eigentlich nur gute Erfahrungen mit der A Marquee lib gehabt..
Soll wohl auch ned weiters schwer sein.

[ - Antworten - Zitieren - Direktlink - ]

04.10.2002, 09:08 Uhr

tokai
Posts: 1071
Nutzer
Zitat:
Original von HAK:
Im "richtigen" Netzwerk sind dann die IP-Adressen unterschiedlich, dafür aber
die Portnummern (wahrscheinlich) dieselben.


kann man mit AmiTCP/IP denn nicht mehrer unterschiedliche lokale IP-Adressen definieren?



--
http://www.christianrosentreter.de

[ - Antworten - Zitieren - Direktlink - ]

04.10.2002, 15:43 Uhr

Mazze
Posts: 263
Nutzer
Hi,

ist auf dem Amiga so etwas wie ein netzwerksübergreifender Assign möglich? Also so etwas wie "assign netzplatte: \123.456.789ordner".
Dann könnte ich es so machen, dass Spieler 1 grundsätzlich Lokal ist und die anderen wahlweise lokal sind oder über das Netz auf den Ordner zugreifen.

MFG Mazze


[ - Antworten - Zitieren - Direktlink - ]

06.10.2002, 13:59 Uhr

Xin
Posts: 28
Nutzer
Zitat:
Original von Mazze:
Hi,

ist auf dem Amiga so etwas wie ein netzwerksübergreifender Assign möglich? Also so etwas wie "assign netzplatte: \123.456.789ordner".


Derartiges kann man mit Samba hinbekommen, allerdings bedeutet das für den ahnungslosen Spieler ein nicht zumutbarer und meist nicht durchführbarer Aufwand bzgl. der Netzwerkkonfiguration. Entsprechende Scripte mitzuliefern bedeutet einen nicht geringen Mehraufwand für Dich als (dann) Samba-Spezialisten.

Wenn Du ein derartiges Spiel schreibst, mußt Du ja eine Testkonfiguration besitzen, also mindestens 2 Amigas, die über's Netz kommunizieren können. Solltest Du das nicht besitzen, bau Dir ein Netzwerk über 'ne Linuxkiste, die Dir die serielle Schnittstelle des 2. Amigas (oder auch beider) auf's Netzwerk schleußt. (Stichwort: ipchains oder besser iptables)

Achtung ab hier Halbwissen (!):
Da der AmiTCP/IP soweit ich weiß stark an den Linux Stack angelegt wurde und alles andere kompatibel ist, dürften entsprechende Linux-Sourcecodes für Dich interessant sein.
</halbwissen>

Ich selber habe derartige Netzwerkverbindungen bisher nur unter Linux geschrieben, auf dem Amiga kann ich da nichts direktes zu sagen (wäre aber an Beispielsourcen durchaus interessiert. :-) )

Des weiteren ist AWeb und YAM inzwischen FreeSource. Du könntest Dir aus den Code-Teilen sicher wichtige Hinweise holen, wie Du Dein Projekt sinnvoll umsetzen kannst.

Viel Erfolg!

<buzzer> Wichtigsten Teil des Textes wieder vergeigt, vergessen die wichtigen Sätze wieder reinzukopieren... <narf>

Zieh die Nummer mit IP-Adressen und Ports auf. Das ist deutlich einfacher meiner Erfahrung nach als Dateien durch die Gegend zu schicken (->Timingprobleme?). Du hast also mindestens zwei Amigas, die Du gleichzeitig im Netz haben mußt.

Alternativ: ein Amiga; Beispiel: Dein Spiel A hat Port 5000 und schickt die Daten einen anderen Rechner (Linuxkiste...) , der schickt sie auf Port 5001 an Dich zurück. Port 5001 wird von Deinem Spiel B abgefragt. Sollte Dein Spiel also zweimal startbar sein, geht es auch so - du must halt immer eine Version A und eine Version B haben (z.B. durch Aufruf MeinSpiel Port=5000)

--
Mit freundlichem Gruß
Sascha 'Xin' Atrops

[ Dieser Beitrag wurde von Xin am 06.10.2002 editiert. ]

[ - Antworten - Zitieren - Direktlink - ]

06.10.2002, 16:21 Uhr

Mazze
Posts: 263
Nutzer
Auweia,

ich habe von der Netzwerkprogrammiererei null Ahnung.
Ich werde in den nächsten Tagen eine netzwerklose Version meines Spiels im Aminet veröffentlichen. Dann schaue ich mir erst mal an, ob sich überhaupt jemand dafür interessiert.
Mir fehlt einfach der Platz, um mir noch einen 2. Rechner hinzustellen (deshalb habe ich auch 3 Betriebssystem auf meinem PC :D ). Unter Wind*ws kann ich 'net use x: \rechnerverzeichnis' machen. Ich hatte gehofft, dass dies auf dem Amiga auch so einfach geht.

MFG Mazze

[ - Antworten - Zitieren - Direktlink - ]

06.10.2002, 17:21 Uhr

mrbbc
Posts: 101
Nutzer
Wie gesagt kannst du das Netzwerkspiel auch auf einem Rechner simulieren, wo es ja rundenbasiert ist;

Warum nicht gleich eine 1-Rechner-Multiplayer-Version ? Bei irgendeinem relativ neuen Spiel gibt es das auch; "Hot-Seat" oder wie sie es nennen;

Vielleicht kriegst du diese Spielart sogar mit TCP/IP-Spielen unter einem Hut...

Nehmen wir mal an, du benutzt einen virtuellen Server statt Broadcast (jeder Rechner tauscht sich mit jedem aus).

Du könntest vor einer Runde z.B. mit nwgetstatus() die derzeitigen Spieldaten "vom Server" holen und mit nwaction() deine Aktionen dem "Server" übermitteln. - natürlich brauchst du auch ein nwinit(), bei dem die Netzwerkverbindung und beteiligte Spieler festgelegt werden, die dann bei jedem Aufruf von nwgetstatus() und nwaction() bekannt sind und nicht extra gehandhabt werden müssen.

Was in den einzelnen Funktionen dann genau passiert, kannst du nachträglich ändern, ohne dein Spiel selbst ändern zu müssen, d.h. du kannst nachträglich das 1-Rechner-Netzwerk für LAN und Internet umschreiben.

Hier kannst du wie gesagt auch eine Dummyversion einprogrammieren, die über lokale Dateien einen Austausch von Daten zwischen mehreren Instanzen von deinem Programm ermöglicht. Wie gesagt kannst du nicht direkt über TCP/IP ein Pseudonetzwerk auf deinem Rechner aufbauen, da du immer die gleiche IP-Adresse hast.

[ - Antworten - Zitieren - Direktlink - ]

06.10.2002, 17:22 Uhr

mrbbc
Posts: 101
Nutzer
Wie gesagt kannst du das Netzwerkspiel auch auf einem Rechner simulieren, wo es ja rundenbasiert ist;

Warum nicht gleich eine 1-Rechner-Multiplayer-Version ? Bei irgendeinem relativ neuen Spiel gibt es das auch; "Hot-Seat" oder wie sie es nennen;

Vielleicht kriegst du diese Spielart sogar mit TCP/IP-Spielen unter einem Hut...

Nehmen wir mal an, du benutzt einen virtuellen Server statt Broadcast (jeder Rechner tauscht sich mit jedem aus).

Du könntest vor einer Runde z.B. mit nwgetstatus() die derzeitigen Spieldaten "vom Server" holen und mit nwaction() deine Aktionen dem "Server" übermitteln. - natürlich brauchst du auch ein nwinit(), bei dem die Netzwerkverbindung und beteiligte Spieler festgelegt werden, die dann bei jedem Aufruf von nwgetstatus() und nwaction() bekannt sind und nicht extra gehandhabt werden müssen.

Was in den einzelnen Funktionen dann genau passiert, kannst du nachträglich ändern, ohne dein Spiel selbst ändern zu müssen, d.h. du kannst nachträglich das 1-Rechner-Netzwerk für LAN und Internet umschreiben.

Hier kannst du wie gesagt auch eine Dummyversion einprogrammieren, die über lokale Dateien einen Austausch von Daten zwischen mehreren Instanzen von deinem Programm ermöglicht. Wie gesagt kannst du nicht direkt über TCP/IP ein Pseudonetzwerk auf deinem Rechner aufbauen, da du immer die gleiche IP-Adresse hast.

[ - Antworten - Zitieren - Direktlink - ]

07.10.2002, 02:38 Uhr

Xin
Posts: 28
Nutzer
Zitat:
Original von Mazze:
Auweia,

ich habe von der Netzwerkprogrammiererei null Ahnung.


Ich habe auch in der Regel keine Ahnung von dem, was ich grade programmiere. Dann ändere ich das und programmiere, was ich programmieren will. Der heilige Google weiß auf fast alle Fragen eine Antwort. Ansonsten helfe ich seit Jahren mit Terra-Shop nach und habe hier schon eine hübsche kleine Bibliothek mit EDV-Büchern zu so ziemlich allen Themen.

Zitat:
Unter Wind*ws kann ich 'net use x: \rechnerverzeichnis' machen. Ich hatte gehofft, dass dies auf dem Amiga auch so einfach geht.

Nein, Amiga bleibt Amiga und auch wenn es so einfach ginge, sollte der Weg über Ports etc. bevorzugt werden.
So schwer sollte das auch unter AmigaOS nicht sein, vermutlich ebenso, dass Du mit read() und write() drauf zugreifen kannst, also wie mit einer Datei, nur statt dos.lib halt eine andere Lib.

Schreib ein Beispielprogramm und ab dafür. Das kostet Dich 2 Tage und dann ist das Problem erschlagen.

--
Mit freundlichem Gruß
Sascha 'Xin' Atrops

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Netzwerkspiel [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.