Internet - krieg keine Verbindung
Übersicht

Till P.Betreff: Internet - krieg keine Verbindung |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo !
Ich habe das "Tutorial zu einem Mini-Online Game" von cyby gestartet. Wenn ich das auf einem Rechner ausführe (Hostip: 127.0.0.1) funktioniert das einwandfrei. Wenn ich das aber mit einem Freund über Internet probiere (ip von www.whatismyip.de), klappt das nicht, denn die Datenpakete kommen nicht an, und das Programm beendet sich dann (wie im Code vorgesehen, wenn keine Verbindung zustande kommt.) ich hoffe ich hab mich einigermaßen verständlich ausgedrückt... hier mal (Tutorial-)Code: Code: [AUSKLAPPEN] ;###########################################################################
; ; Tutorial zu einem MINI-Online-Game ; ; by cyby ; www.selobrain.de ; cyby-online@web.de ; ;########################################################################### ; ;----------------------- 2 Tutorial -------------------------------------- ;In der 2ten Tutorial werden wir lernen wie man das Spielfeld zeichnet und ;beide ihre Panzer bewegen . Wenn sie sich bewegen wird dies auch beim ;anderen angezeigt ! ; ; ; Let's go... ; ;-----------> Daten laden .... <---------- ;hier werden Bilder geladen, Variablen ect. deklariert ; Graphics 640,480,16,2 SetBuffer BackBuffer() Global stream ;stream als global deklarieren damit man ihn auch in Funktionen verwenden kann, hiermit kann man dann später nachrichten empfangen Global sendeport ;ist der Port womit man dann Daten senden kann Global empfangsport ;ist der Port womit man dann Daten empfangen kann ; ;bevor wir weiter machen brauchen wir noch ein paar variablen Global ip ;diese Variable braucht wir um dann später in den Funktionen die IP vom Gegner zu nutzen ; Global mapx = 10 ;ist die X größe der karte wo wir später drauf kämpfen Global mapy = 10 ;ist die Y größe der karte wo wir später drauf kämpfen Global tilex = 32 ;die X größe der Tiles wo wir später brauchen... Global tiley = 32 ;die Y größe der Tiles wo wir später brauchen... ;nun legen wir ein Dim feld an indem wir später die Map speichern Dim map(mapx,mapy) Global player1x = 32*1;die x possition von einem Global player1y = 32*1;die y possition von einem Global player1_2x = 1;ist die possition für die kollision Global player1_2y = 1;ist die possition für die kollision Global player1_move = 0 ;gibt an in welche richtung sich der player bewegt Global player1_draw = 1 ;diese variable braucht um zu bestimmen welches bild vom panzer gezeichnet werden soll Global xo1 = 0 ;brauchen wir später damit der panzer sich nicht immer um 1tile bewegt sondern langsamer... Global player2x ;die x possition vom gegner Global player2y ;die y possition vom gegner Global player2_2x ;ist die possition für die kollision Global player2_2y ;ist die possition für die kollision Global player2_move = 0;gibt an in welche richtung sich der player bewegt Global player2_draw = 1;diese variable braucht um zu bestimmen welches bild vom panzer gezeichnet werden soll Global xo2 = 0 ;brauchen wir später damit der panzer sich nicht immer um 1tile bewegt sondern langsamer... Global player_speed = 1;der speed wo ein panzer läuft ;jetzte wird die map bestückt mit nummern der Tiles ; 0 = Graß -> keine Kollision ; 1 = Mauer -> kollision Data 1,1,1,1,1,1,1,1,1,1 Data 1,0,0,0,0,0,0,0,0,1 Data 1,0,0,0,0,0,0,0,0,1 Data 1,0,0,0,0,0,0,0,0,1 Data 1,0,0,0,0,0,0,0,0,1 Data 1,0,0,0,0,0,0,0,0,1 Data 1,0,0,0,0,0,0,0,0,1 Data 1,0,0,0,0,0,0,0,0,1 Data 1,0,0,0,0,0,0,0,0,1 Data 1,1,1,1,1,1,1,1,1,1 ;nun das data feld auslesen For y = 0 To mapy-1 ;-1 da ein dimfeld bei 0 anfängt For x = 0 To mapx-1 Read map(x,y) Next Next ;hier werden wir jetzte die Bilder geladen wie Tiles und Panzer ;jetzte die tiles laden, wir nehmen .bmp als Bildformat da einige von euch sicher nur die Demo von BlitzBasic haben, aber für größere spiele sollte ihre ein kleineres Format wie .png nehmen ... Global tiles = LoadAnimImage("tiles.bmp",32,32,0,2) ;jetzte die panzer laden... wir nehmen vorerst mal welche ohne animation... Global panzer1 = LoadAnimImage("panzer1.bmp",32,32,0,4) ;grüner panzer (eigener) MaskImage panzer1,255,0,255 ;rosa als tranparenz nehmen Global panzer2 = LoadAnimImage("panzer2.bmp",32,32,0,4) ;roter panzer (gegner) MaskImage panzer2,255,0,255 ;rosa als tranparenz nehmen ;-----------> Hauptmenu <------------ ;erster einmal ein paar Infos zum Spiel Print "Willkommen zu einem MINI-Online-Game" Print " *Panzer-War - The Last Day* " Print "" Print "Wähle [1] um das Spiel als Host zu starten.";Host ist der PC wo das Spiel startet Print "Wähle [2] um das Spiel als Client zu starten.";Client ist der PC wo sich mit einem Host verbindet Print "Wähle [3] um das Spiel zu Verlassen." wahl_nummer = Input("Ihre Wahl:") ;jetzte nach der Wahl des Players fragen If wahl_nummer = 1;wenn man 1 gewählt hat [Host] sendeport = 8000 ;ist der Port womit man dann Daten senden kann empfangsport = 8001;ist der Port womit man dann Daten empfangen kann stream = CreateUDPStream(empfangsport) ;den UDP-Stream erstellen um Daten zu empfangen If stream = 0 ;wenn der Stream nicht erstellt worde konnte Print "Konnte Stream nicht erstellen !" Print "Weiter mit Taste!" WaitKey End Else ;wenn der Stream erstellt worde konnte Print "Spiel als Host gestartet" Print "Deine IP findest du unter *www.wasistmeineip.de*," Print "diese braucht der Client um mit dir zu verbinden!" Print "Warten auf den Client..." Repeat ;solange warten bis der Client sich mit dem Host verbunden hat ip = RecvUDPMsg(stream);wenn eine nachricht empfangen wird... If KeyHit(1) Then ende() Until ip <> 0 WriteByte stream,1;eine anwort senden SendUDPMsg stream,ip,sendeport ;nun noch die daten vom anderen player angeben player1x = 32*5;die x possition player1y = 32*5;die y possition player1_2x = 5;ist die possition für die kollision player1_2y = 5;ist die possition für die kollision player2x = 32*1;die x possition player2y = 32*1;die y possition player2_2x = 1;ist die possition für die kollision player2_2y = 1;ist die possition für die kollision game() EndIf ElseIf wahl_nummer = 2;wenn man 2 gewählt hat [Client] ip_nummer$ = Input("Die IP vom Host: ") ;nach der IP fragen... ip = integerip(ip_nummer$) ;IP umwandeln... sendeport = 8001 ;ist der Port womit man dann Daten senden kann empfangsport = 8000;ist der Port womit man dann Daten empfangen kann stream = CreateUDPStream(empfangsport) ;den UDP-Stream erstellen um Daten zu empfangen If stream = 0 ;wenn der Stream nicht erstellt worde konnte Print "Konnte Stream nicht erstellen !" Print "Weiter mit Taste!" WaitKey End Else ;wenn der Stream erstellt worde konnte WriteByte stream,1 ;1 senden damit der Host weis das ein Client da ist SendUDPMsg stream,ip,sendeport ;die nachricht senden Delay 1000;1sekunde lang warten und dann prüfen ob der host da ist If RecvUDPMsg(stream) Then empfangen = ReadByte(stream) If empfangen = 1;wenn es 1 ist dann hat man das spiel als client gestartet Print "Spiel als Client gestartet" ;nun noch die daten vom anderen player angeben player1x = 32*1;die x possition player1y = 32*1;die y possition player1_2x = 1;ist die possition für die kollision player1_2y = 1;ist die possition für die kollision player2x = 32*5;die x possition player2y = 32*5;die y possition player2_2x = 5;ist die possition für die kollision player2_2y = 5;ist die possition für die kollision game() Else Print "Konnte Spiel nicht als Client starten!" Print "Weiter mit Taste!" ende() EndIf EndIf EndIf Else ;anonsten das Spiel Beenden End;beenden EndIf ;######################################################################### ;############################# FUNCTIONEN ################################ ;######################################################################### ;########################## game() ####################################### ;hier läuft später mal das ganze Game ab Function game() Repeat ;neue hauptschleife vom game Cls ;############################ map malen ;hier werden wir jetzte die map malen ! For x = 0 To mapx-1 For y = 0 To mapy-1 DrawImage tiles,x*tilex,y*tiley,map(x,y) Next Next ;######################################################################### ;############################### player1 (selber) ######################## ;######################################################################### ;############################ steuer seines eigenen panzerns ;nur prüfen wenn der player sich nicht bewegt ! If player1_move = 0 Then If KeyDown(200) And map(player1_2x,player1_2y-1) = 0 Then ;hoch ;das -1 bei player1_2y damit das tile vor dem panzer geprüft wird und wenn dieses frei ist (0=graß) dann kann der panzer fahren , sonst nicht ! If player1_move = 0 Then ;damit das ganze nur einmal gesendet wird ;nun die player1_2x und player1_2y senden WriteByte stream,1;eine kennnummer womit man dann rausfiltern kann weche daten das sind WriteByte stream,1 ;für player_move SendUDPMsg stream,ip,sendeport;nun werden die x und y possition gesendet ! EndIf player1_move = 1 ElseIf KeyDown(203) And map(player1_2x-1,player1_2y) = 0 ;links ;das -1 bei player1_2x damit das tile vor dem panzer geprüft wird und wenn dieses frei ist (0=graß) dann kann der panzer fahren , sonst nicht ! If player1_move = 0 Then ;damit das ganze nur einmal gesendet wird ;nun die player1_2x und player1_2y senden WriteByte stream,1;eine kennnummer womit man dann rausfiltern kann weche daten das sind WriteByte stream,3 ;für player_move SendUDPMsg stream,ip,sendeport;nun werden die x und y possition gesendet ! EndIf player1_move = 3 ElseIf KeyDown(205) And map(player1_2x+1,player1_2y) = 0 ;rechts ;das +1 bei player1_2x damit das tile vor dem panzer geprüft wird und wenn dieses frei ist (0=graß) dann kann der panzer fahren , sonst nicht ! If player1_move = 0 Then ;damit das ganze nur einmal gesendet wird ;nun die player1_2x und player1_2y senden WriteByte stream,1;eine kennnummer womit man dann rausfiltern kann weche daten das sind WriteByte stream,4 ;für player_move SendUDPMsg stream,ip,sendeport;nun werden die x und y possition gesendet ! EndIf player1_move = 4 ElseIf KeyDown(208) And map(player1_2x,player1_2y+1) = 0 ;runter ;das +1 bei player1_2y damit das tile vor dem panzer geprüft wird und wenn dieses frei ist (0=graß) dann kann der panzer fahren , sonst nicht ! If player1_move = 0 Then ;damit das ganze nur einmal gesendet wird ;nun die player1_2x und player1_2y senden WriteByte stream,1;eine kennnummer womit man dann rausfiltern kann weche daten das sind WriteByte stream,2 ;für player_move SendUDPMsg stream,ip,sendeport;nun werden die x und y possition gesendet ! EndIf player1_move = 2 EndIf EndIf ;############################ player bewegen If player1_move = 1;hoch player1_draw = 1 ;damit der panzer nach oben gezeichnet wird player1y = player1y - player_speed ;die y possition vermindern xo1 = xo1 + player_speed ;xo1 immer um den player speed erhöhen If xo1 = 32 Then ;wenn xo1 32 ist (tile ende) wird gestoppt xo1 = 0 ;wieder auf 0 setzten player1_move = 0 player1_2y = player1_2y - 1;die player possition welche wir für die kollision brauchen EndIf ElseIf player1_move = 2;runter player1_draw = 2 ;damit der panzer nach unten gezeichnet wird player1y = player1y + player_speed ;die y possition erhöhen xo1 = xo1 + player_speed ;xo1 immer um den player speed erhöhen If xo1 = 32 Then ;wenn xo1 32 ist (tile ende) wird gestoppt xo1 = 0 ;wieder auf 0 setzten player1_move = 0 player1_2y = player1_2y + 1;die player possition welche wir für die kollision brauchen EndIf ElseIf player1_move = 3;links player1_draw = 3 ;damit der panzer nach links gezeichnet wird player1x = player1x - player_speed ;die y possition vermindern xo1 = xo1 + player_speed ;xo1 immer um den player speed erhöhen If xo1 = 32 Then ;wenn xo1 32 ist (tile ende) wird gestoppt xo1 = 0 ;wieder auf 0 setzten player1_move = 0 player1_2x = player1_2x - 1;die player possition welche wir für die kollision brauchen EndIf ElseIf player1_move = 4;rechts player1_draw = 4 ;damit der panzer nach rechts gezeichnet wird player1x = player1x + player_speed ;die x possition erhöhen xo1 = xo1 + player_speed ;xo1 immer um den player speed erhöhen If xo1 = 32 Then ;wenn xo1 32 ist (tile ende) wird gestoppt xo1 = 0 ;wieder auf 0 setzten player1_move = 0 player1_2x = player1_2x + 1;die player possition welche wir für die kollision brauchen EndIf EndIf ;############################ player zeichnen If player1_draw = 1;hoch DrawImage panzer1,player1x,player1y,0 ElseIf player1_draw = 2;runter DrawImage panzer1,player1x,player1y,1 ElseIf player1_draw = 3;links DrawImage panzer1,player1x,player1y,2 ElseIf player1_draw = 4;rechts DrawImage panzer1,player1x,player1y,3 EndIf ;######################################################################### ;############################### player1 (selber) ######################## ;######################################################################### ;############################ player bewegen If player2_move = 1;hoch player2_draw = 1 ;damit der panzer nach oben gezeichnet wird player2y = player2y - player_speed ;die y possition vermindern xo2 = xo2 + player_speed ;xo2 immer um den player speed erhöhen If xo2 = 32 Then ;wenn xo2 32 ist (tile ende) wird gestoppt xo2 = 0 ;wieder auf 0 setzten player2_move = 0 player2_2y = player2_2y - 1;die player possition welche wir für die kollision brauchen EndIf ElseIf player2_move = 2;runter player2_draw = 2 ;damit der panzer nach unten gezeichnet wird player2y = player2y + player_speed ;die y possition erhöhen xo2 = xo2 + player_speed ;xo2 immer um den player speed erhöhen If xo2 = 32 Then ;wenn xo2 32 ist (tile ende) wird gestoppt xo2 = 0 ;wieder auf 0 setzten player2_move = 0 player2_2y = player2_2y + 1;die player possition welche wir für die kollision brauchen EndIf ElseIf player2_move = 3;links player2_draw = 3 ;damit der panzer nach links gezeichnet wird player2x = player2x - player_speed ;die y possition vermindern xo2 = xo2 + player_speed ;xo2 immer um den player speed erhöhen If xo2 = 32 Then ;wenn xo2 32 ist (tile ende) wird gestoppt xo2 = 0 ;wieder auf 0 setzten player2_move = 0 player2_2x = player2_2x - 1;die player possition welche wir für die kollision brauchen EndIf ElseIf player2_move = 4;rechts player2_draw = 4 ;damit der panzer nach rechts gezeichnet wird player2x = player2x + player_speed ;die x possition erhöhen xo2 = xo2 + player_speed ;xo2 immer um den player speed erhöhen If xo2 = 32 Then ;wenn xo2 32 ist (tile ende) wird gestoppt xo2 = 0 ;wieder auf 0 setzten player2_move = 0 player2_2x = player2_2x + 1;die player possition welche wir für die kollision brauchen EndIf EndIf ;############################ player zeichnen If player2_draw = 1;hoch DrawImage panzer2,player2x,player2y,0 ElseIf player2_draw = 2;runter DrawImage panzer2,player2x,player2y,1 ElseIf player2_draw = 3;links DrawImage panzer2,player2x,player2y,2 ElseIf player2_draw = 4;rechts DrawImage panzer2,player2x,player2y,3 EndIf ;############################# empfangen ################################# ;nun die empfangen daten rausfiltern und die variablen aktualisieren If RecvUDPMsg(stream) nummer = ReadByte(stream) Select nummer Case 1 ;die player_move nummer empfangen woraus dann der player bewegt wird player3_move = ReadByte(stream) End Select EndIf ;nun müssen wir das empfangen player3_move verarbeiten If player3_move > 0 Then;nur weiter verarbeiten wenn es größer ist als 0 If player2_move = 0 Then;wenn sich der panzer nicht bewegt dann zuweisen , sonst darauf warten player2_move = player3_move ;zuweisen player3_move = 0 ;und wieder auf 0 sezten EndIf ;nun, warum machen wir das so ? ;ganz einfach wenn wir player2_move = readbyte(stream) gemacht hätten ;gäbe es einen kleinen fehler wodurch sich der panzer nicht richtig ;bewegt ! EndIf Flip 0 ; flip 0 da es sonst sehr stark ruckelt ! Until KeyHit(1);wenn man ESCAPE drückt dann wird das game beendet ende() End Function ;########################## ende() ####################################### ;wenn man das Spiel beendet wird die Funktion ende() aufgerufen Function ende() CloseUDPStream stream ;stream beenden End ;alles schließen End Function ;########################### integerip() ################################# ;braucht man um die eingegebene IP zumzuwandeln Function IntegerIP(IP$) A1 = Int(Left(IP$,Instr(IP$,".")-1)) : IP$ = Right(IP$,Len(IP$)-Instr(IP$,".")) A2 = Int(Left(IP$,Instr(IP$,".")-1)) : IP$ = Right(IP$,Len(IP$)-Instr(IP$,".")) A3 = Int(Left(IP$,Instr(IP$,".")-1)) : IP$ = Right(IP$,Len(IP$)-Instr(IP$,".")) A4 = Int(IP$) Return (A1 Shl 24) + (A2 Shl 16) + (A3 Shl 8 ) + A4 End Function ;So, das wars auch schon mit der 2ten Tutorial ! ; ;Falls ihr noch Fragen habt dann schickt mir eine PN oder eine E-Mail ;(findet ihr oben) . Bin dankbar für jedwede Art von Hilfe! ![]() mfg Till |
||
![]() |
skey-z |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich habe mir den code nicht durchgelesen, weil wenn es bei dir auf rechner über den localhost funktioniert, wird es denek ich eher nicht am Code liegen.
ich schätze mal mindestens einer von euch hat nen Router, stimmts? der der das spiel eröffnet, muss auch die verwendeten Ports in dem Router freigeben, damit die pakete durchkommen. wie das geht, ist von router zu router unterschiedlich, musst mal nach portforwarding oder im Handbuch schauen. |
||
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz BAC#57: 2. Platz |
Till P. |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke erstmal, ich bin trotzdem noch nicht weiter gekommen.
Also, es handelt sich um zwei PCs innerhalb eines Haushaltes, die über einen Switch gleichzeitig ins Internet gehen. Die Verbindung erfolgt also übers Internet (nicht Lan). Ich weiß nicht ob euch die Information hilft mein Problem zu lösen.... Viel Glück ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group