Code archives/Miscellaneous/circle wars

This code has been declared by its author to be Public Domain code.

Download source code

circle wars by xtremegamr2007
It's an online game that I made to test out an idea of mine. I haven't been able to test it, so could someone test it and tell me if it works? It's really messy, and there are some noticeable problems (like not dying when your health is below 0 and no HUD), but I'll fix that later.
;circle wars
;programmed by xtremegamr

AppTitle "circle wars"
SetGFX("Have fun shooting other dots","over the internet!","Controls:","WASD-Move","Mouse-Aim","Left Click- Shoot")

;globals
Global CIRCLESIZE=5,XHAIRSIZE=5
Global GAMESTATUS

;user type
Type user
	Field id ;id of player
	Field r,g,b ;color of player
	Field x,y ;coordinates
	Field xx,xy ;crosshair coordinates
	Field acrex,acrey ;acre coordinates
	Field spd ;player speed
	Field damage ;damage done by gun
	Field health ;health left
End Type

;;start game
GAMESTATUS=StartNetGame()

Select GAMESTATUS
	Case 0
		RuntimeError "The game could not be started."
	Case 1
		Print "You joined a game!"
	Case 2
		Print "You hosted a game!"
	Default
		RuntimeError "Something went VERY wrong!"
End Select

;;create player
Global p1.user=New user

p1\x=Rand(0,800)
p1\y=Rand(0,600)
p1\xx=p1\x
p1\xy=p1\y
p1\acrex=Rand(-5,5)
p1\acrey=Rand(-5,5)
p1\spd=Rand(5,7)
p1\damage=Rand(8,12)
p1\health=Rand(100,110)
p1\r=Rand(0,255)
p1\g=Rand(0,255)
p1\b=Rand(0,255)
name$=Input("What is your name? ")
p1\id=CreateNetPlayer(name$)

;main loop
While Not KeyHit(1)

SetBuffer BackBuffer()
Cls

updategame()

Flip
Wend ;end of main loop

End

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;functions
;SetGFX()
;what do you think it does?
Function SetGFX(imagefile$,info1$,info2$,info3$,info4$,info5$,info6$)

Graphics 800,600,0,2

;get selected mode
modes=CountGfxModes()
selectedmode=0
banner=LoadImage(imagefile$)
MidHandle banner
y=ImageHeight(banner)

Repeat

SetBuffer BackBuffer()
Cls

;draw banner
DrawImage banner,400,ImageHeight(banner)/2

;show gfx modes
For x=0 To modes

If x=selectedmode Then

Select x
	Case 0
		Text 400,y+12,"Windowed (default)",True,True
	Case 1
		Text 400,y+12,GfxModeWidth(selectedmode)+ "," +GfxModeHeight(selectedmode)+ "," +GfxModeDepth(selectedmode)+ " ->",True,True
	Case modes
		Text 400,y+12,"<- " +GfxModeWidth(selectedmode)+ "," +GfxModeHeight(selectedmode)+ "," +GfxModeDepth(selectedmode),True,True
	Default
		Text 400,y+12,"<- " +GfxModeWidth(selectedmode)+ "," +GfxModeHeight(selectedmode)+ "," +GfxModeDepth(selectedmode)+ " ->",True,True
End Select

Exit
End If

Next

;show text
Text 400,y+36,info1$,True,True
Text 400,y+48,info2$,True,True
Text 400,y+60,info3$,True,True
Text 400,y+72,info4$,True,True
Text 400,y+84,info5$,True,True
Text 400,y+96,info6$,True,True

;controls
If KeyHit(28) Then Exit ;enter
If KeyHit(203) Then selectedmode=selectedmode-1
If KeyHit(205) Then selectedmode=selectedmode+1

;constraints
If selectedmode<0 Then selectedmode=0
If selectedmode>modes Then selectedmode=modes

Flip
Forever

;do selected mode
If selectedmode=0 Then Graphics 800,600,0,2
If selectedmode>=1 Then Graphics GfxModeWidth(selectedmode),GfxModeHeight(selectedmode),GfxModeDepth(selectedmode),1

End Function

;updategame()
;updates the game...duh!
Function updategame()

draw() ;draw everything
travel() ;travelling between acres
controls() ;player controls
updateusers() ;updates all users
sendinfo() ;sends your user type variables to other players

End Function

;draw()
;draws the users
Function draw()

For p.user=Each user

If p\acrex=p1\acrex And p\acrey=p1\acrey Then
	Oval p\x,p\y,CIRCLESIZE,CIRCLESIZE,True ;circle
	drawxhair(p\x,p\y) ;xhair
End If

Next

End Function

;drawxhair()
;draws the xhair
Function drawxhair(x,y)

Line x-XHAIRSIZE,y,x+XHAIRSIZE,y ;left-right
Line x,y-XHAIRSIZE,x,y+XHAIRSIZE ;up-down

End Function

;travel()
;takes care of travelling between acres
Function travel()

If p1\x<0 Then p1\x=GraphicsWidth() : p1\acrex=p1\acrex-1
If p1\x>GraphicsWidth() Then p1\x=0 : p1\acrex=p1\acrex+1

If p1\y<0 Then p1\x=GraphicsHeight() : p1\acrey=p1\acrey-1
If p1\y>GraphicsHeight() Then p1\x=0 : p1\acrey=p1\acrey-1

End Function

;controls()
;player controls
Function controls()

;move
If KeyDown(17) Then p1\y=p1\y-p1\spd
If KeyDown(31) Then p1\y=p1\y+p1\spd

If KeyDown(30) Then p1\x=p1\x-p1\spd
If KeyDown(32) Then p1\x=p1\x+p1\spd

;shoot
If MouseHit(1) Then

For p.user=Each user

If circleshot(p\x,p\y,p1\xx,p1\xy) And (p\acrex=p1\acrex And p\acrey=p1\acrey) Then
	p\health=p\health-p1\damage
End If

Next

End If

End Function

;circleshot()
;returns true is the circle was shot
Function circleshot(tx,ty,xx,xy) ;target x, target y, xhair x, xhair y

If (xx>tx And xx<tx+CIRCLESIZE) And (xy>ty And xy<ty+CIRCLESIZE) Then
	Return True
End If

Return False

End Function

;updateusers()
;takes all of the messages recieved from other players and updates their user types
Function updateusers()

If RecvNetMsg() Then

For p.user=Each user

If p\id=NetMsgFrom() Then

Select NetMsgType()
	Case 1 ;r,g,b
		d$=NetMsgData()
		
		comma1pos=Instr(d$,",")
		comma2pos=Instr(d$,",",comma1pos+1)
		
		glen=(comma1pos+1)-comma2pos
		
		p\r=Mid(d$,1,comma1pos-1)
		p\g=Mid(d$,comma1pos+1,glen)
		p\b=Mid(d$,comma2pos+1)
	Case 2 ;x,y
		d$=NetMsgData()
		
		commapos=Instr(d$,",")
		
		p\x=Mid(d$,1,commapos-1)
		p\y=Mid(d$,commapos+1)
	Case 3 ;xx,xy
		d$=NetMsgData()
		
		commapos=Instr(d$,",")
		
		p\xx=Mid(d$,1,commapos-1)
		p\xy=Mid(d$,commapos+1)
	Case 4 ;acrex,acrey
		d$=NetMsgData()
		
		commapos=Instr(d$,",")
		
		p\acrex=Mid(d$,1,commapos-1)
		p\acrey=Mid(d$,commapos+1)
	Case 5 ;speed,damage,health
		d$=NetMsgData()
		
		comma1pos=Instr(d$,",")
		comma2pos=Instr(d$,",",comma1pos+1)
		
		glen=(comma1pos+1)-comma2pos
		
		p\spd=Mid(d$,1,comma1pos-1)
		p\damage=Mid(d$,comma1pos+1,glen)
		p\health=Mid(d$,comma2pos+1)
End Select

playerfound=1
Exit

End If

Next

If playerfound=0 Then p.user=New user : p\id=NetMsgFrom()

End If

End Function

;sendinfo()
;sends your info
Function sendinfo()

SendNetMsg(1,p1\r+ "," +p1\g+ "," +p1\b,p1\id)
SendNetMsg(2,p1\x+ "," +p1\y,p1\id)
SendNetMsg(3,p1\xx+ "," +p1\xy,p1\id)
SendNetMsg(4,p1\crex+ "," +p1\acrey,p1\id)
SendNetMsg(5,p1\spd+ "," +p1\damage+ "," +p1\health,p1\id)

End Function

Comments

Dabz2007
Erm, thanks, but... Its loaded with errors:-

1) SetGFX hasnt enough parameters
2) SendNetMsg(4,p1\crex+ "," +p1\acrey,p1\id) should be SendNetMsg(4,p1\acrex+ "," +p1\acrey,p1\id) I presume.
3) Image not found in SetGFX, parameter one is the image path, you are passing "Have fun shooting other dots" as the image path!?!?! WTF :/

Not good.

Dabz


xtremegamr2007
...oops.


Code Archives Forum