Helicopter Game Help
| Author |
Message |
Conrad13
|
Posted: Thu Dec 22, 2011 3:25 pm Post subject: Re: Helicopter Game Help |
|
|
| Turing: |
% My Variables
var xpositiona, y1, y2,dummy : int
xpositiona := 640
y1 := Rand.Int (0, 400)
y2 :=Rand.Int (0, 400)
var icolor, icolor2, iXposition, iYposition, xdirection, ydirection, font, font1, font2, font3, xmouse, ymouse, button : int
% Helicopter Controls
var yaltitude, mx, my, btn : int
var ch : string (1)
% Text Fonts
font := Font.New ("serif:50")
font1 := Font.New ("serif:25")
font2 := Font.New ("serif:15")
font3 := Font.New ("serif:9")
% Colors
icolor2 := 21
icolor := 1
% Positions
iXposition := 0
iYposition := 0
xdirection := 1
ydirection := 1
yaltitude := 0
View.Set ("graphics,offscreenonly,nocursor")
% Menu
loop
Mouse.Where(xmouse,ymouse,button )
Draw.Cls
% Background
drawfillbox (300, 240, 350, 260, 41)
% Background
drawfillbox (0, 0, maxx, maxy, 100)
% Cloud 1
drawfilloval (90, 350, 130, 80, white)
drawfilloval (70, 280, 80, 40, white)
drawfilloval (200, 310, 60, 50, white)
drawfilloval (230, 380, 60, 50, white)
% Cloud 2
drawfilloval (400, 150, 130, 80, white)
drawfilloval (380, 80, 80, 40, white)
drawfilloval (410, 220, 80, 40, white)
drawfilloval (520, 110, 70, 50, white)
drawfilloval (520, 190, 80, 50, white)
drawfilloval (300, 180, 60, 50, white)
drawfilloval (300, 120, 40, 30, white)
% Helicopter
drawfillbox (iXposition + 85, iYposition + 5, iXposition + 155, iYposition + 10, black) % Base Connected to Legs
drawfillbox (iXposition + 100, iYposition + 10, iXposition + 105, iYposition + 20, black) % Base leg 1
drawfillbox (iXposition + 135, iYposition + 10, iXposition + 140, iYposition + 20, black) % Base leg 2
drawfillbox (iXposition + 118, iYposition + 80, iXposition + 123, iYposition + 65, black) % Main Rotor
drawfillbox (iXposition + 25, iYposition + 40, iXposition + 130, iYposition + 50, black) % Rotor rectangle
drawfilloval (iXposition + 120, iYposition + 85, 70, 5, icolor2 ) % Rotor Blades
drawfilloval (iXposition + 120, iYposition + 45, 40, 30, black) % Cockpit
drawfillbox (iXposition + 10, iYposition + 40, iXposition + 15, iYposition + 70, black) % Rotor rectangle
drawfilloval (iXposition + 15, iYposition + 48, 15, 15, icolor2 ) % Rear Rotor
drawfilloval (iXposition + 85, iYposition + 45, 20, 15, black) % Smaller circle from main body of helicopter
% Menu Selections
Draw.Text ("Super-Heli", 190, 325, font, icolor - 1)
Draw.Text ("Play", 300, 180, font1, icolor - 1)
Draw.Text ("Controls", 275, 120, font1, icolor - 1)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% If Played %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if xmouse> 290 and xmouse< 370 and ymouse> 170 and ymouse< 220 and button= 1 then
Draw.Cls
View.Update
%%% Background %%%
loop
drawfillbox (0, 0, maxx, maxy, 100)
drawfillbox (0, 0, 640, 50, white)
drawfillbox (0, 350, maxx, maxy, white)
drawfillbox (xpositiona, y1, xpositiona+ 40,y2, white)
xpositiona: = xpositiona- 1
if xpositiona < 0 then
xpositiona := 640
dummy:=Rand.Int (50, 350)
if dummy <= 200 then
y1 := 50
y2 := dummy
else
y1 := 350
y2 := dummy
end if
end if
%Helicopter
drawfillbox (75, 192+yaltitude, 125, 196+yaltitude, black) % Base Connected to Legs
drawfillbox (90, 192+yaltitude, 95, 200+yaltitude, black) % Base leg 1
drawfillbox (107, 192+yaltitude, 112, 210+yaltitude, black) % Base leg 2
drawfillbox (97, 240+yaltitude, 102, 249+yaltitude, black) % Main Rotor Rectangle
drawfillbox (25, 218+yaltitude, 110, 223+yaltitude, black) % Rotor rectangle
drawfilloval (100, 248+yaltitude, 50, 5, icolor2 ) % Rotor Blades
drawfilloval (100, 220+yaltitude, 30, 20, black) % Cockpit
drawfillbox (24, 215+yaltitude, 27, 238+yaltitude, black) % Rotor rectangle
drawfilloval (24, 223+yaltitude, 10, 10, icolor2 ) % Rear Rotor Blades
drawfilloval (75, 220+yaltitude, 15, 10, black) % Smaller circle from main body of helicopter
View.Update
icolor2 := icolor2 + 1
mousewhere (mx, my, btn )
if btn = 1 then
yaltitude+= 1
else
yaltitude-= 1
View.Update
end if
if icolor2 = 31 then
icolor2 := 21
end if
delay (2)
end loop
end if
%%% End Background %%%
% If Controls selected
if xmouse> 270 and xmouse< 390 and ymouse> 100 and ymouse< 150 and button= 1 then
Draw.Cls
View.Update
loop
drawfillbox (0, 0, maxx, maxy, 100)
% Cloud 1
drawfilloval (90, 350, 130, 80, white)
drawfilloval (70, 280, 80, 40, white)
drawfilloval (200, 310, 60, 50, white)
drawfilloval (230, 380, 60, 50, white)
% Cloud 2
drawfilloval (400, 150, 130, 80, white)
drawfilloval (380, 80, 80, 40, white)
drawfilloval (410, 220, 80, 40, white)
drawfilloval (520, 110, 70, 50, white)
drawfilloval (520, 190, 80, 50, white)
drawfilloval (300, 180, 60, 50, white)
drawfilloval (300, 120, 40, 30, white)
Draw.Text ("Controls", 265, 335, font1, black)
Draw.Text ("Press B to go Back", 15, 360, font2, black)
Draw.Text ("Welcome to Super-Heli, the classic game that never gets boring!", 70, 285, font2, black)
Draw.Text ("The controls of this game are basic, to raise your helicopter,", 80, 255, font2, black)
Draw.Text ("simply click your mouse to ascend your helicopter vertically,", 77, 225, font2, black)
Draw.Text ("to descend your helicopter, let go of the mouse button.", 100, 195, font2, black)
Draw.Text ("Good luck and have fun!", 230, 125, font2, black)
Draw.Text ("Trademark to the IGC (International Gaming Corporation) Do not copy this game.", 115, 15, font3, black)
View.Update
getch (ch )
if ch = "b" then
exit
else
end if
end loop
else
end if
%drawfillbox (290,170,370,220,41)
%drawfillbox (270,100,390,150,41)
icolor := icolor + 1
if icolor = 62 then
icolor := 1
end if
icolor2 := icolor2 + 1
if icolor2 = 31 then
icolor2 := 21
end if
iXposition := iXposition + xdirection
iYposition := iYposition + ydirection
if iXposition > 455 or iXposition < 0 then
xdirection := -xdirection
end if
if iYposition > 215 or iYposition < 0 then
ydirection := -ydirection
end if
delay (10)
View.Update
end loop
|
Well its coming together, now all I have to do is setup the collision detection, distance counter, and gameover!!!
Thanks Aange10 |
|
|
|
|
 |
Sponsor Sponsor

|
|
 |
Aange10

|
Posted: Thu Dec 22, 2011 4:20 pm Post subject: RE:Helicopter Game Help |
|
|
| the Turing Walkthrough has collison tutorials. Considering how easy this is, you may want to look into Whatdotcolor collision. |
|
|
|
|
 |
Conrad13
|
Posted: Thu Dec 22, 2011 5:11 pm Post subject: RE:Helicopter Game Help |
|
|
I still have no idea what to do with that...  |
|
|
|
|
 |
Aange10

|
Posted: Thu Dec 22, 2011 5:33 pm Post subject: RE:Helicopter Game Help |
|
|
Here's an example of using whatdotcolor.
| Turing: |
% Our Character
var charx : int := 100
var chary : int := 100
% Our Enemy
var targetx : int
var targety : int
% Get Input
var num : array char of boolean
% Set double buffering
setscreen ("offscreenonly")
% begin mini game
loop
% Ramdomize target's location
targetx := Rand.Int (10, 630) %just setting the coordinates of the target
targety := Rand.Int (10, 390) % In the brackets is just the rang of the Rand.Int!
loop
Input.KeyDown (num ) %Remember this from 'Movement'?
if num (KEY_UP_ARROW) and chary < 390 then
chary := chary + 1
end if
if num (KEY_DOWN_ARROW) and chary > 10 then
chary := chary - 1
end if
if num (KEY_LEFT_ARROW) and charx > 10 then
charx := charx - 1
end if
if num (KEY_RIGHT_ARROW) and charx < 630 then
charx := charx + 1
end if
% Draw everything
Draw.FillOval (targetx, targety, 20, 20, black)
Draw.Oval (charx, chary, 5, 5, brightred)
colourback (0) put "targetx:", targetx
colourback (0) put "targety:", targety
% ONE line of collision
exit when whatdotcolor (charx, chary ) = black
View.Update
delay (5)
cls
end loop
cls
end loop
% Taken from the Whatdotcolor tutorial
|
|
|
|
|
|
 |
Conrad13
|
Posted: Thu Dec 22, 2011 5:46 pm Post subject: RE:Helicopter Game Help |
|
|
| : / still dont get this |
|
|
|
|
 |
Aange10

|
Posted: Thu Dec 22, 2011 6:39 pm Post subject: RE:Helicopter Game Help |
|
|
| What part do you not get? |
|
|
|
|
 |
Conrad13
|
Posted: Thu Dec 22, 2011 7:12 pm Post subject: RE:Helicopter Game Help |
|
|
| thanks, but never mind ill try and figure it out |
|
|
|
|
 |
Conrad13
|
Posted: Thu Dec 22, 2011 9:02 pm Post subject: Re: Helicopter Game Help |
|
|
Can anyone help me with color collision detection?!! Please out of all the people on the forum how do i only have one person trying to help?!!?  |
|
|
|
|
 |
Sponsor Sponsor

|
|
 |
chipanpriest

|
Posted: Thu Dec 22, 2011 9:27 pm Post subject: Re: Helicopter Game Help |
|
|
Think that would work? |
|
|
|
|
 |
Aange10

|
Posted: Thu Dec 22, 2011 9:46 pm Post subject: RE:Helicopter Game Help |
|
|
Indeed, whatdotcolor is very simple. you put in the x cord, and the y cord, and it tells you what color that dot is. Simple.
So you could look at the edge of your helicopter, and say "if this dot turns white, exit". To do that you'd say whatdotcolor (theDotsXposition, theDotsYposition). That'd give you the color of that dot, then you'd take it and compare it and see if its white.
|
|
|
|
|
 |
chipanpriest

|
Posted: Thu Dec 22, 2011 9:59 pm Post subject: Re: Helicopter Game Help |
|
|
for the ceiling and floor you could put
| Turing: | if helicoptery >= maxy then
exit
elsif helicoptery <= 0 then
exit
end if
|
|
|
|
|
|
 |
chipanpriest

|
Posted: Thu Dec 22, 2011 10:04 pm Post subject: RE:Helicopter Game Help |
|
|
| also i played it and sometimes the dummy takes up the whole screen, thus making it impossible once you get the collision code in there. you might want to fix that :p |
|
|
|
|
 |
Dreadnought
|
Posted: Fri Dec 23, 2011 12:47 am Post subject: Re: Helicopter Game Help |
|
|
Basically to check collision we use whatdotcolour to check if any pixels are the "wrong" colour. If any are then we have a collision. So which pixels should we check? Well lets suppose we are moving a box around on the screen. We could check every single pixel in the box, but that's a lot of pixels (remember we are doing this on each frame) and common sense/laziness tells us we can do better.
We can reason fairly easily that only the edges are important (for more complex shapes some edges may not be important if they are on the inside of the shape). For that box I was talking about we would only have to check the pixels at the edges of the box.
In your case you would want to know where the important edges of your helicopter are. Think of it like a wire frame. Here's what it might look like for your helicopter.
| Turing: | Draw.FillBox (50, 348, 150, 353, 12)
Draw.FillBox (75, 292, 125, 294, 12)
Draw.FillBox (20, 312, 70, 320, 12)
drawbox (75, 192+ 100, 125, 196+ 100, black) % Base Connected to Legs
drawbox (90, 192+ 100, 95, 200+ 100, black) % Base leg 1
drawbox (107, 192+ 100, 112, 210+ 100, black) % Base leg 2
drawbox (97, 240+ 100, 102, 249+ 100, black) % Main Rotor Rectangle
drawbox (25, 218+ 100, 110, 223+ 100, black) % Rotor rectangle
drawoval (100, 248+ 100, 50, 5, 7) % Rotor Blades
drawoval (100, 220+ 100, 30, 20, black) % Cockpit
drawbox (24, 215+ 100, 27, 238+ 100, black) % Rotor rectangle
drawoval (24, 223+ 100, 10, 10, 7) % Rear Rotor Blades
drawoval (75, 220+ 100, 15, 10, black) % Smaller circle from main body of helicopter
|
The red rectangles are a ruff estimate of some of the areas where you might want to check for collisions on edges.
Now to check for collision. Aange10 posted a nice example for this. Here's my "moving a box around" example that I was talking about earlier. In this example I stop the box from moving when I detect collision.
| Turing: | View.Set ("offscreenonly")
var x : int := 299 % x position
var y : int := 299 % y position
fcn x2 : int % the other x position
result x + 20
end x2
fcn y2 : int % the other y position
result y + 20
end y2
const speed := 1
var chars : array char of boolean
% Draw the border
Draw.FillBox (0, 0, maxx, maxy, 7)
Draw.FillBox (10, 10, maxx - 10, maxy - 10, 0)
View.Update
loop
Draw.FillBox (x, y, x2, y2, 0) % Erase the box
Input.KeyDown (chars )
if chars (KEY_LEFT_ARROW) then
x - = speed
end if
if chars (KEY_RIGHT_ARROW) then
x + = speed
end if
if chars (KEY_DOWN_ARROW) then
y - = speed
end if
if chars (KEY_UP_ARROW) then
y + = speed
end if
for i : 0 .. 20 % check all dots on each edge
if whatdotcolour (x, y + i ) = 7 then % check left edge
x + = speed
elsif whatdotcolour (x2, y + i ) = 7 then % check right edge
x - = speed
end if
if whatdotcolour (x + i, y ) = 7 then % check bottom edge
y + = speed
elsif whatdotcolour (x + i, y2 ) = 7 then % check top edge
y - = speed
end if
end for
Draw.FillBox (x, y, x2, y2, 12) % Draw the box
View.UpdateArea (x - speed, y - speed, x2 + speed, y2 + speed ) % Update the box on screen
Time.Delay (5)
end loop |
Basically I'm checking if any pixel in the 4 lines that make up my box are touching black. If they are I stop the box.
Of course one might look at this and say "Just check the x and y coordinates of the box to find when it hits the border". Its true, that would be faster and easier. BUT, add ANY shape you want to the screen (make in black and don't put it where the box is when the program starts) and it will still work. For example, try copying your helicopter's frame I posted above into the section that says "%You can add other shapes here".
So now you have a square that will always stop when it collides with any black object. (There is a bug that will sometimes cause the box to slide on edges, but its should be easy to fix)
Since you only care about whether or not you collided your task is even simpler.
Note: Straight lines are easy to check, curves are harder. For an oval you can either estimate it as a rectangle (easy but not very accurate), or check points on the actual oval (the formula for an oval is (x/a)^2 + (y/b)^2 = 1 where a is the horizontal radius and b is the vertical radius).
Hope this helps. |
|
|
|
|
 |
Conrad13
|
Posted: Fri Dec 23, 2011 8:37 am Post subject: RE:Helicopter Game Help |
|
|
o.O wow thanks for all the help, lol, i think i can take it from here, do you guys think this is a good game? like idk rate this outta 10 for what it has potential for??
Again thanks for all the help |
|
|
|
|
 |
Aange10

|
Posted: Fri Dec 23, 2011 2:45 pm Post subject: RE:Helicopter Game Help |
|
|
| It's very classic, I like it. There is no reason to rate it. For a society used to industry standard, rating a new programmers game is harsh. |
|
|
|
|
 |
|
|