Creating Mario-Like Game, Need Help
Author |
Message |
FearSonic
|
Posted: Sat Apr 10, 2004 9:57 am Post subject: Creating Mario-Like Game, Need Help |
|
|
I'm creating a Mario-like platformer game, and I'm having trouble having gravity implemented. I'm moving things around using Input.KeyDown, and using whatdotcolour for collision detection, since I don't know any other way. I just have a few questions:
1) How do I put gravity in, if my code is somewhat like this:
code: | loop
setscreen ("offscreenonly")
Draw.FillBox (0, 0, maxx, maxy, 255)
Draw.FillBox (400, 200, 500, 300, 0)
Draw.FillOval (ballx, bally, 10, 10, 0)
Input.KeyDown (chars)
if chars (KEY_UP_ARROW) then
bally := bally + 1
elsif chars (KEY_DOWN_ARROW) then
bally := bally - 1
elsif chars (KEY_LEFT_ARROW) then
ballx := ballx - 1
elsif chars (KEY_RIGHT_ARROW) then
ballx := ballx + 1
end if
if bally + 10 >= maxy then
bally := bally - 1
elsif ballx + 10 >= maxx then
ballx := ballx - 1
elsif bally - 10 <= 0 then
bally := bally + 1
elsif ballx - 10 <= 0 then
ballx := ballx + 1
end if
if whatdotcolor (ballx + 11, bally) = 0 and chars (KEY_RIGHT_ARROW) then
ballx := ballx - 1
elsif whatdotcolor (ballx - 11, bally) = 0 and chars (KEY_LEFT_ARROW) then
ballx := ballx + 1
elsif whatdotcolor (ballx, bally + 11) = 0 and chars (KEY_UP_ARROW) then
bally := bally - 1
elsif whatdotcolor (ballx, bally - 11) = 0 and chars (KEY_DOWN_ARROW) then
bally := bally + 1
end if
colorback (255)
View.Update
end loop |
2) Is there another way to implement collision detection using a more efficient way? I found that if I didn't use the elsif with the 'and' operator, that it would work on one side, but not on the other.
3) How do I implement sprites? I've looked at Dan's Sprite program, but it was WAYYY too confusing for me.
Thanks in advance! It's for my Grade 10 Computer Science ISU! |
|
|
|
|
|
Sponsor Sponsor
|
|
|
FearSonic
|
Posted: Sat Apr 10, 2004 10:02 am Post subject: (No subject) |
|
|
Also, I'm wondering if I can make the ball go in a diagonal direction, I tired using:
code: | if chars (KEY_UP_ARROW) and chars (KEY_LEFT_ARROW) then
x := x - 1
y := y + 1
end if |
And it doesn't work, any suggestions? |
|
|
|
|
|
Tony
|
Posted: Sat Apr 10, 2004 10:05 am Post subject: (No subject) |
|
|
gravity is acceleration. It is applied to unit's velocity variable. When unit is in the air, each time though the loop, gravity (usually negative) is applied to the velocity and velocity moves the unit in the direction.
When you first jump, velocity is set to a positive value and unit begins to rise up, but as gravity reduces the value of the velocity, unit slows down and eventually stops (that is the highest point of the jump). At that point unit begins to fall down, picking up speed as gravity turns velocity variable into a negative value.
As for sprites, it's ether Sprite module in v3.1 or DanSprite in v4.* Which are preaty much the same. DanSprite is not complicated. You don't have to understand the coding behind it, just use methods exported (same way as you don't have to understand how Draw.Box works) |
Tony's programming blog. DWITE - a programming contest. |
|
|
|
|
FearSonic
|
Posted: Sat Apr 10, 2004 10:17 am Post subject: (No subject) |
|
|
Thanks Tony! Would you happen to have an equation for gravity that would work? The other equations I've seen were all conflicting, and I couldn't tell which to use! |
|
|
|
|
|
Tony
|
Posted: Sat Apr 10, 2004 10:35 am Post subject: (No subject) |
|
|
code: |
const gravity:int := -1
var velocity:int := 25
var y:int := 0
var x:int := 100
for i:1..100
velocity += gravity
y += velocity
Draw.FillOval(i,y,5,5,red)
delay(100)
if y<0 then
exit
end if
end for
|
|
Tony's programming blog. DWITE - a programming contest. |
|
|
|
|
FearSonic
|
Posted: Sat Apr 10, 2004 10:46 am Post subject: (No subject) |
|
|
Thanks again Tony! I tried implementing it so that it did it everytime I pressed the Up arrow, but it doesn't work for some reason. Heres the code:
code: | if chars (KEY_UP_ARROW) then
for i : ballx .. ballx + 20
velocity += gravity
bally += velocity
Draw.FillOval (i, bally, 10, 10, 0)
delay (100)
if bally < x then
exit
end if
end for
end if |
|
|
|
|
|
|
FearSonic
|
Posted: Sat Apr 10, 2004 4:02 pm Post subject: (No subject) |
|
|
I changed up your program a bit, so instead of just going up and going straight down, I made it kinda bounce going lower and lower. It isn't the correct physics, but hey it's a start.
code: | const gravity : int := -1
var y : int := 10
var v : int := 30
var velocity : int := v
loop
Input.KeyDown (chars)
if chars (KEY_UP_ARROW) then
for i : 50 .. maxx
velocity += gravity
y += velocity
Draw.FillOval (i, y, 10, 10, red)
delay (20)
Draw.FillOval (i, y, 10, 10, 0)
if y < 0 then
velocity := v - 5
v := v - 5
y := 10
end if
View.Update
end for
end if
end loop |
My only problem now is implementing it into the game! |
|
|
|
|
|
the_short1
|
Posted: Sun Apr 11, 2004 1:08 am Post subject: (No subject) |
|
|
man... if i had known it was this simple...
also now they i have finished physics in science... it makes more sense... hehehe
nice code there tony..... im sure itll come in handy eventually.... so i saved to HD., |
|
|
|
|
|
Sponsor Sponsor
|
|
|
|
|