Code: Select all
REM Cannon Ball ( remake ) V1.1
REM Basic 5.1 / iPhone 6 Plus / iOS 9.3.1 beta 1
REM
REM Touch and slide to modify cannon
REM angle ( 0-90 degrees ) press fire
REM button to fire...[ single shoot ]
REM v0.6
REM added object to hit and yards to
REM object (over, short and hit)
REM Still need to reset after hit.
REM
REM v0.7
REM reset, victory sound and
REM red hit object added.
REM
REM v0.8
REM bug fixes, ground, color changes...
REM
REM v0.9
REM bug fixes, color changes.
REM
REM v1.1
REM count the misses.
REM voice instead of sound efx
REM ported my misoft code to smart basic 5.1
REM this was a simple quick game to play with my son.
REM enjoy! if you want to fix some bugs or improve on it, great!
GRAPHICS
RESET:
GRAPHICS CLEAR 0,0,0
sh = SCREEN_HEIGHT()
sw = SCREEN_WIDTH()
csw = sw/2
csh = sh/2
' object size
objsize=7
' move angle step of cannon
astep = 1
' ball power
bpower = 1.03
' ball speed = time increment
bspeed = .02
' gravity constant (effects y-ball-speed)
ayb = 0.004
' cannon base coordinates and lenght
cx0 = 15
cy0 = sh/2+RND(90)
cl0 = 25
alfa0 = 0
alfa = (alfa0 + 90) * 0.017453 ' rad -> deg
cx1 = cx0 - cl0*COS(alfa)
cy1 = cy0 - cl0*SIN(alfa)
misses = 1
' object to destroy
ox0 = (sw-RND(150))-objsize
oy0 = cy0 'sh/2+RND(50) 'cy0
GRAPHICS CLEAR
DRAW TEXT " Touch and slide to adjust cannon angle" AT 0,0
LOOP:
' cannon angle out of touch coordinates
IF TOUCH_X(0) <> -1 OR TOUCH_Y(0) <> -1 THEN
GRAPHICS CLEAR
xT = TOUCH_X(0)
yT = TOUCH_Y(0)
'CLEAR tty
DX = xT - cx0
DY = yT - cy0
alfa = 90 + ATN(DY/DX)* 57.29577
IF alfa < 0 THEN
alfa = 0
END IF
IF alfa > 90 THEN
alfa = 90
END IF
DRAW COLOR 1,1,1
DRAW TEXT "ANGLE [deg]: "&INT(90-alfa) AT 0,0
END IF
' dtermine end position of cannon
cx1 = cx0 - cl0*COS((90 + alfa)*.017453)
cy1 = cy0 - cl0*SIN((90 + alfa)*.017453)
'cannon
FILL COLOR 111/255,111/255,111/255
FILL CIRCLE cx0,cy0 SIZE objsize
DRAW COLOR 111/255,111/255,50/255
DRAW SIZE objsize-1
DRAW LINE cx0,cy0 TO cx1,cy1
'object
FILL COLOR 0,1,1
FILL CIRCLE ox0,oy0 SIZE objsize
' horizon line
DRAW COLOR 111/255,111/255,2/255
DRAW SIZE 2
DRAW LINE 0,cy0+objsize TO sw,cy0+objsize
' ground
FILL COLOR 0,1,0
FILL RECT 0,cy0+objsize+1 TO sw,sh
' fire button
BUTTON "1" title "FIRE" AT sw-60, sh-50
'DRAW COLOR 0,0,0
'DRAW TEXT " Fire" AT sw-60, sh-50
' initial ball conditions: pos. & speed
xb0 = cx1
yb0 = cy1
vxb = bpower * COS((90+alfa)*.017453)
vyb = bpower * SIN((90+alfa)*.017453)
' fire button touched
IF BUTTON_PRESSED("1") THEN
SAY TEXT "fire!"
' ball trace
FOR t = 0 TO 600 STEP bspeed
xb = xb0 - vxb*t
yb = yb0 - vyb*t + 0.5*ayb*t^2
IF yb >= (cy0+4) THEN
DRAW COLOR 1,1,1
DRAW TEXT "Range [pix]: "&INT(xb-cx0) AT 0,64
hit = INT(xb-ox0)
t = 600
END IF
'ball
FILL COLOR 0,0,0
FILL CIRCLE xb,yb SIZE 4.5
FILL COLOR 1,1,0
FILL CIRCLE xb,yb SIZE 4
NEXT t
'collision/hit report
DRAW COLOR 1,1,1
'too short
IF hit < -6 THEN
SAY TEXT "missed, short!"
DRAW TEXT "Short by "&hit&" yards." AT 0,24
DRAW TEXT "Missed: "&INT(misses)&" times." AT 0,50
misses = misses + 1
END IF
'too far
IF hit > 6 THEN
SAY TEXT "missed, over!"
DRAW TEXT "Over by "&hit&" yards." AT 0,24
DRAW TEXT "Missed: "&INT(misses)&" times" AT 0,50
misses = misses + 1
END IF
'hit
IF hit > -6 AND hit < 6 THEN
SAY TEXT "hit!"
DRAW TEXT "Hit!" AT 0,50
DRAW TEXT "Only took "&misses&" try(s)!" AT 0,40
FILL COLOR 1,0,0
FOR i = 1 TO 15
FILL CIRCLE ox0,oy0 SIZE i
NEXT i
'victory sound
SAY TEXT "winner!"
PAUSE 4
SAY STOP
GRAPHICS CLEAR
GOTO RESET
END IF
'REFRESH ON
END IF
GOTO LOOP