Game Net

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

X0r

Betreff: Game Net

BeitragDi, Jul 18, 2006 16:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo. Da ich in B3D jetzt mal ein Net Spiel programmieren will, hab ich einige Fragen:

Was ist besser? UDP oder TCP oder Direct Play?

P2P oder Client Server?

Lohnt es sich überhaupt ein 3D NET Shooter in B3D zu machen? Wird es flüssig laufen oder ist das GNET in B3D nicht so schnell?


Kann mir bitte jemand ein sehr kleines Beispiel schicken(z.B ein kleines Chatprogramm oder mit Kreisen als Charakter. Bitte nicht so viel code. Möglichst klein. Nur das wichtigste!)? Danke im voraus.


Angenommen, man nehme UDP und Client Server, wie macht man das mit Schüssen? Wenn ein Client schießt, müsste man dem Hoster ein Befehl schicken, oder? Der müsste das wiederum an alle verschicken, oder? Argh, wie geht das????


Bitte helfen. Ich will es dringend lernen!!

Hab schon gesucht, aber nichts leichtes mit Erklärung gefunden.

BtbN

BeitragDi, Jul 18, 2006 16:40
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Ich glaube, du schmeißt BMax und B3D gehörig durcheinander.
2. Zum Thema UDP,TCP,DP: Das wurde schon dutzende male diskutirert. Suchen!

Und wegen Client/Server: Das hängt ganz vom Spiel ab. Was haste denn vor?
 

X0r

BeitragDi, Jul 18, 2006 16:42
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Nein, warum?

Ego-Shooter, sagte ich schon.

BtbN

BeitragDi, Jul 18, 2006 16:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Wegen dem GNet, welches auch als Netzwerk-Modul für BMax verfügbar ist.
Naja, für nen EgoShooter würde ich eine kombi empfehlen. Der Server kommuniziert Server/Client mäßig per TCP mit allen Clients und die Clients P2P mit UDP untereinander.
Dabei must du schaun, dass wichtige, relevante Daten per TCP und unwichttigere, wie sich ständig ändernde Positions-Daten, per UDP gesendet werden.
 

X0r

BeitragDi, Jul 18, 2006 16:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Das sagt mir jetzt nichts, da ich, wie ich schon als erstes gesagt habe, mich weder mit UDP sonst was, noch mit versanden von irgendwelchen Daten über net.
Ein Beispiel wäre net. Billigeer kleiner Chat oder sowas.


Aber wenn die Clienten dem Server ihr Daten versenden und der Server den Clienten diese Daten nochmal versendet, warum sollen die Clienten sich nochmal gegenseitig den ganzen Mist senden? Hä? Hab ich was falsch verstanden?

BtbN

BeitragDi, Jul 18, 2006 16:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier mal nen paar Ergebnisse meiner Suche nach "Chat" im Codearchiv:

https://www.blitzforum.de/foru...light=chat <- UDP
https://www.blitzforum.de/foru...light=chat <- TCP
https://www.blitzforum.de/foru...light=chat <- UDP
https://www.blitzforum.de/foru...light=chat <- DirectPlay
 

X0r

BeitragDi, Jul 18, 2006 17:11
Antworten mit Zitat
Benutzer-Profile anzeigen
1. + 2. + 3. zu lang. Das hilf nicht so viel.

4. ist DirectPlay. Das kann man für Ego Shooter ja wohl vergessen.



Kann mir keiner ein kleines Beispiel senden? Nicht unbedingt ein Chat. Man soll nur heraussehen können, wie das mit UDP|TCP|Whatever funktioniert.
Danke
 

Nox

BeitragDi, Jul 18, 2006 20:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei aller Liebe, aber entweder schraubst du deine Ansprüche um einiges runter, oder du bewegst deinen (setze ein böööses Wort ein) selbst und informierst dich darüber. Onlinehilfe und Forumsuche reichen vollkommen aus, das ganze Thema wurde schon tausende Male durchgekaut.
Jedenfalls sehe ich das so, helfen würde ich dir wegen o.g. Gründe so nicht..
 

X0r

BeitragDi, Jul 18, 2006 21:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok. Hab da mal was selber versucht.
Weiß aber nicht ob das klappt. Kann das bitte jemand überprüfen?
Code für Hoster:
Code: [AUSKLAPPEN]

Type person
Field name$
Field ip$
Field port
End Type

stream=CreateUDPStream()
port=UDPStreamPort(stream)
Print port
ips=CountHostIPs("")

If Not ips Then
RuntimeError("Error. IP Error!")
Else
ipa=HostIP(ips)
ip$=DottedIP(ipa)
Print"IP: "+ip$
EndIf

myname$=Input("Name: ")
Repeat


While RecvUDPMsg(stream)
                  
If ReadAvail(stream) Then   
streamid=ReadByte(stream)
If streamid=1 Then

name$=ReadLine(stream)
person.person=New person
person\name$=name$
person\ip$=UDPMsgIP(stream)
person\port=UDPMsgPort(stream)



ElseIf streamid=2
End
name$=ReadLine(stream)
message$=ReadLine(stream)

For person.person=Each person
WriteByte stream,2
WriteLine stream,name$
WriteLine stream,message$
SendUDPMsg(stream,person\ip$,person\port)
Next


EndIf

EndIf
Wend






inp$=Input("Message: ")

For person.person=Each person
WriteByte stream,2
WriteLine stream,myname$
WriteLine stream,inp$
SendUDPMsg(stream,person\ip$,person\port)
Next







Until KeyHit(1)





Code für Joiner:
Code: [AUSKLAPPEN]

stream=CreateUDPStream()
port=UDPStreamPort(stream)
ips=CountHostIPs("")
If Not ips Then
RuntimeError("Error. IP Error!")
Else
ipa=HostIP(ips)
ip$=DottedIP(ipa)
Print"Your IP:" +ip$
EndIf

name$=Input("Name: ")
WriteByte stream,1
WriteLine stream,name$



hip$=Input("Host ip: ")
hostport=Input("Host port: ")
SendUDPMsg(stream,hip$,hostport)

Repeat



While RecvUDPMsg(stream)            
If ReadAvail(stream) Then   
bit=ReadByte(stream)
If bit=2 Then
uname$=ReadLine(stream)
umessage$=ReadLine(stream)
Color 100,200,100
Print uname$+": "+umessage$
Color 255,255,255
EndIf
EndIf
Wend




message$=Input("Mesage: ")
WriteByte stream,2
WriteLine stream,myname$
WriteLine stream,inp$
SendUDPMsg(stream,hip$,hostport)






Until KeyHit(1)

Hubsi

BeitragDi, Jul 18, 2006 23:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Starte beide Instanzen nebeneinader auf Deiner Kiste und verwende als Ip 127.0.0.1 -> und schon kann das testen losgehen.
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

X0r

BeitragMi, Jul 19, 2006 11:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Ip zu meiner Hardware? funktioniert nicht. Habe ich schon längst ausprobiert. Ich glaube, das PRogramm ist fehlerhaft. Ich geh das nochmal durch.

Edit: Hab den Fehler gefunden. Hab aus versehen nur 1 Port erstellt(Zum senden und lesen). Und beim Joiner das gleicher. Bisschen ungünstig.

Smokie

BeitragMi, Jul 19, 2006 12:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Du brauchst auch nur pro Client/Host einen Port.
Das geht schon.

Grüße
M-Soft Studios Mit selbst gemachtem Forum!!!
Unbequem lebt's sich schwer.
Musik macht erst Spaß, wenn man sie mit 2,8 facher Geschwindigkeit hört
Zuletzt bearbeitet von Smokie am Fr Jan 01, 1888 51:58 PM, insgesamt 1000-mal bearbeitet
 

Dreamora

BeitragMi, Jul 19, 2006 12:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo ... aber er hat für Client und Host den gleichen Port genommen, was natürlich nicht funktioniert.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

X0r

BeitragMi, Jul 19, 2006 17:34
Antworten mit Zitat
Benutzer-Profile anzeigen
..und außerdem habe ich, wie man oben sehen kann, die IP bei sendudpmsg stream,ip,port so als String versendet und nicht als Integer-Wert. Was natürlih auch nicht geht.
Habs verbesser und jetzt klappts.

Thema beendet.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group