View.Set ("graphics:max,max, offscreenonly")
var x1, y1, x2, y2, meX, meY, distance : int
var m, b : real
var tX, tY : int
var controls : array char of boolean
% The line works fine on a straight or steep slope but screws up on a small slope
x1 := 200
y1 := 300
x2 := 500
y2 := 400
meX := 300
meY := 400
fcn wallDETECTION (x1_, y1_, x2_, y2_, charX_, charY_ : int, m_, b_ : real) : boolean
var x, y, ratio : real
var angle : int
for i : x1_ .. x2_
x := i
y := (m_ * x) + b_
drawdot (round (x), round (y), black)
/*if (charX_ - round (x)) not= 0 then
ratio := (charY_ - round (y)) / (charX_ - round (x))
else
ratio := (charY_ - round (y)) / 0.001
end if
angle := round (arctand (abs (ratio)))
if (charX_ - round (x)) < 0 then
angle := 180 - angle
end if
if (charY_ - round (y)) < 0 then
angle := 360 - angle
end if
locate (1, 1)
put angle ..*/
if Math.Distance (x, y, charX_, charY_) <= 5 then %and angle >= 0 and angle <= 180 then
%if angle = 27 or angle = 180 then
% meY += 5
%end if
%put "HIT:" ..
result true
end if
end for
result false
end wallDETECTION
proc initialize (x1_, y1_, x2_, y2_ : int)
x1 := x1_
x2 := x2_
y1 := y1_
y2 := y2_
if x2 - x1 <= 0 then
m := (y2 - y1) / 0.0000001
else
m := (y2 - y1) / (x2 - x1)
end if
b := (m * x1 - y1) * -1
distance := round (sqrt ((x2 - x1) ** 2 + (y2 - y1) ** 2))
end initialize
proc move
Input.KeyDown (controls)
% PROBLEM AREA
% The t variables represents the line and the balls position shifted up by 5
% The me variables is the ball shifted up 5, cept that it descends down into the t's trajectory.
if controls (KEY_RIGHT_ARROW) then
if wallDETECTION (x1, y1, x2, y2, meX, meY, m, b) = true then
meX += 5
tX := meX
meY := round ((m * intreal (meX)) + b) + 5
tY := round ((m * intreal (meX)) + b)
else
meX += 5
end if
elsif controls (KEY_LEFT_ARROW) then
if wallDETECTION (x1, y1, x2, y2, meX, meY, m, b) = true then
meX -= 5
tX := meX
meY := round ((m * intreal (meX)) + b) + 5
tY := round ((m * intreal (meX)) + b)
else
meX -= 5
end if
end if
if controls (KEY_UP_ARROW) then
meY += 10
end if
if wallDETECTION (x1, y1, x2, y2, meX, meY, m, b) = false then
meY -= 5
tX := meX
tY := meY
end if
end move
initialize (x1, y1, x2, y2)
loop
move
View.Update
cls
drawline (x1, y1, x2, y2, black)
drawoval (meX, meY, 5, 5, red)
drawoval (meX, meY - 5, 5, 5, 1)
drawoval (tX, tY, 5, 5, green)
delay (10)
locate (1, 1)
put meX, " ", meY ..
locate (2, 1)
put meX, " ", meY - 5 ..
end loop
% Need to check for Steep slopes and change so that movement falls better :D
|