Mini-Online-Game Tutorial +++NEU Teil2 +++
Übersicht

cybyBetreff: Mini-Online-Game Tutorial +++NEU Teil2 +++ |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hi,
ich habe mal eine Tutorial angefangen wie man ein Mini-Online-Game macht. Wie findet ihr den 1te Teil ? Code: [AUSKLAPPEN] ;########################################################################### ; ; Tutorial zu einem MINI-Online-Game ; ; by cyby ; www.selobrain.de ; cyby-online@web.de ; ;################################### TUTORIAL-1 ; ; ;Dieses Tutorial könnte ihr nach belieben verwenden und verändern. Falls ;ihr es auf eure Seite stellen wollt bitte ich euch mich kurz zu ;benachrichtigen! ; ;########################################################################### ; ;Willkommen, dies ist mein ERSTES Tutorial wo ich schreibe . ;Es geht darum wie die GrundEngine für ein einfaches Onlinespiel aussehen ;könnte . Die Idee stammt hauptsächlich von Hubsi aus dem BB-Forum ;(www.blitzforum.de) . Ihr sollte Grundkenntnisse über BB haben welche man ;durch Tutorials von www.robsite.de oder durch das Buch "Jetzt lerne ich ;Spiele programmieren mit BlitzBasic" vom Verlag Mark&Technik . Falls ihr ;Befehle nicht kennt dann könnt ihr in der OnlineHilfe nachschauen ;(www.blitzbase.de) ! ; ;Es geht darum das jeder der Spieler einen Panzer steuern kann mit welchem ;man den anderen abschießen muss . Sobald man abgeschossen ist, wird dieser ;an einer neuen Stelle platziert und der Kampf geht weiter.Jede Spielrunde ;geht 5 Minuten. (könnt ihr aber im Code auch umstellen auf z.b. 3min) ;Um die Daten auszutauschen nehmen wir das UserDatenProtokoll oder kurz ;UDP, es ist nicht sicher ob die Daten ankommen (habe es aber noch nie ;erlebt) es geht aber hauptsächlich darum das es sehr schnell ist ! ; ;Info: ;Host nennt man auch Server ! ; ; Let's go... ; ;-----------> Daten laden .... <---------- ;hier werden Bilder geladen, Variablen ect. deklariert ; Global stream ;stream als global deklarieren damit man ihn auch in Funktionen verwenden kann, hiermit kann man dann später nachrichten empfangen Global sendeport = 8001 ;ist der Port womit man dann Daten senden kann Global empfangsport = 8000;ist der Port womit man dann Daten empfangen kann ; ;-----------> Hauptmenu <------------ ;erster einmal ein paar Infos zum Spiel Print "Willkommen zu einem MINI-Online-Game" Print " *Panzer-War - The Last Day* " 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 game() ;wenn 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" 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() 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 1ten Tutorial ! ;Um das ganze zu testen müsste ihr einfach das Programm 2mal starten, ;einmal Host[1] und einmal Client[2] wählen! Als erstes den Host starten, ;dann den Client mit der LocalenIP 127.0.0.1 !Wenn alles geht müssten alle ;beiden Programme automatisch game() starten , da noch nichts da ist ;gehen beide Programme aus . ;Ich entschludige mich für Rechtschreibfehler, bin halt auch nur ein Mensch ;und keine Maschienen! ; ;Falls ihr noch Fragen habt dann schickt mir eine PN oder eine E-Mail ;(findet ihr oben) . falls ihr sie gut findet , dann mache ich weiter .... |
||
- Zuletzt bearbeitet von cyby am Mi, Jul 07, 2004 14:25, insgesamt einmal bearbeitet
![]() |
Michi1988 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Tutorials sind immer gut, weiter so. | ||
![]() |
Mr.Keks |
![]() Antworten mit Zitat ![]() |
---|---|---|
hmm. naja, es erklärt etwas, wie man verbindet, aber das kann man auch einfach auf blitzbase nachlesen. interessanter ist es wohl, wie du mehrere spieler ermöglichst und verwaltest usw. | ||
MrKeks.net |
cyby |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
so , nun die 2te Tutorial , hoffe das es verständlich ist und man was lernen kann !
http://home.arcor.de/24web4free/mog_tut.rar hier ist Tutorial1+Tutorial2+Bilder drinne und hier noch der Code vom Tut2 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) . MfG cyby ![]() ps. je nach Feedback gibt es den 3ten Teil ! |
||
sven123 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich finde das Tut richtig gut,denn ich habe den Entschluss gefasst ein Onlineschachgme zu proggen,da habe ich erfreut festgestellt dass es hier ein so gutes und umfangreiches Tutorial zu Onlinegames gibt.
Ps:Ich freue mich schon auf Teil3 |
||
Amd Athlon 2200+,Saphire Atlantis Radeon9800pro,1024 MB DDR RAm,40 Gb Festblatte.
'in shâ'a llâh=so Gott will Fertiges Projekt:Invasion der Heuschrecken |
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
ich bin gerade auch dabei ein UPD Netzwerk aufzubauen und sah bei dir das du die IP des Servers selbst umwandelst und ich habe mich gefragt warum Mark das nicht eingebaut und habe dann wieder heraus gefunden das es auch einfacher geht . Also einfach aus den Settings den Server Namen lesen und eintragen und der Rest geht von selbst ![]() Code: [AUSKLAPPEN] .Network Global NetServer=0 Global NetServerIP=0 Global NetServerName$="DeinServerName" Global NetServerPort=8000 Global NetStreamIn=0 Global NetStreamOut=0 Function NetRun() Local n=0,IP1=0,IP2=0 NetServerIP=0 n = CountHostIPs(NetServerName$) ;hier den Server Namen eingeben If n=>1 Then IP1 = HostIP(1) n = CountHostIPs("") ;wenn leer dann bekommt man den lokalen Rechner If n=>1 Then IP2 = HostIP(1) If IP1=IP2 Then NetServer=1 Else NetServer=0 If NetServer=1 Then n = CountHostIPs("") ;wenn leer dann bekommt man den lokalen Rechner If n=>1 Then NetServerIP = HostIP(1) DebugLog "Network UDP Server" DebugLog "Server IP " + DottedIP(NetServerIP) NetStreamIn=CreateUDPStream(NetServerPort) ;auf dem hört der immer NetStreamOut=CreateUDPStream(NetServerPort+1) ;spricht Else n = CountHostIPs(NetServerName$) ;hier den Server Namen eingeben If n=>1 Then NetServerIP = HostIP(1) DebugLog "Network UDP Client" DebugLog "Server IP " + DottedIP(NetServerIP) NetStreamIn=CreateUDPStream(NetServerPort+1) ;hört NetStreamOut=CreateUDPStream(NetServerPort) ;sendet dahin wo der Server hört EndIf End Function Function NetStop() If NetStreamIn Then CloseUDPStream NetStreamIn :NetStreamIn =0 If NetStreamOut Then CloseUDPStream NetStreamOut :NetStreamOut=0 End Function Function NetInput() Local St=NetStreamIn Local i Local i1,i2,i3 Local f1#,f2#,f3# Local cmd$ Local IP Local Port IP=RecvUDPMsg(St) If IP=0 Then Return 0 Port=UDPMsgPort(St) DebugLog "RecvUDPMsg von "+DottedIP(IP)+":"+Port Local buf=ReadAvail (St) If buf>0 Then DebugLog "Net Input Buffer Len = "+buf Port=UDPMsgPort(St) i=ReadInt(St) Select i Case 0 cmd$=ReadString(St) DebugLog cmd$ Case 1 i1=ReadInt( St) i2=ReadInt( St) i3=ReadInt( St) Case 2 f1#=ReadFloat( St) f2#=ReadFloat( St) f3#=ReadFloat( St) End Select Return 1 End Function |
||
sven123 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wenn ich nerven sollte oder so dann einfach ignorieren.Hier habe ich mal deinen Code und in mal so umgebaut das die Panzer ohne Tile Engine fahren sie werden wenn eine der seiltlichen Pfeiltasten gedrückt werden um 2 Grad per rotateimage gedreht.Doch nun zu meinem Problem die verbindung klappt net obwohl ich alles richtig eingegeben habe und den Netzwerk code eigntlich unveränderet gelassen habe.
Code: [AUSKLAPPEN] Graphics 640,480,16,1 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 ; panzers1=LoadImage("panzer1.bmp") panzers2=LoadImage("panzer2.bmp") Global winkel1 Global player1x=0 Global player1y=0 ; Global player2x=640 Global player2y=480 Global winkel2 ;-----------> Hauptmenu <------------ ;erster einmal ein paar Infos zum Spiel Print "Fuzzy intelligence Game production presents" Print " Splater War Arena " 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 = 0 player1y = 0 ; player2x =640 player2y =480 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 =0 player1y =0 player2x =640 player2y =480 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 ;hier läuft später mal das ganze Game ab Function game() Repeat ;neue hauptschleife vom game Cls ;steuern des eigenen panzerns ;nur prüfen wenn der player sich nicht bewegt ! If player1_move = 0 Then ;damit das ganze nur einmal gesendet wird If KeyDown(205) Then 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) 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(200) 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) 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 ;Bewegung des Eigenen Spielers If winkel1 > 179 Then winkel1 = -180 If winkel1 < -180 Then winkel1 = 179 If player1_move=1 Then winkel1=winkel1+2 RotateImage panzers1,winkel1 EndIf If player1_move=3 Then winkel1=winkel1-2 RotateImage panzers1,winkel1 EndIf If player1_move=4 Then player1x=player1x-Sin(winkel1)*2 player1y=player1y+Cos(winkel1)*2 EndIf If player1_move=2 Then player1x=player1x+Sin(winkel1)*2 player1y=player1y-Cos(winkel1)*2 EndIf DrawImage panzers1,player1x,player1y ; If winkel2 > 179 Then winkel2 = -180 If winkel2 < -180 Then winkel2 = 179 If player2_move=1 Then winkel2=winkel2+2 RotateImage panzers2,winkel2 EndIf If player2_move=3 Then winkel2=winkel2-2 RotateImage panzers2,winkel2 EndIf If player2_move=4 Then player2x=player2x-Sin(winkel2)*2 player2y=player2y+Cos(winkel2)*2 EndIf If player2_move=2 Then player2x=player2x+Sin(winkel2)*2 player2y=player2y-Cos(winkel2)*2 EndIf DrawImage panzers2,player2x,player2y ;############################# 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 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 |
||
Amd Athlon 2200+,Saphire Atlantis Radeon9800pro,1024 MB DDR RAm,40 Gb Festblatte.
'in shâ'a llâh=so Gott will Fertiges Projekt:Invasion der Heuschrecken |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group