Programming C, C++, Java, PHP, Ruby, Turing, VB
Computer Science Canada 
Programming C, C++, Java, PHP, Ruby, Turing, VB  

Username:   Password: 
 RegisterRegister   
 Helicopter Game Help
Index -> Programming, Turing -> Turing Help
Goto page Previous  1, 2, 3, 4  Next
View previous topic Printable versionDownload TopicSubscribe to this topicPrivate MessagesRefresh page View next topic
Author Message
Conrad13




PostPosted: 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
Sponsor
sponsor
Aange10




PostPosted: 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




PostPosted: Thu Dec 22, 2011 5:11 pm   Post subject: RE:Helicopter Game Help

I still have no idea what to do with that... Sad
Aange10




PostPosted: 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




PostPosted: Thu Dec 22, 2011 5:46 pm   Post subject: RE:Helicopter Game Help

: / still dont get this
Aange10




PostPosted: Thu Dec 22, 2011 6:39 pm   Post subject: RE:Helicopter Game Help

What part do you not get?
Conrad13




PostPosted: Thu Dec 22, 2011 7:12 pm   Post subject: RE:Helicopter Game Help

thanks, but never mind ill try and figure it out
Conrad13




PostPosted: 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?!!? Sad
Sponsor
Sponsor
Sponsor
sponsor
chipanpriest




PostPosted: Thu Dec 22, 2011 9:27 pm   Post subject: Re: Helicopter Game Help

Turing:
if whatdotcolor (x,y) = col then
exit
end if

Think that would work?
Aange10




PostPosted: 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.

Turing:

if whatdotcolor (theDotsXposition, theDotsYposition) = white then
exit
end if
chipanpriest




PostPosted: 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




PostPosted: 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




PostPosted: 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




PostPosted: 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?? Sad Smile
Again thanks for all the help
Aange10




PostPosted: 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.
Display posts from previous:   
   Index -> Programming, Turing -> Turing Help
View previous topic Tell A FriendPrintable versionDownload TopicSubscribe to this topicPrivate MessagesRefresh page View next topic

Page 2 of 4  [ 46 Posts ]
Goto page Previous  1, 2, 3, 4  Next
Jump to:   


Style:  
Search: