source: 2010/24/tekrjant/Laskuvarjo/Peli.cs @ 893

Revision 893, 4.9 KB checked in by tekrjant, 10 years ago (diff)

Uutta peliä...

Line 
1using System;
2using Jypeli;
3using Jypeli.ScreenObjects;
4using Jypeli.Assets;
5
6public class Peli : PhysicsGame
7{
8    const double KavelyNopeus = 10;
9
10    Image[] laskuvarjonKuvat;
11    PhysicsObject maasto;
12    PlatformCharacter pelaaja;
13    GameObject laskuvarjo;
14    double keinumisSuunta = 1.0;
15
16    protected override void Begin()
17    {
18        laskuvarjonKuvat = LoadImages(
19            "laskuvarjo1",
20            "laskuvarjo2",
21            "laskuvarjo3",
22            "laskuvarjo4",
23            "laskuvarjo5",
24            "laskuvarjo6",
25            "laskuvarjo7"
26            );
27
28        Gravity = new Vector( 0, -500 );
29
30        Level.Width = 3000;
31        Level.Height = 10000;
32        Level.BackgroundColor = Color.LightBlue;
33
34        PhysicsObject leftBorder = Level.CreateLeftBorder();
35        PhysicsObject rightBorder = Level.CreateRightBorder();
36        leftBorder.IsVisible = false;
37        rightBorder.IsVisible = false;
38
39        LuoMaasto();
40        LisaaPilvet();
41
42        pelaaja = new PlatformCharacter( 20, 30 );
43        pelaaja.CanMoveOnAir = false;
44        pelaaja.Mass = 80;
45        pelaaja.Image = LoadImage( "hahmo" );
46        pelaaja.Color = Color.Black;
47        pelaaja.LinearDamping = 0.99;
48        pelaaja.X = 0;
49        pelaaja.Y = Level.Top - 50;
50        Add( pelaaja );
51
52        AddCollisionHandler( pelaaja, PelaajaOsuu );
53
54        laskuvarjo = new GameObject( 50, 50 );
55        laskuvarjo.IsVisible = false;
56        laskuvarjo.X = 0;
57        laskuvarjo.Y = 20;
58        laskuvarjo.Animation = new Animation( laskuvarjonKuvat );
59        laskuvarjo.Animation.StopOnLastFrame = true;
60        pelaaja.Add( laskuvarjo );
61
62        Camera.Follow( pelaaja );
63
64        Timer korkeusAjastin = new Timer();
65        korkeusAjastin.Interval = 1;
66        korkeusAjastin.Trigger += NaytaKorkeus;
67        Add( korkeusAjastin );
68        korkeusAjastin.Start();
69
70        AsetaOhjaimet();
71    }
72
73    void NaytaKorkeus( Timer sender )
74    {
75        double korkeus = pelaaja.Y - Level.Bottom;
76        MessageDisplay.Add( "Korkeus: " + korkeus.ToString( "F0" ) );
77
78        if ( korkeus < 100 )
79        {
80            sender.Stop();
81        }
82    }
83
84    void PelaajaOsuu( PhysicsObject pelaaja, PhysicsObject toinen )
85    {
86        if ( toinen == maasto )
87        {
88            SuljeLaskuvarjo();
89
90            MessageDisplay.Add( "nopeus: " + pelaaja.Velocity.Y );
91
92            if ( Math.Abs(pelaaja.Velocity.Y) > 200 )
93            {
94                // auts...
95
96                pelaaja.Image = null;
97                pelaaja.Color = Color.Black;
98                pelaaja.Size = new Vector( 20, 5 );
99            }
100        }
101    }
102
103    void LisaaPilvet()
104    {
105        for ( int i = 0; i < 100; i++ )
106        {
107            double leveys = RandomGen.NextDouble( 100, 600 );
108            double korkeus = RandomGen.NextDouble( 100, 500 );
109            GameObject pilvi = new GameObject( leveys, korkeus, Shapes.Circle );
110            pilvi.X = RandomGen.NextDouble( Level.Left, Level.Right );
111            pilvi.Y = RandomGen.NextDouble( Level.Bottom + 1000, Level.Top );
112            pilvi.Color = Color.White;
113            Add( pilvi );
114        }
115    }
116
117    void LuoMaasto()
118    {
119        maasto = PhysicsObject.CreateStaticObject( Level.Width, 1000, Shapes.Rectangle );
120        maasto.X = 0;
121        maasto.Y = Level.Bottom - maasto.Height / 2;
122        maasto.Color = Color.Green;
123        Add( maasto );
124
125        // TODO: jotain taustaa että näkee käveleekö.
126    }
127
128    void SuljeLaskuvarjo()
129    {
130        laskuvarjo.Animation.Stop();
131        laskuvarjo.IsVisible = false;
132        pelaaja.Angle = Angle.Zero;
133    }
134
135    void AsetaOhjaimet()
136    {
137        Keyboard.Listen( Key.Escape, ButtonState.Pressed, Exit, null );
138        Keyboard.Listen( Key.Space, ButtonState.Pressed, AukaiseLaskuvarjo, "Aukaise laskuvarjo" );
139        Keyboard.Listen( Key.Left, ButtonState.Down, pelaaja.Walk, null, -KavelyNopeus );
140        Keyboard.Listen( Key.Right, ButtonState.Down, pelaaja.Walk, null, KavelyNopeus );
141    }
142
143    void AukaiseLaskuvarjo()
144    {
145        if ( !laskuvarjo.IsVisible )
146        {
147            laskuvarjo.IsVisible = true;
148            laskuvarjo.Animation.Start( 1 );
149        }
150    }
151
152    protected override void Update( Time time )
153    {
154        if ( laskuvarjo.IsVisible )
155        {
156            Vector nostoVoima = new Vector( 0, 32000 );
157            pelaaja.Push( nostoVoima );
158
159            Angle asteitaSekunnissa = Angle.Degrees( 5 );
160            pelaaja.Angle += keinumisSuunta * asteitaSekunnissa * time.SinceLastUpdate.TotalSeconds;
161
162            if ( pelaaja.Angle.Degree > 10 )
163            {
164                keinumisSuunta = -1.0;
165            }
166            else if ( pelaaja.Angle.Degree < -5 )
167            {
168                keinumisSuunta = 1.0;
169            }
170        }
171
172        base.Update( time );
173    }
174}
Note: See TracBrowser for help on using the repository browser.