For Whoever might this interest, i have this very perculiar problem where an integer variable array named l(5) becomes in sync with another variable, lr(5). this caused bugs. it might just be my compiler. if anyone could compile the following code for me:
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[5] as float
DEF dy[5] as float
DEF da[5] as float
DEF dv[5] as float
DEF dh[5] as INT
DEF dt[5] as float 'turning speed
DEF ds[5] as INT 'shooting status
DEF lx[5,16] as float
DEF ly[5,16] as float
DEF la[5,16] as float
DEF le[5,16] as INT
DEF lr[5] as INT
DEF l[5] as INT
DEF elx as float
DEF ely as float
DEF ela as float
DEF ta as int
DEF ele as INT
DEF elr as INT
DEF eh as INT
DEF eTarget as INT 'enimy proposed target
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
FOR i = 1 to 5 'set initial variables----------------------
dv[i] = 1
da[i] = RAND(360)
dx[i] = RAND(800)
dy[i] = RAND(600)
dh[i] = 10
ds[i] = 1
le[i] = 1
lr[i] = 30
l[i] = 1
NEXT i
eh = 10
DEF tx as INT
DEF ty as INT
DEF dis as float
tx = 400
ty = 300
ta = 1
'menu===================================================================================
DO
FILLSCREEN RGB(10,10,15)
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 circle 100 times b4 it shoots you"
WRITETEXT 100, 350, "use left and right. up and down for direction. space to shoot"
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.2 10-12-08 by Yujin Wu"
WRITETEXT 100, 340, "All Rights Reserved 2008 Yujin Wu"
FLIP
WAITKEY
UNTIL KEYDOWN(DIK_RETURN)
ENDIF
'game===============================================================
DO
FILLSCREEN RGB(10,10,15)
'keycontrols!----------------------------------------------------------------------
IF KEYDOWN(DIK_ESCAPE) THEN exitGame = 1
'aiming!-------------------------------------------------------------------
IF KEYDOWN(DIK_LEFT) & dt[1] > -1.5 THEN dt[1] = dt[1] - 0.2 'turn left
IF KEYDOWN(DIK_RIGHT)& dt[1] < 1.5 THEN dt[1] = dt[1] + 0.2 'turn right
'angle adjustments--------------------------------
da[1] = da[1] + dt[1]
IF ABS(dt[1]) <> dt[1] THEN
dt[1] = dt[1] + 0.1
ENDIF
IF ABS(dt[1]) = dt[1] & dt[1] <> 0 THEN dt[1] = dt[1] - 0.1
IF KEYDOWN(DIK_UP) THEN
IF dv[1] < 1 THEN dv[1] = dv[1] + 0.01 'speed up
ENDIF
IF KEYDOWN(DIK_DOWN) THEN
IF dv[1] > 0.35 THEN dv[1] = dv[1] - 0.01 'slow down
ENDIF
'mk laser!----------------------------------------------
IF KEYDOWN(DIK_SPACE) & lr[1] < 0 THEN 'make laser
lx[1,l[1]] = dx[1]
ly[1,l[1]] = dy[1]
la[1,l[1]] = da[1]
le[1,l[1]] = 1
l[1] = l[1] + 1
lr[1] = 15
IF l[1] = 16 THEN l[1] = 1
ENDIF
'alliance laser shooting
FOR i = 2 to 5
IF ds[i] = 1 & lr[i] < 0 THEN
IF l[i] < 1 THEN l[i] = 1
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] > 15 THEN l[i] = 1
ENDIF
NEXT i
'end of alliance----------------------
IF elr < 0 THEN 'make enemy laser
FOR i = 1 to 5 'aim---------------------------
IF dis > SQRT(ABS(dx[i]-tx) * ABS(dx[i]-tx) + ABS(dy[i] - ty ) * ABS(dy[i] - ty ) ) THEN
eTarget = i
dis = SQRT(ABS(dx[i]-tx) * ABS(dx[i]-tx) + ABS(dy[i] - ty ) * ABS(dy[i] - ty ))
ENDIF
NEXT i
dis = 1000
ta = ATAN((ty-dy[eTarget])/(tx-dx[eTarget])) * crt -90 'locking target to your ship
IF ABS(tx-dx[eTarget]) <> tx - dx[eTarget] THEN ta = ta + 180
elx = tx
ely = ty
ela = ta
ele = 1
elr = 5
elr = 120
ENDIF
'CALCULATE POSITIONS AND UPda[i]TE!---------------------------------
';ship new position----------
FOR i = 1 to 5
dx[i] = dx[i] + dv[i] * SIN(da[i] / crt)
dy[i] = dy[i] - dv[i] * COS(da[i] / crt)
NEXT i
'enimy laser new position
elx = elx + 4 * SIN(ela / crt)
ely = ely - 4 * COS(ela / crt)
'move lasers
FOR i = 1 to 5 'i = ship
FOR j = 1 to 16
lx[i,j] = lx[i,j] + 4 * SIN(la[i,j] / crt)
ly[i,j] = ly[i,j] - 4 * COS(la[i,j] / crt)
NEXT j
NEXT i
'laser collisions!----------------------------------------------------------------
FOR i = 1 to 5
FOR j = 1 to 16 'j is laser
IF le[i,j] = 1 THEN 'make sure the laser exists
IF lx[i,j] - tx < 20 & ly[i,j] - ty < 20 & lx[i,j] - tx > 0 & ly[i,j] - ty > 0 THEN 'collide with target?
eh --
DRAWRECT lx[i,j] - 3, ly[i,j] - 3, 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
FOR i = 1 to 5
IF ABS(elx - dx[i]) < 2 & ABS(ely - dy[i]) < 2 THEN
FILLSCREEN RGB(150, 0, 0)
dh[i] --
ele = 0
ENDIF
NEXT i
'==================
'angle corrections------------------------------
FOR i = 1 to 5
IF da[i] < 2 THEN da[i] = da[i] + 360 'angle corrections
IF da[i] > 362 THEN da[i] = da[i] - 360
NEXT i
'health checks!---------------------------------------------------------------
FOR i = 1 to 5
IF dh[i] < 1 THEN
exit ++
ENDIF
NEXT i
IF exit = 5 THEN
exitGame = 1
ELSE
exit = 0
ENDIF
IF eh < 1 THEN
exitGame =1
ENDIF
'drawing!--------------------------------------------------------------------------
DRAWRECT tx, ty, 20, 20, RGB(0,100,0) 'draw target
FOR i = 1 to 5 'draw lasers
FOR j = 1 to 16
IF le[i,j] = 1 THEN WRITEPIXEL lx[i,j], ly[i,j], RGB(255,100,100)
NEXT j
NEXT i
IF ele = 1 THEN WRITEPIXEL elx, ely, RGB(0,255,0) 'enimy lasers
FOR i = 1 to 5
DRAWLINE dx[i], dy[i], dx[i] + 5 * SIN(da[i] / crt), dy[i] - 5 * COS(da[i] / crt), RGB(255,0,0) 'draw fighter
NEXT i
DRAWFILLEDRECT 350, 550, 100, 10, RGB(50,10,15) 'health box
DRAWFILLEDRECT 350, 550, dh[1] * 10, 10, RGB(200,0,0)
DRAWFILLEDRECT 350, 570, 100, 10, RGB(10,10,50) 'speed box
DRAWFILLEDRECT 350, 570, dv[1] * 100, 10, RGB(0,0,200)
DRAWFILLEDRECT 350, 530, 100, 10, RGB(10,50,15) 'enimy health box
DRAWFILLEDRECT 350, 530, eh , 10, RGB(0,200,0)
'flash- - - -
IF dh[1] < 2 & c > 30 THEN
DRAWFILLEDRECT 350, 550, 100, 10, RGB(50,10,15) 'flash box warning
ENDIF
c ++
IF c > 60 THEN c = 0
'end of flash - - - - -
'miscellanious!-------------------------------------------------------------------
elr--
FOR i = 1 to 5
lr[i]--
NEXT i
FLIP
'ending====================================================================
UNTIL exitGame = 1
FILLSCREEN RGB (10,10,15)
IF eh = 0 THEN WRITETEXT 350, 300, "YOU HAVE WON! WITH " + STR$(dh[1]) + " HEALTH LEFT"
IF dh[1] = 0 THEN WRITETEXT 350, 300, "GAME OVER!"
IF eh <> 0 & dh[1] <> 0 THEN WRITETEXT 0, 0, "press esc key to continue"
FLIP
WAITKEY(DIK_ESCAPE)
CLOSESCREEN
END
as i was saying, if anyone compiled that please tell me if it had worked on your computer.
on my computer after running debug build, i found out that immediately after variable assignment l[5] was normal, equaling 5. some point in the program l[5] became 30 (weird) and reduced by 1 every frame (which was what lr[5] should have done) and caused problems when it reached -1 because it was used as an array pointer thing. lr[5] was normal.
if anyone could figure out what happened i will think of an appropriate reward.
if anyone wants more details i am happy to provide it.
i have a previous 1 player version that worked well so with enough public nagging i might post that on as well.
Indexes are zero based. Described in the users guide on arrays.
int l[5] has indices 0 to 4 so if you try and do 1 to 5 you will be overwriting memory of an adjacent variable.
So the correct FOR statement would be
FOR i = 0 to 4
NOT
FOR i = 1 to 5
If you prefer 1's based indices just make your arrays larger by 1. You would of course be wasting the 0th element.
Paul.
I'm pretty sure that this game is based on a game written in a graphical calculator.
I remember the old days (not that old when i think about it ::) ) when i used to write small games using my Casio graphical calculator
which had only 3 colors RED\GREEN\BLUE , and 64Kb of memory. :)
i think that was too easy for a reward.
my game is original, i have never used 64x calculators or whatever it is. do you still have them?
Quote from: yujinwunz on December 13, 2008, 02:58:04 PM
i think that was too easy for a reward.
my game is original, i have never used 64x calculators or whatever it is. do you still have them?
a reward was offered so you should honor your first post and head over here https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=ionicwin%40ionicwind%2ecom&item_name=Donate%20to%20Ionic%20Wind%20Software&item_number=ionic_wind_donation&no_shipping=0&no_note=1&tax=0¤cy_code=USD&bn=PP%2dDonationsBF&charset=UTF%2d8
Quote from: yujinwunz on December 13, 2008, 02:58:04 PM
i think that was too easy for a reward.
my game is original, i have never used 64x calculators or whatever it is. do you still have them?
I am being VERY offtopic now.
Sorry i dit not meant that your game was not original.
I just meant that from the look of it, it makes me think of games written in basic for 64kb calculators.
I still have my graphical calculator.
But unfortunately, i can no longer use it as it's damaged now.
A few years ago I lent it to a friend of mine who needed it to sit for an exam.
He gave it back to me a few month later with a couple of buttons missing from it. >:(
Not mentionning the few other buttons that didn't work.
Only god knows how disappointed i was :'(
It's since then that i started to play around computer programming and then i met Ibasic standard... and HERE i am :)
im posting a working version of the game next post here on general questions and roundtable.
im not old enough for paypal, im only 14