All pastes #799817 Raw Edit

Etwas

public text v1 · immutable
#799817 ·published 2007-11-27 21:59 UTC
rendered paste body

;################################################## Player Type, hier werden die Spieler gespeichert.... :A
Type TPlayers
	Field X#
	Field Y#
	Field Rotation#
	Field Beschleunigung#
	Field Port
	Field IP
End Type
;################################################## Ja, allgemeiner Grafikkram, Auflösung 800x600, 32 bit, Fenstermodus + Tformfilter 0 für die Drehung des Autos
Graphics 800,600,32,2
TFormFilter 0
;################################################## Öffnung des Lokalen UDP Streams
Global Players.TPlayers
Global OwnUDPStream = CreateUDPStream()
;################################################## Erstellung des Autos + Rotation.
AutoImage = CreateImage(100,35)
SetBuffer ImageBuffer(AutoImage)
Color 255,255,255
Rect 0,0,200,200
Dim AutoImages(360)
For Done=0 To 360
	AutoImages(Done) = CopyImage(AutoImage)
	RotateImage AutoImages(Done), Done
	MidHandle AutoImages(Done)
Next
;##################################################  Ein lustig kariertes Hintergrundbild um zu sehen, dass man sich auch bewegt.
Global HintergrundImage = CreateImage(8,8)
SetBuffer ImageBuffer(HintergrundImage)
Color 50,50,50
Line 0,0,8,8
Line 8,0,0,8
;################################################## Selbsterklärend
SetBuffer BackBuffer()
;################################################## Der eigene Spieler wird erstellt, IP = 50 habe ich genommen, damit Blitz erkennt, dass es sich hier um den eigenen Spieler handelt.  50, weil es eine tolle Zahl ist.
Global OwnPlayer.TPlayers = New TPlayers
OwnPlayer\X# = Rand(0,700)
OwnPlayer\Y# = Rand(0,500)
OwnPlayer\Rotation = Rand(0,350)
OwnPlayer\Port = UDPStreamPort(OwnUDPStream)
OwnPlayer\IP = 50
;################################################## Kamerapositionen
Global CameraX
Global CameraY
;################################################## So, hier kommt die Steuerung, dabei wird zuerst nach dem eigenen Spieler gesucht (der, welcher die IP 50 hat, und dieser ist dann Steuerbar)
Function PlayerControls()
	
   ;##############################################
	OwnPlayer\X = (OwnPlayer\X+((OwnPlayer\Beschleunigung#/2)*Cos(OwnPlayer\Rotation#)))
	OwnPlayer\Y = (OwnPlayer\Y+((OwnPlayer\Beschleunigung#/2)*Sin(OwnPlayer\Rotation#)))
   ;##############################################
	CameraX = OwnPlayer\X
	CameraY = OwnPlayer\Y
   ;##############################################
	If KeyDown(200) Then
		If OwnPlayer\Beschleunigung# < -3.0 Then
			OwnPlayer\Beschleunigung# = OwnPlayer\Beschleunigung# + 1
		End If
		OwnPlayer\Beschleunigung# = OwnPlayer\Beschleunigung# + 0.1
	ElseIf KeyDown(208) Then
		If OwnPlayer\Beschleunigung# > 3.0 Then
			OwnPlayer\Beschleunigung# = OwnPlayer\Beschleunigung# - 1
		End If
		OwnPlayer\Beschleunigung# = OwnPlayer\Beschleunigung# - 0.1
	EndIf
   ;##############################################
	RotationsFaktor# = OwnPlayer\Beschleunigung#/5
	If RotationsFaktor# > 5 Then
		Rotationsfaktor# = 5
	End If
	If KeyDown(205) Then
		OwnPlayer\Rotation = OwnPlayer\Rotation#+RotationsFaktor#
	ElseIf KeyDown(203)
		OwnPlayer\Rotation = OwnPlayer\Rotation#-RotationsFaktor#
	End If
   ;###############################################
	If OwnPlayer\Rotation# > 360 Then OwnPlayer\Rotation# = 0
	If OwnPlayer\Rotation# < 0  Then OwnPlayer\Rotation# = 360
   ;##############################################
	If OwnPlayer\Beschleunigung# > 0 Then
		OwnPlayer\Beschleunigung# =  OwnPlayer\Beschleunigung# - 0.01
	ElseIf OwnPlayer\Beschleunigung# < 0 Then
		OwnPlayer\Beschleunigung# = ownplayer\Beschleunigung# + 0.01
	End If
   ;##############################################
End Function
;################################################## Hier werden alle Spieler gezeichnet
Function DrawPlayers()
	For Players = Each TPlayers
		DrawImage(AutoImages(Players\Rotation),(Players\X-CameraX)+GraphicsWidth()/2, (Players\Y-CameraY)+GraphicsHeight()/2)
	Next
End Function
;################################################## HIER MEIN VERDACHT. Naja, meine mehr oder weniger tolle Netzwerkfunktion. Die nicht Funktioniert.
Function NetWorkData()
   ;########### Empfangen
	While 1
		RemoteIP = RecvUDPMsg(OwnUDPStream)
		If RemoteIP = 0 Then
			Exit
		Else
			For Players = Each TPlayers
				If Players\IP = RemoteIP Then
					Success = 1 : Exit
				End If
			Next
			If Success = 0 Then
				Players = New TPlayers
			End If
			Players\X# = ReadFloat(OwnUDPStream)
			Players\Y# = ReadFloat(OwnUDPStream)
			Players\Rotation# = ReadFloat(OwnUDPStream)
			Players\IP = RemoteIP
			Players\Port = ReadInt(OwnUDPStream)
		End If
	Wend
   ;############################################## Senden
	For Players = Each TPlayers
		If Players\IP = 50 Then
			TempX# = Players\X#
			TempY# = Players\Y#
			TempRotation# = Players\Rotation#
			Exit
		End If
	Next
   ;##############################################
	For Players = Each TPlayers
		If Players\IP <> 50 Then
			WriteFloat OwnUDPStream, TempX#
			WriteFloat OwnUDPStream, TempY#
			WriteFloat OwnUDPStream, TempRotation#
			WriteInt OwnUDPStream, UDPStreamPort(OwnUDPStream)
			SendUDPMsg OwnUDPStream, Players\IP, Players\Port
		End If
	Next
   ;##############################################   
End Function
;################################################## Aus Blitzbase geklaut, um eine String IP in eine Integer IP zu verwandeln.
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
;################################################## Otherstuff umfasst die anzeige des Eigenen Ports und ein Joinmenü, wenn man leertaste drückt.

Function OtherStuff()
	Color 255,255,255
	Text 0,0,"Your Port: "+UDPStreamPort(OwnUDPStream)   
	If KeyHit(57) Then
		Cls()
		Players = New TPlayers
		Players\IP = INT_IP(Input$("Remote IP:"))
		Players\Port = Input("Remote Port:")
	End If
End Function
;################################################## Die Hauptschleife
Repeat
   ;##############################################
	NetWorkData()
	TileImage HintergrundImage, -CameraX, -CameraY
	PlayerControls()
	DrawPlayers()
	OtherStuff()
	Flip 1
	Cls()
Until KeyHit(1)