Post by dajan on Jan 28, 2023 18:11:47 GMT
Controls are WASD and Esc.
Simple basket game in QBjsSCREEN _NEWIMAGE(640, 480, 32)
dim t, p, s inb, net as integer
dim x, y, vx, vy, nx, ny, vd, dd, sina, cosa as double
dim rx(2), ry(2) as double
t = TIMER + 90
x = 100
y = 200
DO
CLS
vx = ((x < 25 OR x > 615) * -1.9 + 1) * (vx - (x < 200 AND y > 250) * _KEYDOWN(ASC("d")) + (y > 250) * _KEYDOWN(ASC("a"))) * 0.987
vy = ((y > 455) * -1.9 + 1) * (vy - (x < 200 AND y > 250) * _KEYDOWN(ASC("s")) + (x < 200 AND y > 250) * _KEYDOWN(ASC("w"))) * 0.987 + 0.327
x = x + vx + (x < 25) * 2 - (x > 615) * 2
y = y + vy - (y > 455) * 2
p = (-(p = 0) + 2 * -(p <> 0)) * -(y > 210 AND y < 220 AND ABS(570 - (x - vx / vy * (y - 200))) < 25) * (-(vy < 0) * 2 + 1)
s = s + (p = 1) - (p = -1)
rx(1) = 520: ry(1) = 200: rx(2) = 620: ry(2) = 200 'rim position
vd = SQR(vx ^ 2 + vy ^ 2)
FOR i = 1 TO 2
dd = SQR((rx(i) - x) ^ 2 + (ry(i) - y) ^ 2)
IF dd < 25 THEN
x = x - vx
y = y - vy
dd = SQR((rx(i) - x) ^ 2 + (ry(i) - y) ^ 2)
sina = (vx * (ry(i) - y) - vy * (rx(i) - x)) / vd / dd
cosa = (vx * (rx(i) - x) + vy * (ry(i) - y)) / vd / dd
nx = cosa * -vx - sina * -vy
ny = sina * -vx + cosa * -vy
vx = nx * 0.9
vy = ny * 0.9
END IF
NEXT i
inb = ((x > 500 AND x < 620 AND y > 200 AND y < 300) AND (p > 0 OR inb = 1))
IF inb = 1 THEN
net = _ROUND((x - 570) - ((x > 570) * -2 + 1) * (y - 250) * 0.2)
ELSEIF net <> 0 THEN
net = _ROUND(net * 0.7) - (net > 0) + (net < 0)
END IF
IF net > 30 THEN net = 30
IF net < -30 THEN net = -30
PRINT "Time:" + _ROUND(t - TIMER), "Score:" + s
FOR i = 1 TO 20: CIRCLE (x, y), i * 25 / 20, 6: NEXT
DRAW "BM0,250C2R200D230BM520,200C4R119D1L119D1R119D20H20C7M-" + STR$(30 - net) + ",100M-10,-15M-10,15M-10,-15M-10,15M-" + STR$(30 + net) + ",-100"
_DISPLAY
_LIMIT 70
LOOP UNTIL _KEYDOWN(27) OR (TIMER > t AND y > 250)