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

Revision 896, 5.8 KB checked in by tekrjant, 11 years ago (diff)

Äijälle voi käydä TODELLA huonosti (kiitos Arttu!)

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