Показать сообщение отдельно
Старый 05.09.2010, 07:22   #8
Vitalisimus
AnyKey`щик
 
Регистрация: 11.06.2009
Сообщений: 7
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Основы создания сетевой игры

NetGame=StartNetGame()

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("EEEE")

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)
 
Ответить с цитированием