May 06, 2024, 11:10:19 PM

News:

Own IWBasic 2.x ? -----> Get your free upgrade to 3.x now.........


for next crash

Started by yujinwunz, December 23, 2008, 02:08:46 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

yujinwunz

here is a big chunk of code with graphics removed for debugging without crashing fullscreen:



CONST DIK_ESCAPE = 0x01
CONST DIK_1 = 0x02
CONST DIK_2 = 0x03
CONST DIK_3 = 0x04
CONST DIK_4 = 0x05
CONST DIK_5 = 0x06
CONST DIK_6 = 0x07
CONST DIK_7 = 0x08
CONST DIK_8 = 0x09
CONST DIK_9 = 0x0A
CONST DIK_0 = 0x0B

CONST DIK_RETURN = 0x1C
CONST DIK_SPACE = 0x39 'shoot!

CONST DIK_UP = 0xC8 /* UpArrow on arrow keypad */
CONST DIK_LEFT = 0xCB /* LeftArrow on arrow keypad */
CONST DIK_RIGHT = 0xCD /* RightArrow on arrow keypad */
CONST DIK_DOWN = 0xD0 /* DownArrow on arrow keypad */

CONST DIK_W = 0x11 'second player
CONST DIK_A = 0x1E
CONST DIK_S = 0x1F
CONST DIK_D = 0x20




DEF ret as INT
DEF request as INT

DEF dx[11,112] as float
DEF dy[11,112] as float
DEF da[11,112] as float
DEF dv[11,112] as float 'velocity, or x in turbos
DEF dh[11,112] as INT
DEF ds[11,112] as INT   'shooting status
DEF dda[11,112] as INT 'def destined angle, or y in turbos
DEF dva[11,112] as INT 'vision angle
DEF dvd[11,112] as INT 'vision distance
DEF df[11,112] as INT 'finding status
DEF dref[11,112] as INT


DEF tx[11,112] as FLOAT
DEF ty[11,112] as FLOAT
DEF ta[11,112] as float
DEF tv[11,112] as float
DEF th[11,112] as INT
DEF tls[11,112] as INT 'need to replace
DEF tda[11,112] as INT

DEF distance as INT
DEF target[11,112] as INT


DEF dis as float
DEF ttarget[11,112] as INT 'enimy proposed target
DEF ttype[11,112] as INT



DEF lx[11,112,17] as float 'alliance laser variables
DEF ly[11,112,17] as float
DEF la[11,112,17] as float
DEF le[11,112,17] as INT
DEF lr[11,112] as INT
DEF l[11,112] as INT

DEF elx[11,112,17]  as float 'enimy laser variables
DEF ely[11,112,17]  as float
DEF ela[11,112,17]  as float
DEF ele[11,112,17]  as INT
DEF elr[11,112]  as INT
DEF el[11,112] as INT

DEF wings as INT
DEF es as INT
DEF back as float

DEF crt as INT
DEF exitGame as INT
crt = 57.2957795


DEF i as INT
DEF c AS INT
DEF j as INT
DEF exit as INT
DEF k as INT

DEF panx as INT
DEF pany as INT


ta = 1

es = 40
wings = 15
cor = 5
sd = 5

FOR i = 0 to wings 'set initial variables----------------------

dv[0,i] = 1
da[0,i] = RAND(360)
dx[0,i] = RAND(000,1000)
dy[0,i] = RAND(850,1450)

dh[0,i] = 1000
ds[0,i] = 1
le[0,i] = 1
lr[0,i] = 30
l[0,i] = 1
dva[0,i] = 5
dvd[0,i] = 100



NEXT i

FOR i = 0 to cor 'corillean frigets

dx[1,i] = RAND(000,1000)
dy[1,i] = RAND(850,1450)
dh[1,i] = 200
dv[1,i] = 0.1

NEXT i

FOR i = 1 to (cor + 1) * 4

dref[3,i-1] = INT(i/4)
dh[3,i-1] = 100

NEXT i


FOR j = 0 to es


ta[0,j] = RAND(360)
tx[0,j] = RAND(000,1100)
ty[0,j] = RAND(50,650)
th[0,j] = 5
elr[0,j] = 30
ele[0,j] = 1

NEXT j

FOR i = 0 to sd 'sd frigets

tx[1,i] = RAND(000,1100)
ty[1,i] = RAND(50,650)
th[1,i] = 200
tv[1,i] = 0.1

NEXT i

'menu===================================================================================

'game--------------------------------------------------------------------------------------







'game===============================================================


DO


'keycontrols!----------------------------------------------------------------------

IF KEYDOWN(DIK_ESCAPE) THEN exitGame = 1

'aiming!-------------------------------------------------------------------


'the ai for the good!-----::::::::::::::::

FOR i = 1 to wings

FOR j = 0 to es 'finding target, es is taerget number

IF distance > SQRT(ABS(dx[0,i]-tx[0,j]) * ABS(dx[0,j]-tx[0,j])  + ABS(dy[0,j] - ty[0,j] ) * ABS(dy[0,i] - ty[0,j] ) ) & th[0,j] > 0 THEN

target[0,i] = j
distance = SQRT(ABS(dx[0,i]-tx[0,j]) * ABS(dx[0,j]-tx[0,j]) + ABS(dy[0,j] - ty[0,j] ) * ABS(dy[0,i] - ty[0,j] ))
ttype[0,i] = 0

ENDIF

NEXT j


dda[0,i] = ATAN((dy[0,i]-ty[0,target[0,i]])/(dx[0,i]-tx[0,target[0,i]])) * crt -90 'locking target to your ship by setting all variables
IF ABS(dx[0,i]-tx[0,target[0,i]]) <> dx[0,i] - tx[0,target[0,i]] THEN dda[0,i] = dda[0,i] + 180

IF dda[0,i] < 0 THEN dda[0,i] = dda[0,i] + 360 'angle correction



'aiming of AI------------------

back = da[0,i] - 180

IF dda[0,i] > back & dda[0,i] < da[0,i] THEN da[0,i] = da[0,i] - 1.5
IF dda[0,i] > 0 & dda[0,i] < back THEN da[0,i] = da[0,i] + 1.5

back = da[0,i] + 180

IF dda[0,i] < back & dda[0,i] > da[0,i] THEN da[0,i] = da[0,i] + 1.5
IF dda[0,i] < 360 & dda[0,i] > back THEN da[0,i] = da[0,i] - 1.5

'end of aiming


IF ABS(dda[0,i] - da[0,i]) < 3 & distance < 800 THEN 'toggle shoot
ds[0,i] = 1
da[0,i] = dda[0,i]
ELSE
ds[0,i] = 0
ENDIF




IF ABS(dda[0,i] - da[0,i]) < 90 & distance < 50 THEN
dv[0,i] = 0.3
ELSE
dv[0,i] = 0.6
ENDIF
distance = 1000
NEXT i





IF KEYDOWN(DIK_LEFT) THEN da = da - 1.5                   'turn left
IF KEYDOWN(DIK_RIGHT) THEN da = da + 1.5 'turn right

'angle adjustments--------------------------------




IF KEYDOWN(DIK_UP) THEN
IF dv[0,0] < 1 THEN dv[0,0] = dv[0,0] + 0.01 'speed up
ENDIF

IF KEYDOWN(DIK_DOWN) THEN
IF dv[0,0] > 0.35 THEN dv[0,0] = dv[0,0] - 0.01 'slow down
ENDIF

'mk laser!----------------------------------------------

IF KEYDOWN(DIK_SPACE) & lr[0,0] < 0 THEN 'make laser

lx[0,0,l[0,0]] = dx[0,0]
ly[0,0,l[0,0]] = dy[0,0]
la[0,0,l[0,0]] = da[0,0]
le[0,0,l[0,0]] = 1
l[0,0] = l[0,0] + 1
lr[0,0] = 10
IF l[0,0] = 6 THEN l[0,0] = 1
ENDIF

'alliance laser shooting



FOR i = 1 to wings 'make teammate's laser

IF ds[0,i] = 1 & lr[0,i] < 0 & dh[0,i] > 0 & dh[0,i] > 0 THEN

lx[0,i,l[0,i]] = dx[0,i]

ly[0,i,l[0,i]] = dy[0,i]
la[0,i,l[0,i]] = da[0,i] 
le[0,i,l[0,i]] = 1
l[0,i] = l[0,i] + 1
lr[0,i] = 150
IF l[0,i] = 4 THEN l[0,i] = 1


ENDIF

NEXT i


'AI for frigets--------------------------------------------------------------------------------

FOR i = 0 to cor

distance = 1000

FOR j = 0 to sd 'finding target, es is taerget number

IF distance > SQRT(ABS(dx[1,i]-tx[1,j]) * ABS(dx[1,j]-tx[1,j])  + ABS(dy[1,j] - ty[1,j] ) * ABS(dy[1,i] - ty[1,j] ) ) & th[1,j] > 0 THEN
target[1,i] = j 'target number is locked
distance = SQRT(ABS(dx[1,i]-tx[1,j]) * ABS(dx[1,j]-tx[1,j]) + ABS(dy[1,j] - ty[1,j] ) * ABS(dy[1,i] - ty[1,j] ))

ENDIF

NEXT j



'angle adjustment

dda[1,i] = ATAN((dy[1,i]-ty[1,target[1,i]])/(dx[1,i]-tx[1,target[1,i]])) * crt -90 'locking target to your ship by setting all variables
IF ABS(dx[1,i]-tx[1,target[1,i]]) <> dx[1,i] - tx[1,target[1,i]] THEN dda[1,i] = dda[1,i] + 180

back = da[1,i] - 180

IF dda[1,i] > back & dda[1,i] < da[1,i] THEN da[1,i] = da[1,i] - 0.15
IF dda[1,i] > 0 & dda[1,i] < back THEN da[1,i] = da[1,i] + 0.15

back = da[1,i] + 180

IF dda[1,i] < back & dda[1,i] > da[1,i] THEN da[1,i] = da[1,i] + 0.15
IF dda[1,i] < 360 & dda[1,i] > back THEN da[1,i] = da[1,i] - 0.15

'velocity control

IF  distance < 200 THEN
dv[1,i] = 0
ELSE
dv[1,i] = 0.1
ENDIF
distance = 1000

NEXT i

'AI for turbolasers--------------------------------------------------------------

FOR i = 0 to (cor+1) * 4

distance = 1000


dx[3,i] = dx[1,dref[3,i]] + dv[3,i]
dy[3,i] = dy[1,dref[3,i]] + dda[3,i]

FOR j = 0 to sd 'finding target, es is taerget number

IF distance > SQRT(ABS(dx[1,i]-tx[1,j]) * ABS(dx[1,j]-tx[1,j])  + ABS(dy[1,j] - ty[1,j] ) * ABS(dy[1,i] - ty[1,j] ) ) & th[1,j] > 0 THEN
target[3,i] = j
tt = 1
distance = SQRT(ABS(dx[1,i]-tx[1,j]) * ABS(dx[1,j]-tx[1,j]) + ABS(dy[1,j] - ty[1,j] ) * ABS(dy[1,i] - ty[1,j] ))
ttype[3,j] = 1

ENDIF

NEXT j

FOR j = 0 to es 'finding target, es is taerget number

IF distance > SQRT(ABS(dx[0,i]-tx[0,j]) * ABS(dx[0,j]-tx[0,j])  + ABS(dy[0,j] - ty[0,j] ) * ABS(dy[0,i] - ty[0,j] ) ) & th[0,j] > 0 THEN

target[3,i] = j
tt = 0
distance = SQRT(ABS(dx[0,i]-tx[0,j]) * ABS(dx[0,j]-tx[0,j]) + ABS(dy[0,j] - ty[0,j] ) * ABS(dy[0,i] - ty[0,j] ))
ttype[3,j] = 0

ENDIF

NEXT j




da[3,i] = ATAN((dy[3,i]-ty[ttype[3,i],target[3,i]])/(dx[3,i]-tx[ttype[3,i],target[3,i]])) * crt -90 'locking target to your ship
IF ABS(dx[3,i]-tx[ttype[3,1],target[3,1]]) <> dx[3,i] - tx[ttype[3,i],target[3,i]] THEN da[3,i] = da[3,i] + 180

IF lr[3,i] < 0 THEN                   'turbolaser

lx[3,i,l[3,i]] = dx[3,i]
ly[3,i,l[3,i]] = dy[3,i]
la[3,i,l[3,i]] = da[3,i]
le[3,i,l[3,i]] = 1
lr[3,i] = 30

l[3,i] = l[3,i] + 1

IF l[3,i] > 3 THEN l[3,i] = 1

ENDIF



NEXT i





'end of alliance----------------------======================================



FOR i = 0 to es

IF th[0,i] < 1 THEN GOTO nex

FOR j = 0 to wings 'finding target, es is taerget number

IF dis > SQRT(ABS(tx[0,i]-dx[0,j]) * ABS(tx[0,j]-dx[0,j])  + ABS(ty[0,j] - dy[0,j] ) * ABS(ty[0,i] - dy[0,j] ) ) & dh[0,j] > 0 THEN
ttarget[0,i] = j
dis = SQRT(ABS(tx[0,i]-dx[0,j]) * ABS(tx[0,j]-dx[0,j]) + ABS(ty[0,j] - dy[0,j] ) * ABS(ty[0,i] - dy[0,j] ))

ENDIF

NEXT j


tda[0,i] = ATAN((ty[0,i]-dy[0,ttarget[0,i]])/(tx[0,i]-dx[0,ttarget[0,i]])) * crt -90 'locking target to your ship by setting all variables
IF ABS(tx[0,i]-dx[0,ttarget[0,i]]) <> tx[0,i] - dx[0,ttarget[0,i]] THEN tda[0,i] = tda[0,i] + 180

IF tda[0,i] < 0 THEN tda[0,i] = tda[0,i] + 360 'angle correction


'evil aiming-----------------


back = ta[0,i] - 180

IF tda[0,i] > back & tda[0,i] < ta[0,i] THEN ta[0,i] = ta[0,i] - 1.5
IF tda[0,i] > 0 & tda[0,i] < back THEN ta[0,i] = ta[0,i] + 1.5

back = ta[0,i] + 180

IF tda[0,i] < back & tda[0,i] > ta[0,i] THEN ta[0,i] = ta[0,i] + 1.5
IF tda[0,i] < 360 & tda[0,i] > back THEN ta[0,i] = ta[0,i] - 1.5

'end of aiming---------------

IF ABS(tda[0,i] - ta[0,i]) < 3 & dis < 200 THEN 'toggle shoot
tls[0,i] = 1
ta[0,i] = tda[0,i]
ELSE
tls[0,i] = 0
ENDIF




IF ABS(tda[0,i] - ta[0,i]) < 90 & dis < 50 THEN
tv[0,i] = 0.6
ELSE
tv[0,i] = 0.6
ENDIF

LABEL nex
dis = 1000
NEXT i



'mk laser!----------------------------------------------


'evil laser shooting



FOR i = 0 to es 'make evil laser

IF tls[0,i] = 1 & elr[0,i] < 0 & th[0,i] > 0 THEN

elx[0,i,el[0,i]] = tx[0,i]

ely[0,i,el[0,i]] = ty[0,i]
ela[0,i,el[0,i]] = ta[0,i] 
ele[0,i,el[0,i]] = 1
el[0,i] = el[0,i] + 1
elr[0,i] = 30
IF el[0,i] = 2 THEN el[0,i] = 1


ENDIF

NEXT i

'star destroyer ai---------------------------------

FOR i = 0 to sd



distance = 1000

FOR j = 0 to cor 'finding target, es is taerget number

IF distance > SQRT(ABS(tx[1,i]-dx[1,j]) * ABS(tx[1,j]-dx[1,j])  + ABS(ty[1,j] - dy[1,j] ) * ABS(ty[1,i] - dy[1,j] ) ) & dh[1,j] > 0 THEN
ttarget[1,i] = j
distance = SQRT(ABS(tx[1,i]-dx[1,j]) * ABS(tx[1,j]-dx[1,j]) + ABS(ty[1,j] - dy[1,j] ) * ABS(ty[1,i] - dy[1,j] ))

ENDIF

NEXT j

'angle adjustment

tda[1,i] = ATAN((ty[1,i]-dy[1,ttarget[1,i]])/(tx[1,i]-dx[1,ttarget[1,i]])) * crt -90 'locking target to your ship by setting all variables
IF ABS(tx[1,i]-dx[1,ttarget[1,i]]) <> tx[1,i] - dx[1,ttarget[1,i]] THEN tda[1,i] = tda[1,i] + 180

back = ta[1,i] - 180

IF tda[1,i] > back & tda[1,i] < ta[1,i] THEN ta[1,i] = ta[1,i] - 0.15
IF tda[1,i] > 0 & tda[1,i] < back THEN ta[1,i] = ta[1,i] + 0.15

back = ta[1,i] + 180

IF tda[1,i] < back & tda[1,i] > ta[1,i] THEN ta[1,i] = ta[1,i] + 0.15
IF tda[1,i] < 360 & tda[1,i] > back THEN ta[1,i] = ta[1,i] - 0.15

'velocity control

IF  distance < 200 THEN
tv[1,i] = 0
ELSE
tv[1,i] = 0.1
ENDIF
distance = 1000

NEXT i



'CALCULATE POSITIONS AND UPda[0,i]TE!=============================================

';ship new position----------

FOR i = 0 to wings              'i = ship

dx[0,i] = dx[0,i] + dv[0,i] * SIN(da[0,i] / crt)
dy[0,i] = dy[0,i] - dv[0,i] * COS(da[0,i] / crt)
FOR j = 1 to 16

lx[0,i,j] = lx[0,i,j] + 6 * SIN(la[0,i,j] / crt)
ly[0,i,j] = ly[0,i,j] - 6 * COS(la[0,i,j] / crt)

NEXT j

NEXT i

FOR i = 0 to cor              'i = ship

dx[1,i] = dx[1,i] + dv[1,i] * SIN(da[1,i] / crt)
dy[1,i] = dy[1,i] - dv[1,i] * COS(da[1,i] / crt)


NEXT i

FOR j = 0 to (cor+1) * 4 'cor lasers

FOR i = 1 to 16

lx[3,j,i] = lx[3,j,i] + 4 * SIN(la[3,j,i] / crt)
ly[3,j,i] = ly[3,j,i] - 4 * COS(la[3,j,i] / crt)

NEXT i

NEXT j



'enimy laser new position and eimy ship new position

FOR j = 0 to es

tx[0,j] = tx[0,j] + tv[0,j] * SIN(ta[0,j] / crt)
ty[0,j] = ty[0,j] - tv[0,j]  * COS(ta[0,j] / crt)

FOR i = 1 to 16

elx[0,j,i] = elx[0,j,i] + 4 * SIN(ela[0,j,i] / crt)
ely[0,j,i] = ely[0,j,i] - 4 * COS(ela[0,j,i] / crt)

NEXT i

NEXT j

FOR j = 0 to sd

tx[1,j] = tx[1,j] + tv[1,j] * SIN(ta[1,j] / crt)
ty[1,j] = ty[1,j] - tv[1,j]  * COS(ta[1,j] / crt)

NEXT j
'move lasers


'laser collisions!----------------------------------------------------------------

for i = 0 to wings

FOR j = 1 to 16        'j is laser

IF le[0,i,j] = 1 THEN          'make sure the laser exists

IF lx[0,i,j] - tx[0,target[0,i]] < 10 & ly[0,i,j] - ty[0,target[0,i]] < 10 & lx[0,i,j] - tx[0,target[0,i]] > 0 & ly[0,i,j] - ty[0,target[0,i]] > 0 THEN 'collide with target?
th[0,target[0,i]] --

le[0,i,j] = 0
ENDIF 'end of collide with target?

ENDIF  'end of laser calculations

NEXT j 

NEXT i


i = 0
FOR j = 1 to 16
IF le[0,i,j] = 1 THEN          'make sure the laser exists

FOR c = 0 to es

IF lx[0,i,j] - tx[0,c] < 10 & ly[0,i,j] - ty[0,c] < 10 & lx[0,i,j] - tx[0,c] > 0 & ly[0,i,j] - ty[0,c] > 0 & th[0,c] > 0 THEN 'collide with target?
th[0,c] --

le[0,i,j] = 0
ENDIF 'end of collide with target?

NEXT c

ENDIF  'end of laser calculations
NEXT j

'collision of turbolasers:

FOR i = 0 to (cor+1)*4

FOR j = 0 to 3

IF ABS(dx[3,i,j] - tx[ttype[3,i,j],target[3,i,j]]) < 5 THEN
th[ttype[3,i],target[3,i]] --
le[3,i,j] = 0
ENDIF

NEXT j

NEXT i





'evil's turn!

FOR i = 0 to es

FOR j = 0 to 16        'j is laser

IF ele[0,i,j] = 1 THEN          'make sure the laser exists

IF elx[0,i,j] - dx[0,ttarget[0,i]] < 10 & ely[0,i,j] - dy[0,ttarget[0,i]] < 10 & elx[0,i,j] - dx[0,ttarget[0,i]] > 0 & ely[0,i,j] - dy[0,ttarget[0,i]] > 0 THEN 'collide with target?
dh[0,ttarget[0,i]] --

ele[0,i,j] = 0
ENDIF 'end of collide with target?

ENDIF  'end of laser calculations

NEXT j 

NEXT i


'==================

'angle corrections------------------------------

FOR i = 0 to wings

IF da[0,i] < 2 THEN da[0,i] = da[0,i] + 360                  'angle corrections
IF da[0,i] > 362 THEN da[0,i] = da[0,i] - 360

NEXT i


FOR i = 0 to es

IF ta[0,i] < 2 THEN ta[0,i] = ta[0,i] + 360                  'angle corrections for evil
IF ta[0,i] > 362 THEN ta[0,i] = ta[0,i] - 360

NEXT i

'health checks!---------------------------------------------------------------
for i = 0 to wings

IF dh[0,i] < 1 THEN
exit ++
ENDIF

NEXT i

IF exit = wings + 1 THEN
exitGame = 1
ELSE
exit = 0
ENDIF





'flash- -       -       -     



c ++

IF c > 60 THEN c = 0
'end of flash -   -    -   -   -

'miscellanious!-------------------------------------------------------------------

FOR i = 0 to (cor+1)*4

lr[3,i] --

NEXT i

FOR i = 0 to wings

lr[0,i]--

NEXT i

FOR i = 0 to es

elr[0,i]--

NEXT i

FLIP



'ending====================================================================
UNTIL exitGame <> 0



FLIP

WAITKEY(DIK_ESCAPE)



CLOSESCREEN
END


main feature? it crashes. debug says it kaputts on 643

"for j = 0 to 3"

how could that go wrong? im new to debug


anyway, here is a working version without frigets:

IF CREATESCREEN(800,600,32)<0
MESSAGEBOX 0, "error creating screen","error"
END
ENDIF

CONST DIK_ESCAPE = 0x01
CONST DIK_1 = 0x02
CONST DIK_2 = 0x03
CONST DIK_3 = 0x04
CONST DIK_4 = 0x05
CONST DIK_5 = 0x06
CONST DIK_6 = 0x07
CONST DIK_7 = 0x08
CONST DIK_8 = 0x09
CONST DIK_9 = 0x0A
CONST DIK_0 = 0x0B

CONST DIK_RETURN = 0x1C
CONST DIK_SPACE = 0x39 'shoot!

CONST DIK_UP = 0xC8 /* UpArrow on arrow keypad */
CONST DIK_LEFT = 0xCB /* LeftArrow on arrow keypad */
CONST DIK_RIGHT = 0xCD /* RightArrow on arrow keypad */
CONST DIK_DOWN = 0xD0 /* DownArrow on arrow keypad */

CONST DIK_W = 0x11 'second player
CONST DIK_A = 0x1E
CONST DIK_S = 0x1F
CONST DIK_D = 0x20




DEF ret as INT
DEF request as INT

DEF dx[112] as float
DEF dy[112] as float
DEF da[112] as float
DEF dv[112] as float
DEF dh[112] as INT
DEF ds[112] as INT   'shooting status
DEF dda[112] as INT 'def destined angle


DEF tx[112] as FLOAT
DEF ty[112] as FLOAT
DEF ta[112] as float
DEF tv[112] as float
DEF th[112] as INT
DEF tls[112] as INT 'need to replace
DEF tda[112] as INT

DEF distance as INT
DEF target[112] as INT


DEF dis as float
DEF ttarget[112] as INT 'enimy proposed target




DEF lx[112,17] as float 'alliance laser variables
DEF ly[112,17] as float
DEF la[112,17] as float
DEF le[112,17] as INT
DEF lr[112] as INT
DEF l[112] as INT

DEF elx[112,17]  as float 'enimy laser variables
DEF ely[112,17]  as float
DEF ela[112,17]  as float
DEF ele[112,17]  as INT
DEF elr[112]  as INT
DEF el[112] as INT

DEF wings as INT
DEF es as INT
DEF back as float

DEF crt as INT
DEF exitGame as INT
crt = 57.2957795


DEF i as INT
DEF c AS INT
DEF j as INT
DEF exit as INT

DEF panx as INT
DEF pany as INT


ta = 1

es = 111
wings = 15

FOR i = 0 to wings 'set initial variables----------------------

dv[i] = 1
da[i] = RAND(360)
dx[i] = RAND(000,1000)
dy[i] = RAND(850,1450)
dh[i] = 20
ds[i] = 1
le[i] = 1
lr[i] = 30
l[i] = 1




NEXT i


FOR j = 0 to es


ta[j] = RAND(360)
tx[j] = RAND(000,1100)
ty[j] = RAND(50,650)
th[j] = 2
elr[j] = 30
ele[j] = 1

NEXT j

'menu===================================================================================

DO
FILLSCREEN RGB(10,10,15)

WRITETEXT 350, 100, "SPACE BATTLES 0.0.6"

WRITETEXT 350, 310, "Play"

WRITETEXT 350, 350, "Instructions"

WRITETEXT 350, 390, "Credits"

DRAWFILLEDRECT 340, request * 40 + 310, 10, 10, RGB(255,0,0)
FLIP

WAITKEY

IF KEYDOWN(DIK_UP) & request <> 0 THEN request --

IF KEYDOWN(DIK_DOWN) & request <> 2 THEN request ++

IF KEYDOWN(DIK_RETURN) | KEYDOWN(DIK_ESCAPE) THEN ret = 1

UNTIL ret = 1
'game--------------------------------------------------------------------------------------



IF request = 1 THEN

DO

FILLSCREEN RGB(10,10,15)

WRITETEXT 100, 300, "Shoot the green circles before they shoot you"
WRITETEXT 50, 350, "use left and right for direction. Up and Down for engines. space to shoot"
WRITETEXT 100, 400, "You have teammates! They shoot and die just like you."
FLIP

WAITKEY

UNTIL KEYDOWN(DIK_RETURN)

ENDIF

IF request = 2 THEN 'credits------------------------------

DO
FILLSCREEN RGB(10,10,15)

WRITETEXT 100, 300, "Space Battles Va0.0.6 18-12-08 by Yujin Wu"
WRITETEXT 100, 340, "All Rights Reserved 2008 Yujin Wu"
WRITETEXT 100, 380, "Entirely Made on Emergence Basic 1.68"
WRITETEXT 100, 420, "Special thanks to the EB Support forum,"
WRITETEXT 100, 480, "Alex D, Anthony P, Harry D and Nicholas V."

FLIP

WAITKEY

UNTIL KEYDOWN(DIK_RETURN)

ENDIF


'game===============================================================


DO
FILLSCREEN RGB(10,10,15)

'keycontrols!----------------------------------------------------------------------

IF KEYDOWN(DIK_ESCAPE) THEN exitGame = 1

'aiming!-------------------------------------------------------------------


'the ai for the fighters!-----::::::::::::::::

FOR i = 1 to wings

FOR j = 0 to es 'finding target, es is taerget number

IF distance > SQRT(ABS(dx[i]-tx[j]) * ABS(dx[j]-tx[j])  + ABS(dy[j] - ty[j] ) * ABS(dy[i] - ty[j] ) ) & th[j] > 0 THEN
target[i] = j
distance = SQRT(ABS(dx[i]-tx[j]) * ABS(dx[j]-tx[j]) + ABS(dy[j] - ty[j] ) * ABS(dy[i] - ty[j] ))

ENDIF

NEXT j


dda[i] = ATAN((dy[i]-ty[target[i]])/(dx[i]-tx[target[i]])) * crt -90 'locking target to your ship by setting all variables
IF ABS(dx[i]-tx[target[i]]) <> dx[i] - tx[target[i]] THEN dda[i] = dda[i] + 180

IF dda[i] < 0 THEN dda[i] = dda[i] + 360 'angle correction



'aiming of AI------------------

back = da[i] - 180

IF dda[i] > back & dda[i] < da[i] THEN da[i] = da[i] - 1.5
IF dda[i] > 0 & dda[i] < back THEN da[i] = da[i] + 1.5

back = da[i] + 180

IF dda[i] < back & dda[i] > da[i] THEN da[i] = da[i] + 1.5
IF dda[i] < 360 & dda[i] > back THEN da[i] = da[i] - 1.5

'end of aiming


IF ABS(dda[i] - da[i]) < 3 & distance < 800 THEN 'toggle shoot
ds[i] = 1
da[i] = dda[i]
ELSE
ds[i] = 0
ENDIF




IF ABS(dda[i] - da[i]) < 90 & distance < 50 THEN
dv[i] = 0.6
ELSE
dv[i] = 0.6
ENDIF
distance = 1000
NEXT i





IF KEYDOWN(DIK_LEFT) THEN da = da - 1.5                   'turn left
IF KEYDOWN(DIK_RIGHT) THEN da = da + 1.5 'turn right

'angle adjustments--------------------------------




IF KEYDOWN(DIK_UP) THEN
IF dv[0] < 1 THEN dv[0] = dv[0] + 0.01 'speed up
ENDIF

IF KEYDOWN(DIK_DOWN) THEN
IF dv[0] > 0.35 THEN dv[0] = dv[0] - 0.01 'slow down
ENDIF

'mk laser!----------------------------------------------

IF KEYDOWN(DIK_SPACE) & lr[0] < 0 THEN 'make laser

lx[0,l[0]] = dx[0]
ly[0,l[0]] = dy[0]
la[0,l[0]] = da[0]
le[0,l[0]] = 1
l[0] = l[0] + 1
lr[0] = 10
IF l[0] = 16 THEN l[0] = 1
ENDIF

'alliance laser shooting



FOR i = 1 to wings 'make teammate's laser

IF ds[i] = 1 & lr[i] < 0 & dh[i] > 0 & dh[i] > 0 THEN

lx[i,l[i]] = dx[i]

ly[i,l[i]] = dy[i]
la[i,l[i]] = da[i] 
le[i,l[i]] = 1
l[i] = l[i] + 1
lr[i] = 15
IF l[i] = 16 THEN l[i] = 1


ENDIF

NEXT i




'end of alliance----------------------======================================



FOR i = 1 to es

IF th[i] < 1 THEN GOTO nex

FOR j = 0 to wings 'finding target, es is taerget number

IF dis > SQRT(ABS(tx[i]-dx[j]) * ABS(tx[j]-dx[j])  + ABS(ty[j] - dy[j] ) * ABS(ty[i] - dy[j] ) ) & dh[j] > 0 THEN
ttarget[i] = j
dis = SQRT(ABS(tx[i]-dx[j]) * ABS(tx[j]-dx[j]) + ABS(ty[j] - dy[j] ) * ABS(ty[i] - dy[j] ))

ENDIF

NEXT j


tda[i] = ATAN((ty[i]-dy[ttarget[i]])/(tx[i]-dx[ttarget[i]])) * crt -90 'locking target to your ship by setting all variables
IF ABS(tx[i]-dx[ttarget[i]]) <> tx[i] - dx[ttarget[i]] THEN tda[i] = tda[i] + 180

IF tda[i] < 0 THEN tda[i] = tda[i] + 360 'angle correction


'evil aiming-----------------


back = ta[i] - 180

IF tda[i] > back & tda[i] < ta[i] THEN ta[i] = ta[i] - 1.5
IF tda[i] > 0 & tda[i] < back THEN ta[i] = ta[i] + 1.5

back = ta[i] + 180

IF tda[i] < back & tda[i] > ta[i] THEN ta[i] = ta[i] + 1.5
IF tda[i] < 360 & tda[i] > back THEN ta[i] = ta[i] - 1.5

'end of aiming---------------

IF ABS(tda[i] - ta[i]) < 3 & dis < 200 THEN 'toggle shoot
tls[i] = 1
ta[i] = tda[i]
ELSE
tls[i] = 0
ENDIF




IF ABS(tda[i] - ta[i]) < 90 & dis < 50 THEN
tv[i] = 0.6
ELSE
tv[i] = 0.6
ENDIF

LABEL nex
dis = 1000
NEXT i



'mk laser!----------------------------------------------


'evil laser shooting



FOR i = 1 to es 'make teammate's laser

IF tls[i] = 1 & elr[i] < 0 & th[i] > 0 THEN

elx[i,el[i]] = tx[i]

ely[i,el[i]] = ty[i]
ela[i,el[i]] = ta[i] 
ele[i,el[i]] = 1
el[i] = el[i] + 1
elr[i] = 90
IF el[i] = 16 THEN el[i] = 1


ENDIF

NEXT i





'CALCULATE POSITIONS AND UPda[i]TE!---------------------------------

';ship new position----------

FOR i = 0 to wings              'i = ship

dx[i] = dx[i] + dv[i] * SIN(da[i] / crt)
dy[i] = dy[i] - dv[i] * COS(da[i] / crt)
FOR j = 1 to 16

lx[i,j] = lx[i,j] + 6 * SIN(la[i,j] / crt)
ly[i,j] = ly[i,j] - 6 * COS(la[i,j] / crt)

NEXT j

NEXT i


'enimy laser new position and eimy ship new position

FOR j = 0 to es

tx[j] = tx[j] + tv[j] * SIN(ta[j] / crt)
ty[j] = ty[j] - tv[j]  * COS(ta[j] / crt)

FOR i = 0 to 16

elx[j,i] = elx[j,i] + 4 * SIN(ela[j,i] / crt)
ely[j,i] = ely[j,i] - 4 * COS(ela[j,i] / crt)

NEXT i

NEXT j

'move lasers


'laser collisions!----------------------------------------------------------------

for i = 1 to wings

FOR j = 0 to 16        'j is laser

IF le[i,j] = 1 THEN          'make sure the laser exists

IF lx[i,j] - tx[target[i]] < 10 & ly[i,j] - ty[target[i]] < 10 & lx[i,j] - tx[target[i]] > 0 & ly[i,j] - ty[target[i]] > 0 THEN 'collide with target?
th[target[i]] --
DRAWRECT lx[i,j] - 3 + panx, ly[i,j] - 3 + pany, 6,6, RGB(100,100,0)
le[i,j] = 0
ENDIF 'end of collide with target?

ENDIF  'end of laser calculations

NEXT j 

NEXT i


i = 0
FOR j = 0 to 16
IF le[i,j] = 1 THEN          'make sure the laser exists

FOR c = 0 to es

IF lx[i,j] - tx[c] < 10 & ly[i,j] - ty[c] < 10 & lx[i,j] - tx[c] > 0 & ly[i,j] - ty[c] > 0 & th[c] > 0 THEN 'collide with target?
th[c] --
DRAWRECT lx[i,j] - 3 + panx, ly[i,j] - 3 + pany, 6,6, RGB(100,100,0)
le[i,j] = 0
ENDIF 'end of collide with target?

NEXT c

ENDIF  'end of laser calculations
NEXT j



'evil's turn!

FOR i = 0 to es

FOR j = 0 to 16        'j is laser

IF ele[i,j] = 1 THEN          'make sure the laser exists

IF elx[i,j] - dx[ttarget[i]] < 10 & ely[i,j] - dy[ttarget[i]] < 10 & elx[i,j] - dx[ttarget[i]] > 0 & ely[i,j] - dy[ttarget[i]] > 0 THEN 'collide with target?
dh[ttarget[i]] --
DRAWRECT elx[i,j] - 3 + panx, ely[i,j] - 3 + pany, 6,6, RGB(100,100,0)
ele[i,j] = 0
ENDIF 'end of collide with target?

ENDIF  'end of laser calculations

NEXT j 

NEXT i


'==================

'angle corrections------------------------------

FOR i = 0 to wings

IF da[i] < 2 THEN da[i] = da[i] + 360                  'angle corrections
IF da[i] > 362 THEN da[i] = da[i] - 360

NEXT i


FOR i = 0 to es

IF ta[i] < 2 THEN ta[i] = ta[i] + 360                  'angle corrections for evil
IF ta[i] > 362 THEN ta[i] = ta[i] - 360

NEXT i

'health checks!---------------------------------------------------------------
for i = 0 to wings

IF dh[i] < 1 THEN
exit ++
ENDIF

NEXT i

IF exit = wings + 1 THEN
exitGame = 1
ELSE
exit = 0
ENDIF



'drawing!--------------------------------------------------------------------------

FOR i = 0 to wings

IF dh[i] > 0 THEN

panx = 400 - dx[i]
pany = 300 - dy[i]
i = wings

ENDIF

NEXT i






FOR i = 0 to wings 'draw lasers

FOR j = 1 to 16

IF  le[i,j] = 1 THEN DRAWAALINE lx[i,j]+ panx, ly[i,j]+ pany, lx[i,j] + 5 * SIN(la[i,j] / crt)+ panx, ly[i,j] - 5 * COS(la[i,j] / crt)+ pany, RGB(255,10,10)

NEXT j

NEXT i

FOR i = 0 to es 'draw lasers of forbidden

FOR j = 1 to 16

IF  ele[i,j] = 1 THEN DRAWLINE elx[i,j]+ panx, ely[i,j] + pany, elx[i,j] + 3 * SIN(ela[i,j] / crt)+ panx, ely[i,j] - 3 * COS(ela[i,j] / crt)+ pany, RGB(10,255,10)

NEXT j

NEXT i


DRAWLINE dx[0]+ panx, dy[0]+ pany, dx[0] + 5 * SIN(da[0] / crt)+ panx, dy[0] - 5 * COS(da[0] / crt)+ pany, RGB(255,0,0)


FOR i = 1 to wings

IF dh[i] > 0 THEN DRAWRECT dx[i]+ panx, dy[i]+ pany, 5, 5, RGB(255,0,0) 'draw fighter

NEXT i

FOR i = 0 to es

IF th[i] > 0 THEN DRAWRECT tx[i]+ panx, ty[i]+ pany,5, 5, RGB(0,255,0) 'draw fighter

NEXT i


FOR i = 0 to wings

IF dh[i] > 0 THEN

DRAWFILLEDRECT 350, 500, 100, 10, RGB(50,10,15) 'health box
DRAWFILLEDRECT 350, 500, dh[i] * 5, 10, RGB(200,0,0)

DRAWFILLEDRECT 350, 520, 100, 10, RGB(10,10,50) 'speed box
DRAWFILLEDRECT 350, 520, dv[i] * 100, 10, RGB(0,0,200)


i = wings


ENDIF

NEXT i

'flash- -       -       -     



c ++

IF c > 60 THEN c = 0
'end of flash -   -    -   -   -

'miscellanious!-------------------------------------------------------------------

FOR i = 0 to wings

lr[i]--

NEXT i

FOR i = 0 to es

elr[i]--

NEXT i

FLIP



'ending====================================================================
UNTIL exitGame <> 0

FILLSCREEN RGB (10,10,15)

IF th = 0 THEN WRITETEXT 350, 300, "YOU HAVE WON! WITH " + STR$(dh[1]) + " HEALTH LEFT"

IF exitGame = 2 THEN WRITETEXT 350, 300, "GAME OVER!"

IF th > 0 & dh[0] > 0 THEN WRITETEXT 0, 0, "press esc key to continue"

FLIP

WAITKEY(DIK_ESCAPE)



CLOSESCREEN
END


it has absurd endings.
you shoot the green stuff

Ionic Wind Support Team

Check line 644 to be sure you are not overwriting an array boundary.  The debugger can be +/- one line number off depending on the context.

Paul.

Ionic Wind Support Team

yujinwunz

line 644 and 642 are empty but thanks anyway. im still trying to figure out what array i might be overwriting

yujinwunz

December 23, 2008, 04:42:08 PM #3 Last Edit: December 23, 2008, 04:45:20 PM by yujinwunz
Quote from: yujinwunz on December 23, 2008, 04:40:36 PM
line 644 and 642 are empty but thanks anyway. im still trying to figure out what array i might be overwriting

ive got it. it was line 655

Ionic Wind Support Team

Empty lines don't count, so what I meant was the "next line" that had code on it.

Glad you fixed it anyway.

Paul.
Ionic Wind Support Team