Math.Distance/Moving on an Arc Problem
Author |
Message |
StarGateSG-1

|
Posted: Mon May 30, 2005 1:40 pm Post subject: Math.Distance/Moving on an Arc Problem |
|
|
This require a diagram: see attachment!
A: That is how the line moves along right now.
B: Is how I want to to move, That trouble is I am not sure how, and it has boggled my brain for like 3 days now.
Here is the whole code
code: |
% Sets the Screen
View.Set ("graphics:640;480,nobuttonbar,offscreenonly")
% Declaration of Variables,
var x, y, xRadius, yRadius, initialAngle, finalAngle : int := 0 % Values for Trajectory
var xAngle, yAngle : int := 0 % Line values
var windspeed, Power : int := 0 % Windspeed and power Values
var MoveArrow : array char of boolean % Value for when a key has been pressed
var Adjust : int
% Declaration of Procedures,
forward procedure Main
forward procedure Trajectory
forward procedure MoveTurret
% Variable Values,
xAngle := maxx - 20
yAngle := 20
% This is the arc distance that needs to be maintain while the
% Line moves up and down,
var Distance : int := Math.Distance (maxx, 0, yAngle,xAngle)
% This is the main procedure which controls the whole program,
% Main Program,
body procedure Main
% Main loop
loop
% Slows the program down so you have more control over were you palce the turret
delay (50)
% Gets Movemnet from turret
MoveTurret
View.Update
cls
end loop
end Main
body procedure Trajectory
% Draws the trajectory line
drawarc (x, y, xRadius, yRadius, initialAngle, finalAngle, black)
end Trajectory
body procedure MoveTurret
% Draws the Turret
drawfilloval (maxx, 0, 20, 20, 7)
drawline (maxx, 0, xAngle, yAngle, black)
% Checks if Up,Down or Enter was pressed
Input.KeyDown (MoveArrow)
% What happens when Up key is pressed
if MoveArrow (KEY_UP_ARROW) then
% If the line is at a 90 then stop it
if xAngle >= 0 and yAngle >= 40 then
xAngle := xAngle
yAngle := yAngle
% Otherwise continue
else
xAngle := xAngle + +1
yAngle := yAngle - -1
% This is for making the line move along a arc pattern
if Math.Distance (maxx, 0, xAngle, yAngle) >= Distance then
Adjust := Math.Distance (maxx, 0, xAngle, yAngle) - Distance
yAngle := yAngle - Adjust
else
end if
end if
% What happens when Down key is pressed
elsif MoveArrow (KEY_DOWN_ARROW) then
% If line is at 180 then stop it
if xAngle <= maxx and yAngle <= 0 then
xAngle := xAngle
yAngle := yAngle
% Otherwise continue
else
xAngle := xAngle + -1
yAngle := yAngle - +1
% This is for making the line move along a arc pattern
if Math.Distance (maxx, 0, xAngle, yAngle) >= Distance then
else
end if
end if
% What happens if Enter key is pressed
elsif MoveArrow (KEY_ENTER) then
Trajectory
end if
end MoveTurret
Main
|
I could really use some help with this any ideas welcome. |
|
|
|
|
 |
Sponsor Sponsor

|
|
 |
Cervantes

|
Posted: Mon May 30, 2005 4:30 pm Post subject: (No subject) |
|
|
You should fix the errors in your code before you post it.
To do this, you need some simple trig, my friend.
Here you go. Study hard.
Turing: |
View.Set ("offscreenonly")
var timeLast := Time.Elapsed
var barrel :
record
angle : real
rotationSpeed : real
length_ : real
endX, endY : real
power : real
end record
barrel.angle := 45
barrel.rotationSpeed := 0. 2
barrel.length_ := 40
barrel.endX := cosd (barrel.angle ) * barrel.length_
barrel.endY := sind (barrel.angle ) * barrel.length_
barrel.power := 2
var proj : flexible array 1 .. 0 of
record
x, y, vx, vy : real
end record
const gravity := 0. 015
var keys : array char of boolean
function cooldown (timeDelay : int) : boolean
if Time.Elapsed - timeLast >= timeDelay then
timeLast := Time.Elapsed
result true
end if
result false
end cooldown
loop
Input.KeyDown (keys )
if keys (KEY_UP_ARROW) then
barrel.angle + = barrel.rotationSpeed
barrel.endX := cosd (barrel.angle ) * barrel.length_
barrel.endY := sind (barrel.angle ) * barrel.length_
end if
if keys (KEY_DOWN_ARROW) then
barrel.angle - = barrel.rotationSpeed
barrel.endX := cosd (barrel.angle ) * barrel.length_
barrel.endY := sind (barrel.angle ) * barrel.length_
end if
if keys (KEY_ENTER ) then
if cooldown (200) then
new proj, upper (proj ) + 1
proj (upper (proj )).x := barrel.endX
proj (upper (proj )).y := barrel.endY
proj (upper (proj )).vx := cosd (barrel.angle ) * barrel.power
proj (upper (proj )).vy := sind (barrel.angle ) * barrel.power
end if
end if
for i : 1 .. upper (proj )
proj (i ).vy - = gravity
proj (i ).x + = proj (i ).vx
proj (i ).y + = proj (i ).vy
end for
for i : 1 .. upper (proj )
if proj (i ).x > maxx or proj (i ).y < 0 or proj (i ).x < 0 then
proj (i ) := proj (upper (proj ))
new proj, upper (proj ) - 1
exit
end if
end for
cls
Draw.FillOval (0, 0, 30, 30, black)
Draw.Line (0, 0, round (barrel.endX ), round (barrel.endY ), black)
for i : 1 .. upper (proj )
Draw.FillOval (round (proj (i ).x ), round (proj (i ).y ), 4, 4, black)
end for
View.Update
Time.DelaySinceLast (5)
end loop
|
|
|
|
|
|
 |
StarGateSG-1

|
Posted: Mon May 30, 2005 7:33 pm Post subject: (No subject) |
|
|
Thank you I will study, its not errors I just forgot to comment.
Edit:
Thank you so much it was right in fornt of me the whole time, I was looking at arc's in the help file, when you search they come up to. I got it working and making mine better by adding more keys and also creating editable factors, gravity and power, you can do kool things with them. |
|
|
|
|
 |
|
|