MAV bei Spiel ?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

ToeB

Betreff: MAV bei Spiel ?

BeitragSa, März 15, 2008 21:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Also : Ich hab ein Game gemacht, in dem man zu 15 Spielern Spielen kann. Der Erste Teil des Spieles handelt davon, dass man sich in die Server-Liste eintragen "einklinken" kann. Das klappt auch alles phne Fehler. Nur wenn ich das Spiel Starten möchte, krig ich direct nen MAV... Machnchmal ja, manchmal nein, über Internet immer. Warum klappt das nur im ersten Teil (Chat usw..) und wenn ich den Zweiten Teil starten möchte dann nicht ?
Und noch was : Warum wird der Schuss nur bei dem HOST erstellt und nicht bei den Clienten ? Wenn ein Client schießt, sieht das nur der HOST, wenn der HOST schießt sehen dass die Clienten... Warum ??
Aber hier erstmal der Code: [AUSKLAPPEN]
Graphics 800,600,16,1
SetBuffer BackBuffer()

Global Back = LoadImage("gfx\Back2.png")
TileImage Back,0,0
Color 0,0,0:Rect 0,0,300,400
Color 255,255,255
Flip

Const p_anz = 15
Global Port = 8000
Global max_p

Dim name$(p_anz) ;Name der Spieler
Dim IP(p_anz)    ;IP der Spieler
Dim acc(p_anz)    ;Ob eingeklinkt
Dim acc2(p_anz)    ;ob Bereit
Dim ch$(p_anz)   ;Chat der Spieler
Dim w#(p_anz),x(p_anz),y(p_anz),Lebn(p_anz),sch(p_anz) ;Positionen im Spiel

Type s
Field x#,y#,s#,c#,leb,del,ID
End Type

Type del
Field han
End Type


Dim txt$(5)
Dim txtCol$(5)

Dim cl$(30)
Dim cc$(30)

For i = 1 To 5:Read txt(i):Next
For i = 1 To 5:Read txtcol(i):Next

Global stream = CreateUDPStream(Port)
Global send_ms = MilliSecs()
Global ID = 1,server
Global G,Chat$
Global mx,my,mHIT,mDOWN,omx,omy
Global s.s,del.del

Print "Laden...."

Write "Lade Bilder ..."
smile_img = LoadImage("gfx\Smile.png"):MaskImage smile_img,255,0,255:MidHandle smile_img
Kan_img = LoadImage("gfx\Kan.png"):MaskImage Kan_img,255,0,255:MidHandle Kan_img
TFormFilter 0
Dim smile(90)
Dim Kan(90)
For xx = 0 To 90
   smile(xx) = CopyImage(smile_img)
   Kan(xx) = CopyImage(Kan_img)
   RotateImage smile(xx),xx*4
   RotateImage Kan(xx),xx*4
Next
FreeImage Smile_img
Global check = LoadAnimImage("gfx\CheckBox.png",17,17,0,2):MaskImage check,255,0,255
Write "Fertig !"

Print  ""
Write "Lade Sounds ..."
Global loop = LoadSound("amiga_deluxe.mp3"):LoopSound loop
Global Channel = PlaySound(loop)
Write "Fertig !"

;Delay 1500
Print ""

Print "Name ?"
name_$ = Input(">")
If name_ = "" Then name_ = "[NoName]"

Print "HOST (1) oder JOIN (2) ?"
Repeat
Server = Input(">")
Until Server > 0 And Server < 3

If Server = 2 Then
   Print "IP des Hosts ?"
   IP(1) = INT_IP(Input(">"))
   WriteByte(stream,2)
   WriteString(stream,name_)
   SendUDPMsg(stream,IP(1),Port)
   msms = MilliSecs()
   Print "Verbinde..."
   Repeat
   If RecvUDPMsg(stream)
      byte = ReadByte(stream)
      If byte = 2
         ID = ReadInt(stream)
         name(1) = ReadString(stream)
         For i = 1 To 30
            cl(i) = ReadString(stream)
            cc(i) = ReadString(stream)
         Next
         name(ID) = name_
         acc(ID) = 1
         acc(1) = 1
         Exit   
      ElseIf byte = 3
         Print "Kein Platz mehr vorhanden in der Server-Liste !"
         Print "Beende..."
         Delay 2000
         End
      EndIf    
   EndIf
   If msms <= MilliSecs() - 10000 Then
      Print "Konnte keine Verbindung zum angegebenen Server errichten !"
      Print "Programm wird beendet..."
      Delay 2000
      End
   EndIf
   Forever   
ElseIf Server = 1
   name(1) = name_
   acc(1) = 1
EndIf

FlushKeys()
Local bx,by

;Bereit2=1;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< RAUS DAMIT ***************************************************
Global Chat_Y,Balken_y=350,schieb = 0

Repeat
   omx = mx
   omy = my
   mx = MouseX()
   my = MouseY()
   mDown = MouseDown(1)
   bx = bx - 1
   by = by - 1
   TileImage Back,bx,by
   If Server = 1 And ID > 1
      Bereit_ = 0
      anzz = 0
      For i = 1 To p_anz
         If acc(i) = 1 Then anzz = anzz + 1
      Next
      For i = 1 To anzz
         If acc2(i) = 1 Then Bereit_ = Bereit_ + 1
      Next
      If Bereit_ = anzz Then Bereit = 1 Else Bereit = 0
      If Bereit = 1 Then
         Color 255,255,255:Rect 550,30,200,40,0:Text 650,42,"Spiel Starten",1
         If RectsOverlap(mx,my,1,1,550,30,200,40) Then
            Color 255,0,0:Rect 552,32,196,36,0:Text 650,42,"Spiel Starten",1
            If MouseDown(1) Then
               For i = 2 To p_anz
                  If acc(i) = 1 Then
                     WriteByte(stream,4)
                     SendUDPMsg(stream,IP(i),Port)
                  EndIf
               Next
               Bereit2 = 1
            EndIf
         EndIf
      EndIf
   EndIf
   If RectsOverlap(mx,my,1,1,500,Balken_y,20,20) And mDOWN Then schieb = 1
   If schieb = 1
      If Not mDOWN Then schieb = 0
      Balken_y = Balken_y + (my-omy)
   EndIf 
   If Balken_y < 350 Then Balken_y = 350
   If Balken_y > 350+180 Then Balken_y = 350+180
   Chat_y = (Balken_y-350)*1.2
   Color 150,150,150:Rect 500,350,20,200
   Color 100,100,100:Rect 100,350,400,200:Rect 100,560,400,20:Rect 500,Balken_y,20,20
   Color 255,255,255:Rect 100,350,400,200,0:Rect 100,560,400,20,0:Rect 500,350,20,200,0
   Color 255,255,255:Text 100,10,"NAME":Text 483.5,10,"STATUS",1
   Viewport 101,351,398,198
   For i = 1 To 30
      If cl$(i) <> ""
         SetColor(cc$(i))
         Text 102,339+i*13-Chat_Y,cl$(i)
      EndIf
   Next
   Viewport 0,0,800,600
   G = GetKey()
   If g <> 0 And g <> 13 And g <> 8 Then Chat$ = Chat$ + Chr(g)
   If g = 8 Or StringWidth(Chat$) > 396 Then Chat$ = Mid(Chat$,1,Len(Chat$)-1)
    Color 255,255,255:Text 102,563,Chat$:Rect 103+StringWidth(Chat$),563,1,13
   If g = 13 Then
      If Chat$ <> ""
         time$ = Left(CurrentTime(),5)
         If Server = 1
            SetChat("255,0,0","["+name(1)+"/"+Time$+"]")
            SetChat("255,255,255",Chat$)
            tmpc$ = Chat$
            Ch(1) = Chat$
            Chat$ = ""
         Else
            SetChat("0,0,255","["+name(ID)+"/"+Time$+"] :")
            SetChat("255,255,255",Chat$)
            ch(ID) = Chat$
            Chat$ = ""
         EndIf
      Else
         Chat$ = ""
      EndIf
   EndIf
   For i = 1 To p_anz
      Color 100,100,100:Rect 100,10+i*20,400,20
      If i > 1 Color 0,0,0:Rect 100,10+i*20,400,2
      If acc(i)
         SetText(110,14+i*20,1,name(i))
         DrawImage check,475,12+i*20,acc2(i)
      Else
         SetText(110,14+i*20,2)
         SetText(483.5,14+i*20,3,"",1)
      EndIf
   Next
   Color 0,0,0:Rect 465,30,2,p_anz*20
   If Server = 1 Then
      ;SetHTMLButton(600,100,"Wie ist meine IP ?","gfx\HTML1.htm")
      If send_ms <= MilliSecs() - 100 And ID > 1 Then
         For i = 2 To p_anz
            If acc(i) = 1 Then
               WriteByte(stream,1)
               For j = 1 To p_anz
                  If acc(j) = 1 And i<>j Then
                     WriteInt(stream,j)
                     WriteString(stream,name(j))
                     WriteByte(stream,acc2(j))
                     WriteString(stream,ch(j))
                  EndIf
               Next
               SendUDPMsg(stream,IP(i),Port)
            EndIf
         Next
         send_ms = MilliSecs()
      EndIf
      If RecvUDPMsg(stream)
         Select ReadByte(stream)
         Case 1
            ID = ReadInt(stream)
            name(ID) = ReadString(stream)
            acc2(ID) = ReadByte(stream)
            strr$ = ReadString(stream)
            If strr$ <> ch(ID) Then
               ch(ID) = strr
               time$ = Left(CurrentTime(),5)
               SetChat("0,0,255","["+name(ID)+"/"+Time$+"] :")
               SetChat("255,255,255",ch(ID))
            EndIf
         Case 2
            ID = ID + 1
            If ID <= p_anz Then
               name(ID) = ReadString(stream)
               IP(ID) = UDPMsgIP(stream)
               WriteByte(stream,2)
               WriteInt(stream,ID)
               WriteString(stream,name(1))
               For i = 1 To 30
                  WriteString(stream,cl(i))
                  WriteString(stream,cc(i))
               Next   
               SendUDPMsg(stream,IP(ID),Port)
               acc(ID) = 1
               time$ = Left(CurrentTime(),5)
               SetChat("0,255,0","["+name(ID)+"/"+Time$+"] :")
               SetChat("255,255,0","Hat dein Spiel betreten...")
            Else
               IPIP =UDPMsgIP(stream)
               WriteByte(stream,3)
               SendUDPMsg(stream,IPIP,Port)
            EndIf
         End Select
      EndIf
   ElseIf server = 2
      If RecvUDPMsg(stream) Then
         Select ReadByte(stream)
         Case 1
            For i = 1 To p_anz
               IDID = ReadInt(stream)
               name(IDID) = ReadString(stream)
               acc2(IDID) = ReadByte(stream)
               strr$ = ReadString(stream)
               If strr$ <> ch(IDID) Then      
                  ch(IDID) = strr$
                  time$ = Left(CurrentTime(),5)
                  If IDID = 1
                     SetChat("255,0,0","["+name(1)+"/"+Time$+"] :")
                  Else
                     SetChat("0,0,255","["+name(IDID)+"/"+Time$+"] :")
                  EndIf
                  SetChat("255,255,255",ch(IDID))
               EndIf 
               acc(IDID) = 1
            Next
            WriteByte(stream,1)
            WriteInt(stream,ID)
            WriteString(stream,name(ID))
            WriteByte(stream,acc2(ID))
            WriteString(stream,ch(ID))
            SendUDPMsg(stream,IP(1),Port)
         Case 4
            Bereit2 = 1
         End Select
      EndIf       
   EndIf
   If server = 1 Then       
      If RectsOverlap(mx,my,1,1,465,30,33,18) Then
         Color 255,255,255:Rect 467,31,33,18,0
         If MouseHit(1) Then acc2(1) = 1 - acc2(1)
      EndIf
   ElseIf Server = 2
      If RectsOverlap(mx,my,1,1,465,10+ID*20,33,18) Then
         Color 255,255,255:Rect 467,11+ID*20,33,18,0
         If MouseHit(1) Then acc2(ID) = 1 - acc2(ID)
      EndIf
   EndIf
   If KeyHit(1) Then End
   Color 255,255,0:Oval mx-10,my-10,20,20,0:Plot mx,my
   Flip
   Cls
Until Bereit2 = 1

ms = MilliSecs()
cd = 1000+(( -1 )*1000)

Repeat
   Text 400,1,"Spielvorbereitung...",1
   Text 400,300,((cd - (MilliSecs()-ms))/1000),1,1
   Flip
   Cls
Until ms <= MilliSecs() - cd
FlushKeys()
;####################################################################################################################
;################################################### GAME ###########################################################
;####################################################################################################################
send_ms = MilliSecs()
For i = 1 To p_anz
   x(i) = 100
   y(i) = 100
   Lebn(i) = 100
   sch(i) = 0
Next
Global ScrollX,ScrollY

Global shoot_ms = MilliSecs()
If Server = 1 Then ID = 1

Repeat
   mx = MouseX():my = MouseY()
   mHIT = MouseHit(1):mDown = MouseDown(1)
   If Server = 1  Then
      w(1) = ((-ATan2(mx-400,my-300)+450) Mod 360)
      If w(1) < 0 Then w(1) = 360
      If w(1) > 360 Then w(1) = 0
      If KeyDown(17) Then ScrollY = ScrollY- 2
      If KeyDown(31) Then ScrollY = ScrollY+ 2
      If KeyDown(30) Then ScrollX = ScrollX- 2
      If KeyDown(32) Then ScrollX = ScrollX+ 2
      If mDOWN And shoot_ms <= MilliSecs() - 1000 Then
         s.s = New s
         s\x = XPos(400+ScrollX)
         s\y = XPos(300+ScrollY)
         s\s = Sin(w(1))
         s\c = Cos(w(1))
         s\Leb = 5
         s\ID = 1
         sch(1) = 1
         shoot_ms = MilliSecs()
      EndIf
      If send_ms <= MilliSecs() - 25 Then
            x(1) = xPos(400+ScrollX)
          y(1) = yPos(300+ScrollY)
          For i = 2 To p_anz
            If acc(i) = 1 Then
               WriteByte(stream,1)
               For j = 1 To p_anz
                  If acc(j) = 1 And i<>j Then
                     WriteInt(stream,j)
                     WriteInt(stream,x(j))
                     WriteInt(stream,y(j))
                     WriteInt(stream,w(j))
                     WriteInt(stream,Lebn(j))
                     WriteInt(stream,sch(j))
                  EndIf
               Next
               SendUDPMsg(stream,IP(i),Port)
            EndIf
         Next
         For i = 1 To p_anz
            If acc(i) Then sch(i) = 0
         Next
         send_ms = MilliSecs()
      EndIf
      If RecvUDPMsg(stream)
         byte = ReadByte(stream)
         Select byte
         Case 1
            IDID = ReadInt(stream)
            x(IDID) = ReadInt(stream)
            y(IDID) = ReadInt(stream)
            w(IDID) = ReadInt(stream)
            sch_ = ReadInt(stream)
            If sch_ = 1 Then
               s.s = New s
               s\x = x(IDID)
               s\y = y(IDID)
               s\s = Sin(w(IDID))
               s\c = Cos(w(IDID))
               s\ID = IDID
               sch_ = 0
            EndIf
         End Select
      EndIf
      For s.s = Each s
         For i = 1 To p_anz
            If acc(i) Then
               If s\ID <> i And RectsOverlap(s\x,s\y,1,1,x(i)-7.5,y(i)-7.5,15,15)Lebn(i)=Lebn(i)-s\Leb:sDel=1
            EndIf
         Next
      Next
   ElseIf Server = 2
      w(ID) = ((-ATan2(mx-400,my-300)+450) Mod 360)
      If w(ID) < 0 Then w(ID) = 360
      If w(ID) > 360 Then w(ID) = 0
      If KeyDown(17) Then ScrollY = ScrollY- 2
      If KeyDown(31) Then ScrollY = ScrollY+ 2
      If KeyDown(30) Then ScrollX = ScrollX- 2
      If KeyDown(32) Then ScrollX = ScrollX+ 2
      If mDOWN And shoot_ms <= MilliSecs() - 1000 Then
         s.s = New s
         s\x = XPos(400+ScrollX)
         s\y = XPos(300+ScrollY)
         s\s = Sin(w(ID))
         s\c = Cos(w(ID))
         s\ID = ID
         sch(ID) = 1
         shoot_ms = MilliSecs()
      EndIf
      If RecvUDPMsg(stream) Then
         Byte = ReadByte(stream)
         Select byte
         Case 1
            For i = 1 To p_anz
               IDID = ReadInt(stream)
               x(IDID) = ReadInt(stream)
               y(IDID) = ReadInt(stream)
               w(IDID) = ReadInt(stream)
               Lebn(IDID) = ReadInt(stream)
               sch_ = ReadInt(stream)
               If sch_ = 1 Then
                  s.s = New s
                  s\x = x(IDID)
                  s\y = y(IDID)
                  s\s = Sin(w(IDID))
                  s\c = Cos(w(IDID))
                  s\ID = IDID
                  sch_ = 0
               EndIf                   
            Next
            WriteByte(stream,1)
            WriteInt(stream,ID)
            WriteInt(stream,xPos(400+ScrollX))
            WriteInt(stream,yPos(300+ScrollY))
            WriteInt(stream,w(ID))
            WriteInt(stream,sch(ID))
            SendUDPMsg(stream,IP(1),Port)
            sch(ID) = 0
         End Select
      EndIf
   EndIf
   Color 255,0,0
   TileImage Back,-ScrollX,-ScrollY
   Color 100,100,100
   For q=0 To 800 Step 20
      Rect 0,q-ScrollY Mod 20,800,1
      Rect q-ScrollX Mod 20,0,1,600
   Next
   Color 255,255,0
   For s.s = Each s
      s\x = s\x + s\c * 5
      s\y = s\y + s\s * 5
      Oval s\x-3-ScrollX,s\y-3-ScrollY,6,6
   Next
   For i = 1 To p_anz
      If acc(i)  Then
         If i <> ID
            DrawImage smile(w(i)/4),x(i)-ScrollX,y(i)-ScrollY
            DrawImage Kan(w(i)/4),x(i)-ScrollX,y(i)-ScrollY
            Color 0,0,0
            Rect x(i)-ScrollX-15,y(i)-ScrollY-27,30,13
            Rect x(i)-ScrollX-StringWidth(name(i))/2,y(i)-ScrollY-40,StringWidth(name(i)),14
            Color 255,255,255
            Text x(i)-ScrollX,y(i)-ScrollY-20,Lebn(i),1
            Text x(i)-ScrollX,y(i)-ScrollY-40,name(i),1
         Else
            DrawImage smile(w(i)/4),400,300
            DrawImage Kan(w(i)/4),400,300
            Color 0,0,0
            Rect 385,273,30,13
            Rect 400-StringWidth(name(i))/2,260,StringWidth(name(i)),14
            Color 255,255,255
            Text 400,273,Lebn(i),1
            Text 400,260,name(i),1
         EndIf
      EndIf
   Next
   Color 255,0,0:Oval mx-10,my-10,20,20,0:Plot mx,my
   Flip
   Cls
Until KeyHit(1)
End

Function SetChat(tc$,tt$)
   If tt$ <> ""
      c = 0
      For i = 1 To 30
         If cl(i) = "" Then
            c = 1
            cl(i) = tt$
            cc(i) = tc$
            If i > 14
               chat_y = chat_y + 13
               Balken_y = (chat_y/1.2)+350
            EndIf
            Exit
         EndIf
      Next
      If c = 0
         For i = 1 To 29
            cl(i) = cl(i+1)
            cc(i) = cc(i+1)
         Next
         cl(30) = tt$
         cc(30) = tc$
         chat_y = 28*13
         Balken_y = (chat_y/1.2)+350
      EndIf
   EndIf
End Function

Function XPos(xx)
   Return (ScrollX+xx)-ScrollX
End Function

Function YPos(yy)
   Return (ScrollY+yy)-ScrollY
End Function 


Function SetHTMLButton(x,y,Text$,Pfad$)
   If RectsOverlap(MouseX(),MouseY(),1,1,x,y,StringWidth(Text$),StringHeight(Text$)) Then
      Color 10,150,140
      If MouseHit(1) Then
         ExecFile(Pfad$)
      EndIf
   Else
      Color 220,140,30
   EndIf
   Text x,y,Text
   Rect x,y+StringHeight(Text$)+3,StringWidth(Text$),1
End Function
      

Function SetColor(ColorString$)
   Local r,g,b
   r = Int(Mid(ColorString$,1,Instr(ColorString$,",")-1)):ColorString$=Mid(ColorString,Instr(ColorString$,",")+1,12)
   g = Int(Mid(ColorString$,1,Instr(ColorString$,",")-1)):ColorString$=Mid(ColorString,Instr(ColorString$,",")+1,12)
   b = Int(Mid(ColorString$,1,Instr(ColorString$,",")-1)):ColorString$=Mid(ColorString,Instr(ColorString$,",")+1,12)
   Color r,g,b
End Function

Function SetText(x,y,num,Text$="",xmid=0,ymid=0)
   SetColor(txtCol(num))
   If Text$ = ""
      Text x,y,txt(num),xmid,ymid
   Else
      Text x,y,Text$,xmid,ymid
   EndIf
End Function

Function INT_IP(IP$)
   If Instr(IP$,".") <> 0 a1=Int(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,"."))
   If Instr(IP$,".") <> 0 a2=Int(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,"."))
   If Instr(IP$,".") <> 0 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


Data "","[LEER]","[X]","[BEREIT]","[NICHT BEREIT]"
Data "255,255,255","150,150,150","150,150,150","0,255,0","255,0,0"


Ich hoffe ihr könnt mir zumindest mit der schuss-frage helfen....

thx und mfg Crack93
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

The Shark

BeitragSa, März 22, 2008 22:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich schätze mal, wenn der client einen schuss abgiebt meldet der das zwar zum server, der server meldet es aber nicht weiter

Ich hab mir den code jetz allerdings nicht angesehn, aber nach deiner schilderung ist das warscheinlich

THE SHARK

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group