Ok ich hab den code wieder verbessert leider kann man den code eindeutig ausprobieren wenn man im netzwerk ist per IP-Adresse.
Ich habe herausgefunden wenn ich die hauptschleife kann weg lösche das es trotzdem noch so viel hat. ja dann schicke ich mal den code. Hier ist der:
BlitzBasic: [AUSKLAPPEN] [EINKLAPPEN] Graphics 640,320,16,2
Bild = CreateImage (10,50) SetBuffer ImageBuffer (Bild) For x=0 To 10 Line X+0,0,X+0,50 Next SetBuffer BackBuffer() Global xx# = 300.0, yy# = 300.0 Global angle# = Rnd( 0, 359 ) Global speed# = 2
Print \"Sample UDP Communications\"
Inp_Port=4000 Out_Port=4001
Print \"LOCAL IP:\" player = 0 ip_count=CountHostIPs(GetEnv(\"localhost\")) For i=1 To ip_count Print DottedIP(HostIP(1)) Next
Print \"Enter Destination IP#: xxx.xxx.xxx.xxx\" Dest_IP$=Input$(\">\")
IP= INT_IP(Dest_IP$) online = 1762 Print \"\" Print \"Starting Chat TO quit\"
udp_rd=CreateUDPStream(Inp_Port) udp_wr=CreateUDPStream(Out_Port)
.loop
Cls Y=MouseY() X=MouseX() If player = 1 Then
Else
EndIf klick = 1761 bildX = xx# + 640 bildY = yy# + 640 + 640 gsu=se#+1800
If MilliSecs() > zeit2 Then zeit2 = MilliSecs() + 100 If onlines = 2 Then WriteShort(udp_wr,Y) SendUDPMsg udp_wr,IP,Inp_Port EndIf If MilliSecs() > zeit Then zeit = MilliSecs() + 0 EndIf If player = 1 Then
EndIf EndIf If Not onlines = 2 Then If player = 1 Then EndIf If wait = 1764 Then WriteShort(udp_wr,wait) SendUDPMsg udp_wr,IP,Inp_Port wait=0 EndIf If player = 0 And MilliSecs() > zeit31 Then zeit31 = MilliSecs() + 100 .sende WriteShort(udp_wr,online) SendUDPMsg udp_wr,IP,Inp_Port byte1=0 EndIf EndIf If player = 1 And MilliSecs() > zeit9 Then zeit9 = MilliSecs() + 200 WriteShort(udp_wr,bildX) SendUDPMsg udp_wr,IP,Inp_Port WriteShort(udp_wr,bildY) SendUDPMsg udp_wr,IP,Inp_Port angles#=angle# + 1766 WriteShort(udp_wr,angles#) SendUDPMsg udp_wr,IP,Inp_Port EndIf If player = 1 Then
WriteShort(udp_wr,gsu) SendUDPMsg udp_wr,IP,Inp_Port EndIf If Not gesendet$ = \"ja\" Then If nix=1 Or player=1 And MilliSecs() > zeit5 Then player=1 nixe=1763 zeit5 = MilliSecs() + 700 WriteShort(udp_wr,nixe) SendUDPMsg udp_wr,IP,Inp_Port gesendet$=\"ja\" If Not gesendet$=\"ja\" Then gesendet$=\"nein\" EndIf Text 100,0,zeit Text 100,20,MilliSecs() Text 100,40, bildX Text 100,60, bildY Text 130,40, BallX Text 130,60, BallY Text 300,300, ges# Text 350,300, gsu Text 000,280, \"Wurde der Datenaustausch erfolgreich abgeschlossen? \"+gesendet$ IP_rd=RecvUDPMsg(udp_rd)
If IP_rd <> 0 Then Buflen=ReadAvail(udp_rd) If Buflen> 0 Then byte1=ReadShort(udp_rd) If byte1=13 Then Print Else EndIf EndIf EndIf
If byte1>-1 And byte1<641 Then GY=byte1 If byte1>640 And byte1<1281 Then BallX=byte1-640 If byte1>1280 And byte1<1761 Then BallY=byte1-1120 If byte1=1762 Then nix=1 player=1 If byte1=1763 Then player = 2 If byte1>1799 Then ges#=byte1-1800 If byte1=1764 Then Goto sende If byte1>1766 And byte1<1800 Then angle#=byte1-1766
If onlinese = 2 Then byte1 = 2 Or byte2 = 2 If nix=1 Or byte1=1762 Then onlines = 2 If onlines = 2 Then If player = 2 Then DrawImage Bild,630,GY-25 DrawImage Bild,0,Y-25 Else DrawImage Bild,0,GY-25 DrawImage Bild,630,Y-25 Text 200,200,Y Text 200,220,GY EndIf
If player = 1 Then xx# = xx# + Cos ( angle# ) * speed# yy# = yy# + Sin ( angle# ) * speed# Else BallX = BallX + Cos( angle# ) * speed# BallY = BallY + Sin( angle# ) * speed# EndIf If yy# > 320 Or yy# < 0 Then angle# = 360 - angle# EndIf If xx# < 0 Or xx# > 640 Then angle# = 180 - angle# EndIf If player = 2 Then If BallY > 320 Or BallY < 0 Then angle# = 360 - angle# EndIf If BallX < 0 Or BallX > 640 Then angle# = 180 - angle# EndIf EndIf If xx#-6 < 10 And xx#-6 > 0 And yy# < X-25+50 And yy# > X-25 Then angle# = 180 - angle# speede = speed# - 1 Text 0,0,\"Stufe:\" + speede Text 0,20,se# Text 0,40,ses# If player = 1 Then Text 0,60,BallX Text 0,80,BallY Else Text 0,60,xx# Text 0,80,yy# EndIf Text 0,100,player If player = 1 Then Oval xx#-5, yy#-5, 10, 10, 1
If player = 2 Then Oval BallX-5, BallY-5, 10, 10, 1 EndIf
If ImageRectCollide(Bild, 0, Y-25, 0, xx#-5, yy#-5, 10, 10) Or ImageRectCollide(Bild, 0, Y-25, 0, BallX-5, BallY-5, 10, 10) Then angle# = 180 - angle# If player = 1 Then se# = se# + 1 Else se# = ges# EndIf ses# = se# / 20 speed# = 2 + ses EndIf If ImageRectCollide(Bild, 630, Y-25, 0, xx#-5, yy#-5, 10, 10) Or ImageRectCollide(Bild, 630, Y-25, 0, BallX-5, BallY-5, 10, 10)Then angle# = 180 - angle# If player = 1 Then se# = se# + 1 Else se# = ges# EndIf ses# = se# / 20 speed# = 2 + ses EndIf
If byte1 = 1761 Then player = 2 EndIf Else Text 30,140, \"waiting for a opponent\" If MilliSecs() > zeitler Then wait = 1764 zeitler = MilliSecs() + 1500 If byte1 = 1761 Then onlinese = 2 EndIf EndIf If KeyDown(1) Then Goto quit Flip Goto loop
.quit CloseUDPStream udp_wr CloseUDPStream udp_rd
Function INT_IP(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 End
Ich wollte Pong nach programmieren für netzwerk haut aber net so richtig hin der ball will einfach net gleich fliegen und an der selben posy sein wie beim andern rechner und er zuckt immer so ich hoffe jemand kann mir helfe die 85% zu reduzieren und das es schneller geht weil die daten werden später angezeigt wenn ich aber alle programme schließe und das dann starte ist es zwar gleich aber trotzdem noch 3% unter 100% und da fehlt noch ein prog und mein game wird total langsam ich hoffe wenn es aufgehoben ist das der ball früher am anderen PC gesendet wird und vorallem die balken. Ehm das ist eine komische art daten zu senden aber sie funktioniert. Jo dann hoffe ich, dass das problem bald weg ist damit ich es richtig testen kann man braucht ein 3,0Ghz prozessor damit das spiel nicht über 70% steigt !! Hab ich bei meinem freund getestet! da war es aber noch net so weit hier der code als ich es mit meinem freund gemacht hab.
BlitzBasic: [AUSKLAPPEN] [EINKLAPPEN] Graphics 640,480,16,2 SetBuffer BackBuffer() Print \"Sample UDP Communications\"
Inp_Port=4000 Out_Port=4001
Print \"LOCAL IP:\"
ip_count=CountHostIPs(GetEnv(\"localhost\")) For i=1 To ip_count Print DottedIP(HostIP(1)) Next
Print \"Enter Destination IP#: xxx.xxx.xxx.xxx\" Dest_IP$=Input$(\">\") IP= INT_IP(Dest_IP$)
Print \"\" Print \"Starting Chat TO quit\"
udp_rd=CreateUDPStream(Inp_Port) udp_wr=CreateUDPStream(Out_Port)
.loop Cls If KeyDown(203) Then Y=1 If KeyDown(205) Then Y=3 If Not KeyDown(203) Or KeyDown(205) Then Y=2 Print WriteShort(udp_wr,Y) SendUDPMsg udp_wr,IP,Inp_Port
IP_rd=RecvUDPMsg(udp_rd)
If IP_rd <> 0 Then Buflen=ReadAvail(udp_rd) If Buflen> 0 Then byte1=ReadByte(udp_rd) If byte1=13 Then Print Else Write Chr$(byte1) EndIf EndIf EndIf If KeyDown(1) Then Goto quit Oval byte1*20,Y,20,20,1 Flip Goto loop
.quit CloseUDPStream udp_wr CloseUDPStream udp_rd
Function INT_IP(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 dann und ich probiere schon heut den ganzen tag rum wie ich es lösen kann leider hänge ich fest am Ball. Aber sonst alles geht gut und alle Variablen kommen richtig an bis vielleicht auf die BallKoordinaten weil die werden ja net gleich gesendet sonstern an den werten angepasst aber es geht das war aber meine einzigste möglichkeit weil mit TCP oder anderer möglich kann ich es net und UDP mach zumindest nicht diesen fester auf die IPs werden auf ner datei im netz gespeichert und man muss dann später nur auf das Spiel klicken um sich mit dem spieler zu verbinden.
|