Тема: Сеть
Показать сообщение отдельно
Старый 30.09.2007, 17:09   #21
Tadeus
Троллота
 
Регистрация: 09.07.2007
Сообщений: 1,829
Написано 554 полезных сообщений
(для 1,772 пользователей)
Re: Сеть

Type Player
 Field name$,id,ent
End Type

Global cam
Global myent
Global myid
Global myname$

Graphics3D 800,600,32,2
SetBuffer BackBuffer()

jng=JoinNetGame("World Arena","127.0.0.1")
If Not jng Then HostNetGame("World Arena")

p.Player=New Player
p\name=Input("Enter your name:")
p\id=CreateNetPlayer(p\name)
p\ent=CreateCube()
myname=p\name
myid=p\id
myent=p\ent

cam=CreateCamera()
PositionEntity cam,0,2,-5

While Not KeyHit(1)
 UpdatePlayer()
 UpdateNetwork()
 RenderWorld
 Flip
Wend

Function UpdatePlayer()
 If KeyDown(17) MoveEntity myent,0,0,.1
 If KeyDown(31) MoveEntity myent,0,0,-.1
 If KeyDown(30) TurnEntity myent,0,1,0
 If KeyDown(32) TurnEntity myent,0,-1,0
 SendNetMsg 2,PackMsg$(myent),myid,0
End Function

Function UpdateNetwork()
 While RecvNetMsg()
  Select NetMsgType()
   Case 100
    p.Player=New Player
    p\id=NetMsgFrom()
    p\name=NetPlayerName(p\id)
    p\ent=CreateCube()
   Case 101
    p.Player=FindPlayer(NetMsgFrom())
    FreeEntity p\ent
    Delete p
   Case 2
    p.Player=FindPlayer(NetMsgFrom())
    UnpackMsg(p\ent,NetMsgData$())
  End Select
 Wend
End Function

Function FindPlayer.Player( id )
 For p.Player=Each Player
  If p\id=id Then Return p
 Next
End Function

Function PackMsg$(ent)
 Return EntityX(ent)+"|"+EntityZ(ent)+"|"+EntityYaw(ent)
End Function

Function UnpackMsg(ent,dat$)
 xp=Instr(dat$,"|")
 x=Float(Left(dat$,xp))
 dat$=Right(dat$,Len(dat$)-xp)
 zp=Instr(dat$,"|")
 z=Float(Left(dat$,zp))
 dat$=Right(dat$,Len(dat$)-zp)
 yaw=Float(Left(dat$,Len(dat$)))
 PositionEntity ent,x,0,z
 RotateEntity ent,0,yaw,0
End Function
(Offline)
 
Ответить с цитированием