How hard would a bowling game be? Nothing super fancy, just getting the ball to move, maybe curve, and knock down pins. The level of physics is up to you. Some, maybe most, of the physics can be faked with a few angles and some random rotation here and there.
Here's a pretty loose example with no real physics at all. Move the target to the cone and click the left mouse button:
set display mode 800,600,32
sync on
sync rate 60
_main:
gosub _init
do
gosub _hit_cone
sync
loop
end
`==========================================================
_init:
rem make a target
ink rgb(255,0,0),0
box 108,0,138,256
box 0,108,256,138
get image 1,0,0,256,256
sync
make object plain 2,25,25
texture object 2,1
set object 2,1,0,0
rem make matrix for reference
make matrix 1,100,1000,1,10
rem a cone for something to hit
make object cone 1,25
scale object 1,100,200,100
position object 1,50,25,1000-25
rem make object sphere
make object sphere 3,40
rem position camera
position camera 50,200,-25
xrotate camera 30
hide mouse
return
`==========================================================
_hit_cone:
rem move target
x=x+mousemovex()
if x > 150 then x=150
if x < -50 then x=-50
position object 2,x,25,1000-60
rem check for left mouse
if mouseclick()=1
rem position the sphere at the target
position object 3,object position x(2),20,object position z(2)+25
rem check for collision
bang=object collision(3,1)
if bang
gosub _fake_physics
text 0,0,"hit "+str$(ang#)
endif
endif
return
`==========================================================
_fake_physics:
rem find angle between sphere and cone (collision normal)
ang#=wrapvalue(atanfull(object position x(1)-object position x(3),object position z(1)-object position z(3)))
rem move the cone at that angle based on some force
force=2
xspeed#=newxvalue(0,ang#,force)
zspeed#=newzvalue(0,ang#,force)
xtumble#=rnd(20)-10
ytumble#=rnd(10)-5
ztumble#=rnd(10)-5
for n=1 to 100
rem move cone
position object 1,object position x(1)+xspeed#,object position y(1),object position z(1)+zspeed#
rem add tumble
rotate object 1,wrapvalue(object angle x(1)+xtumble#),wrapvalue(object angle y(1)+ytumble#),wrapvalue(object angle z(1)+ztumble#)
sync
next n
rem reset object
rotate object 1,0,0,0
position object 1,50,25,1000-25
return
As you can see, it doesn't take much to start to get on track for something like a bowling game and how much accounting you do for weight, and spin, and velocity, and etc. is up to you.
Enjoy your day.