game works now

main
Guido Schweizer 2023-11-26 16:21:32 +01:00
commit e7b6352e7a
21 changed files with 148 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
./art
.run

0
README Normal file
View File

40
app/bounce.rb Normal file
View File

@ -0,0 +1,40 @@
# A = old position, c = center of ball, v = current moving vector
def reflection_vector(ax,ay,cx,cy,xv,yv)
# Bouncing of resulting point: R
rx = ax + xv
ry = ay + yv
ux = rx - cx
uy = ry - cy
r = (-ux*cx + ux*ax -uy*cy + uy*ay).to_f / ( ux * ux + uy * uy).to_f
fx = cx + r * ux
fy = cy + r * uy
afx = fx - ax
afy = fy - ay
gx = ax + 2 * afx
gy = ay + 2 * afy
rgx = gx - rx
rgy = gy - ry
return rgx,rgy
end
# x,y further away than r allows?
def bouncing?(x,y,cx,cy,r)
# d(cx,cy,x,y) > r?
d = Math.sqrt((x - cx)*(x-cx) + ( y - cy)*( y - cy))
d > r
end
# if the speed vector is higher than the radius, we are done (2x radius would be still okay actually)
def too_fast?(vx,vy,r)
d = Math.sqrt(vx*vx+vy*vy)
d > r
end

99
app/main.rb Normal file
View File

@ -0,0 +1,99 @@
require "app/bounce.rb"
BOUNCE_ACCL = 1.02
GRAVITY = 0.9
CX = 636
CY = 399
CR = 205
def tick args
# INIT
# circle
cx = CX
cy = CY
cr = CR
# pause
args.state.paused = false if args.state.paused.nil?
if args.state.ball.nil?
args.state.ball = {
x: 500,
y: 500,
}
args.state.ball_vector = {
x: 0,
y: 0
}
end
# INPUT
if args.inputs.keyboard.key_up.space
args.state.paused = !args.state.paused
end
# LOOP
if !args.state.paused
#ball vector
move_x = args.state.ball_vector[:x]
move_y = args.state.ball_vector[:y]
# apply gravity
move_y = move_y - GRAVITY
args.state.ball_vector[:x] = move_x
args.state.ball_vector[:y] = move_y
# bounce
x = args.state.ball[:x]
y = args.state.ball[:y]
new_x = x + move_x
new_y = y + move_y
if bouncing?(new_x,new_y,cx,cy,cr)
new_move_x, new_move_y = reflection_vector(x,y,cx,cy,move_x,move_y)
args.state.ball_vector[:x] = new_move_x * BOUNCE_ACCL
args.state.ball_vector[:y] = new_move_y * BOUNCE_ACCL
end
# move the ball
move_x = args.state.ball_vector[:x]
move_y = args.state.ball_vector[:y]
args.state.ball[:x] = args.state.ball[:x] + move_x
args.state.ball[:y] = args.state.ball[:y] + move_y
end
# END?
if !args.state.paused
if too_fast?(move_x, move_y, cr)
#RESET state and pause
args.state.ball = {
x: 500,
y: 500,
}
args.state.ball_vector = {
x: 0,
y: 0
}
args.state.paused = true
end
end
# RENDER
#
# BG
args.outputs.sprites << {
x: 0,
y: 0,
w: 1280,
h: 720,
path: 'sprites/BG1.png' }
if args.state.paused
args.outputs.labels << [640, 40, "Game is paused. Press <space> to continue", 4, 1]
end
# BALL
args.outputs.sprites << {
x: args.state.ball[:x]-16,
y: args.state.ball[:y]-16,
w: 32,
h: 32,
path: 'sprites/ball.png' }
end

BIN
art/BG1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

BIN
art/BG2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

BIN
metadata/bounce_@1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

BIN
metadata/bounce_@2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
metadata/bounce_@3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

View File

@ -0,0 +1,6 @@
devid=squishibutz
devtitle=Squishibutz
gameid=Bouncing
gametitle=Sguis Bouncing
version=0.1
icon=metadata/bounce_@1.png

0
metadata/icon.png Normal file
View File

1
run Executable file
View File

@ -0,0 +1 @@
../dragonruby-macos/dragonruby ./

BIN
sprites/BG1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

BIN
sprites/BG2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

BIN
sprites/ball.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

BIN
sprites/ball@2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
sprites/ball@3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB