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

Username:   Password: 
 RegisterRegister   
 Help With Animation
Index -> Programming, Turing -> Turing Help
View previous topic Printable versionDownload TopicSubscribe to this topicPrivate MessagesRefresh page View next topic
Author Message
philsee




PostPosted: Sat Jan 21, 2012 3:16 pm   Post subject: Help With Animation

Hey everyone I'm trying to get the fireworks in my christmas scene to work but Im drawing a blank as to how to fix this problem does anyone know what I should do to fix it?


Post any relevant code (You may choose to attach the file instead of posting the code if it is too long)
<Answer Here>

Turing:


<setscreen ("graphics:max,max,noecho,nocursor") %full screen


%snow from compsci.ca

View.Set ("offscreenonly")
colorback (blue) % background of picture



const MaxParticles := 200
const startfirex := 100
const startfirey := 100
const smokelength := 300

type Particle_Type : %declare type
record
x, y, speed : real
end record

var Particles : array 1 .. MaxParticles of Particle_Type %declare array of type that you've made


for i : 1 .. MaxParticles % give particles their initial x,y value
Particles (i).x := Rand.Int (0, maxx) %randmize the x position
Particles (i).y := Rand.Int (0, maxy) %randmize the y position
Particles (i).speed := Rand.Int (3, 5) %randmize the y position


end for

process music

    loop
        Music.PlayFile ("turingsong.mp3")
    end loop
end music

fork music

loop %main animation loop
cls %clear the screen
type specs :
    record
        explosionDraw : proc x
        x, y, vx, vy, vExplosionCounter, explosionCounter : real
        c, stage, explosionType : int
    end record

const gravity := 0.09

var fireworkExplosions : array 1 .. 2 of proc z
var fireworks : array 1 .. 10 of specs

var fireworkTimer : int := 0
var fireworkCount : int := 0
var fireworkNum : int := 0

proc explosion1
    for i : 1 .. 22
        Draw.ThickLine (round (fireworks (fireworkNum).x + (fireworks (fireworkNum).explosionCounter * cosd (i * 16))),
            round (fireworks (fireworkNum).y + (fireworks (fireworkNum).explosionCounter * sind (i * 16))),
            round (fireworks (fireworkNum).x + ((fireworks (fireworkNum).explosionCounter + 5) * cosd (i * 16))),
            round (fireworks (fireworkNum).y + ((fireworks (fireworkNum).explosionCounter + 5) * sind (i * 16))), 4, fireworks (fireworkNum).c)
        Draw.ThickLine (round (fireworks (fireworkNum).x + ((fireworks (fireworkNum).explosionCounter - 3) * cosd (i * 16))),
            round (fireworks (fireworkNum).y + ((fireworks (fireworkNum).explosionCounter - 3) * sind (i * 16))),
            round (fireworks (fireworkNum).x + ((fireworks (fireworkNum).explosionCounter - 7) * cosd (i * 16))),
            round (fireworks (fireworkNum).y + ((fireworks (fireworkNum).explosionCounter - 7) * sind (i * 16))), 2, fireworks (fireworkNum).c)
        Draw.ThickLine (round (fireworks (fireworkNum).x + ((fireworks (fireworkNum).explosionCounter - 9) * cosd (i * 16))),
            round (fireworks (fireworkNum).y + ((fireworks (fireworkNum).explosionCounter - 9) * sind (i * 16))),
            round (fireworks (fireworkNum).x + ((fireworks (fireworkNum).explosionCounter - 12) * cosd (i * 16))),
            round (fireworks (fireworkNum).y + ((fireworks (fireworkNum).explosionCounter - 12) * sind (i * 16))), 1, fireworks (fireworkNum).c)
        Draw.ThickLine (round (fireworks (fireworkNum).x + ((fireworks (fireworkNum).explosionCounter + 15) * cosd (i * 16 + 8))),
            round (fireworks (fireworkNum).y + ((fireworks (fireworkNum).explosionCounter + 15) * sind (i * 16 + 8))),
            round (fireworks (fireworkNum).x + ((fireworks (fireworkNum).explosionCounter + 20) * cosd (i * 16 + 8))),
            round (fireworks (fireworkNum).y + ((fireworks (fireworkNum).explosionCounter + 20) * sind (i * 16 + 8))), 4, fireworks (fireworkNum).c)
        Draw.ThickLine (round (fireworks (fireworkNum).x + ((fireworks (fireworkNum).explosionCounter + 13) * cosd (i * 16 + 8))),
            round (fireworks (fireworkNum).y + ((fireworks (fireworkNum).explosionCounter + 13) * sind (i * 16 + 8))),
            round (fireworks (fireworkNum).x + ((fireworks (fireworkNum).explosionCounter + 9) * cosd (i * 16 + 8))),
            round (fireworks (fireworkNum).y + ((fireworks (fireworkNum).explosionCounter + 9) * sind (i * 16 + 8))), 2, fireworks (fireworkNum).c)
        Draw.ThickLine (round (fireworks (fireworkNum).x + ((fireworks (fireworkNum).explosionCounter + 7) * cosd (i * 16 + 8))),
            round (fireworks (fireworkNum).y + ((fireworks (fireworkNum).explosionCounter + 7) * sind (i * 16 + 8))),
            round (fireworks (fireworkNum).x + ((fireworks (fireworkNum).explosionCounter + 4) * cosd (i * 16 + 8))),
            round (fireworks (fireworkNum).y + ((fireworks (fireworkNum).explosionCounter + 4) * sind (i * 16 + 8))), 1, fireworks (fireworkNum).c)
    end for
end explosion1
fireworkExplosions (1) := explosion1

proc explosion2
    for i : 1 .. 80 - (round (fireworks (fireworkNum).explosionCounter) div 3)
        var angle : int := Rand.Int (0, 360)
        Draw.Dot (round (fireworks (fireworkNum).x + (Rand.Int (0, round (fireworks (fireworkNum).explosionCounter / 1.5)) * cosd (angle))),
            round (fireworks (fireworkNum).y + (Rand.Int (0, round (fireworks (fireworkNum).explosionCounter / 1.5)) * sind (angle))), fireworks (fireworkNum).c)
        angle := Rand.Int (0, 360)
        Draw.Dot (round (fireworks (fireworkNum).x + (Rand.Int (0, round (fireworks (fireworkNum).explosionCounter / 1.5)) * cosd (angle))),
            round (fireworks (fireworkNum).y + (Rand.Int (0, round (fireworks (fireworkNum).explosionCounter / 1.5)) * sind (angle))), white)
    end for
end explosion2
fireworkExplosions (2) := explosion2

for i : 1 .. 10
    fireworks (i).x := 0
    fireworks (i).y := 0
    fireworks (i).vx := 0
    fireworks (i).vy := 0
    fireworks (i).stage := 0
end for

loop

    fireworkTimer += 1

    if fireworkTimer > Rand.Int (40, 250) then
        fireworkTimer := 0
        fireworkCount += 1
        if fireworkCount > 10 then
            fireworkCount := 1
        end if
        fireworks (fireworkCount).x := Rand.Int (0, maxx)
        fireworks (fireworkCount).y := 0
        fireworks (fireworkCount).vx := Rand.Int (-2500, 2500) / 1000
        fireworks (fireworkCount).vy := Rand.Int (6000, 9000) / 1000
        fireworks (fireworkCount).stage := 1
        fireworks (fireworkCount).explosionCounter := 0
        fireworks (fireworkCount).vExplosionCounter := Rand.Int (3, 10)
        fireworks (fireworkCount).c := Rand.Int (32, 80)
        fireworks (fireworkCount).explosionType := round (Rand.Int (5, 20) / 10)
        fireworks (fireworkCount).explosionDraw := fireworkExplosions (fireworks (fireworkCount).explosionType)
    end if

    for i : 1 .. 10
        fireworkNum := i
        if fireworks (i).stage = 1 then
            Draw.FillOval (round (fireworks (i).x), round (fireworks (i).y), 5, 5, fireworks (i).c)
            Draw.FillOval (round (fireworks (i).x - fireworks (i).vx * 3), round (fireworks (i).y - fireworks (i).vy * 3), Rand.Int (2, 3), Rand.Int (4, 5), fireworks (i).c)
            Draw.FillOval (round (fireworks (i).x - fireworks (i).vx * 6), round (fireworks (i).y - fireworks (i).vy * 6), Rand.Int (2, 3), Rand.Int (3, 4), fireworks (i).c)
            Draw.FillOval (round (fireworks (i).x - fireworks (i).vx * 9), round (fireworks (i).y - fireworks (i).vy * 9), Rand.Int (2, 3), Rand.Int (2, 3), fireworks (i).c)
            fireworks (i).x += fireworks (i).vx
            fireworks (i).y += fireworks (i).vy
            fireworks (i).vy -= gravity
            if fireworks (i).y > maxy or fireworks (i).y < 0 then
                fireworks (i).stage := 0
            end if
            if fireworks (i).vy < -1 then
                fireworks (i).stage := 2
            end if
        end if

        if fireworks (i).stage = 2 then
            fireworks (i).explosionDraw
            if fireworks (i).explosionType = 1 then
                fireworks (i).explosionCounter += fireworks (i).vExplosionCounter
                fireworks (i).vExplosionCounter -= 0.1
            elsif fireworks (i).explosionType = 2 then
                fireworks (i).explosionCounter += fireworks (i).vExplosionCounter / 1.5
                fireworks (i).vExplosionCounter -= 0.05
            end if
            if fireworks (i).vExplosionCounter < 0.5 then
                fireworks (i).stage := 0
            end if
        end if
    end for

    View.UpdateArea (0, 0, maxx, maxy)
    delay (5)
    cls

end loop

colorback (blue) %colours screen blue
cls
drawfillbox (30, 30, 200, 200, brown) %body of house

drawfillbox (0, 29, 2000, 0, white)%ground
drawfillbox (88, 30, 143, 120, black) %door

drawfillbox (55, 130, 95, 150, white) %window
drawfillbox (135, 130, 175, 150, white) %window

drawline (30, 200, 100, 300, white) %roof
 drawline (200, 200, 100, 300, white)%roof


%stars
Draw.FillStar (300, 500, 310, 510, yellow)
Draw.FillStar (265, 465, 255, 455, yellow)
Draw.FillStar (400, 550, 410, 540, yellow)
Draw.FillStar (200, 510, 210, 520, yellow)
Draw.FillStar (115, 550, 125, 560, yellow)
Draw.FillStar (375, 485, 365, 475, yellow)
Draw.FillStar (65, 480, 75, 490, yellow)
Draw.FillStar (130, 420, 140, 410, yellow)
Draw.FillStar (750, 550, 760, 560, yellow)
Draw.FillStar (690, 455, 700, 465, yellow)
Draw.FillStar (720, 430, 730, 440, yellow)
Draw.FillStar (700, 400, 710, 410, yellow)
Draw.FillStar (670, 405, 680, 415, yellow)
Draw.FillStar (630, 380, 640, 390, yellow)
Draw.FillStar (605, 350, 615, 360, yellow)
Draw.FillStar (600, 320, 610, 330, yellow)
Draw.FillStar (500, 500, 490, 490, yellow) 
Draw.FillStar (530, 550, 545, 565, yellow) 
Draw.FillStar (510, 530, 500, 520, yellow)
Draw.FillStar (495, 500, 485, 490, yellow)
Draw.FillStar (490, 470, 480, 460, yellow)
Draw.FillStar (490, 430, 480, 420, yellow)
Draw.FillStar (460, 475, 450, 465, yellow)
Draw.FillStar (460, 430, 450, 420, yellow)
%snowman
%body
Draw.FillOval (600, 80, 60, 60, white)
Draw.FillOval (600, 165, 45, 45, white)
Draw.FillOval (600, 230, 27, 27, white)
%eyes
Draw.FillOval (610, 240, 5, 5, black)
Draw.FillOval (590, 240, 5, 5, black)
%nose
Draw.Line (605, 233, 595, 233, 42)
Draw.Line (600, 220, 565, 233, 42)
Draw.Line (600, 220, 605, 233, 42)
Draw.Line (600, 220, 604, 233, 42)
Draw.Line (600, 220, 603, 233, 42)
Draw.Line (600, 220, 602, 233, 42)
Draw.Line (600, 220, 601, 233, 42)
Draw.Line (600, 220, 600, 233, 42)
Draw.Line (600, 220, 599, 233, 42)
Draw.Line (600, 220, 598, 233, 42)
Draw.Line (600, 220, 597, 233, 42)
Draw.Line (600, 220, 596, 233, 42)


 %Hat
Draw.ThickLine (627, 256, 573, 256, 3, black)
Draw.ThickLine (627, 260, 573, 260, 4, white)
Draw.ThickLine (627, 263, 573, 263, 3, black)
Draw.ThickLine (629, 266, 629, 273, 2, black)
Draw.ThickLine (553, 266, 553, 273, 2, black)
Draw.FillBox (580, 273, 620, 309, black)
%Buttons
Draw.FillOval (600, 135, 5, 5, black)
Draw.FillOval (600, 155, 5, 5, black)
Draw.FillOval (600, 175, 5, 5, black)
Draw.FillOval (600, 195, 5, 5, black)

 drawfilloval (740, 550, 45, 45, grey)     %moon
    drawfilloval (710, 550, 30, 35, blue)     %moon

Draw.Line (300, 78, 500, 78, brightgreen)
Draw.Line (300, 78, 380, 158, brightgreen)
Draw.Line (500, 78, 420, 158, brightgreen)
Draw.Line (320, 158, 380, 158, brightgreen)
Draw.Line (420, 158, 480, 158, brightgreen)
Draw.Line (320, 158, 380, 218, brightgreen)
Draw.Line (480, 158, 420, 218, brightgreen)
Draw.Line (380, 218, 340, 218, brightgreen)
Draw.Line (420, 218, 460, 218, brightgreen)
Draw.Line (340, 218, 380, 258, brightgreen)
Draw.Line (460, 218, 420, 258, brightgreen)
Draw.Line (420, 258, 440, 258, brightgreen)
Draw.Line (380, 258, 360, 258, brightgreen)
Draw.Line (400, 298, 360, 258, brightgreen)
Draw.Line (400, 298, 440, 258, brightgreen)
    drawfillbox (372, 30, 428, 78, 119) %christmas tree's trunk
%star
Draw.FillStar (380, 290, 420, 330, 30)


for i : 1 .. MaxParticles %inside this loop we go through all the particles 1 by 1
Particles (i).y -= Particles (i).speed %move down the drop of rain

if Particles (i).y <= 0 then %if drop of rain has fallen to the ground, reset it's values
Particles (i).y := maxy %set it's y location back to the top again
Particles (i).x := Rand.Int (0, maxx) %randmize the x position of rain droplets from 0 to maxx
Particles (i).speed := Rand.Int (1, 3) %randmize the speed of drops rain

end if

Draw.ThickLine (round (Particles (i).x), round (Particles (i).y), round (Particles (i).x), round (Particles (i).y + (Particles (i).speed)), 3, 0) %draw the drop of rain

end for
View.Update
end loop

>

Sponsor
Sponsor
Sponsor
sponsor
Alex C.




PostPosted: Sat Jan 21, 2012 3:21 pm   Post subject: RE:Help With Animation

um first off, "proc" shouldn't be in a loop
Insectoid




PostPosted: Sat Jan 21, 2012 4:45 pm   Post subject: RE:Help With Animation

What's the problem?
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 1 of 1  [ 3 Posts ]
Jump to:   


Style:  
Search: