source: 2013/24/AamosR/GeneerinenAvaruuslentely/GeneerinenAvaruuslentely/GeneerinenAvaruuslentely/GeneerinenAvaruuslentely.cs @ 4075

Revision 4075, 6.1 KB checked in by juiitamm, 10 years ago (diff)

Talletus.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class GeneerinenAvaruuslentely : PhysicsGame
10{
11    Image aluskuva = LoadImage("alus");
12    Image asteroidikuva = LoadImage("asteroidi");
13    Image tausta = LoadImage("tausta");
14    Image vihollinenkuva = LoadImage("vihollinen");
15    PhysicsObject alus;
16    PhysicsObject asteroidi;
17    PhysicsObject vihollinen;
18    IntMeter pisteLaskuri;
19   
20   
21   
22    public override void Begin()
23    {
24        // TODO: Kirjoita ohjelmakoodisi tähän
25        //IsFullScreen = true;
26        SetWindowSize(1920, 1080, true);
27        LuoKentta();
28        AsteroidiAjastin();
29        VihollisAjastin();
30        AsetaOhjaimet();
31        LuoPisteLaskuri();
32       
33
34        if (alus.Y > Level.Top)
35        {
36            alus.Velocity = Vector.Zero;
37            return;
38        }
39    }
40
41    void LuoPisteLaskuri()
42    {
43        pisteLaskuri = new IntMeter(0);
44
45        Timer pisteTimer = new Timer();
46        pisteTimer.Interval = 2;
47        pisteTimer.Timeout += delegate { pisteLaskuri.Value++; };
48        pisteTimer.Start();
49
50        Label pisteNaytto = new Label();
51        pisteNaytto.X = Screen.Right - 100;
52        pisteNaytto.Y = Screen.Top - 100;
53        pisteNaytto.TextColor = Color.White;
54        //pisteNaytto.Color = Color.White;
55        pisteNaytto.Title = "Pisteet";
56       
57
58        pisteNaytto.BindTo(pisteLaskuri);
59        Add(pisteNaytto);
60       
61    }
62
63
64    void LuoKentta()
65    {
66        alus = new PhysicsObject(100, 100);
67        alus.Shape = Shape.Rectangle;
68        alus.X = 0;
69        alus.Y = 0;
70        alus.Image = aluskuva;
71        alus.AngularDamping = 0.5;
72        alus.LinearDamping = 0.95;
73
74        Level.Background.Image = tausta;
75
76        Add(alus);
77
78        AddCollisionHandler(alus, "vihollinen", kuolema);
79
80       
81
82
83    }
84
85   
86
87    void AsetaOhjaimet()
88    {
89        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
90        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
91        Keyboard.Listen(Key.A, ButtonState.Down, KaannaAlusta, null, 10.0);
92        Keyboard.Listen(Key.D, ButtonState.Down, KaannaAlusta, null, -10.0);
93        Keyboard.Listen(Key.W, ButtonState.Down, TyonnaAlusta, null);
94        Keyboard.Listen(Key.S, ButtonState.Down, VedaAlusta, null);
95        Keyboard.Listen(Key.RightControl, ButtonState.Pressed, Ammu, null);
96    }
97
98    void KaannaAlusta(double kulma)
99    {
100        alus.AngularVelocity = kulma;
101    }
102
103    void TyonnaAlusta()
104    {
105        Vector pelaajanSuunta = Vector.FromLengthAndAngle(2500.0, alus.Angle);
106        alus.Push(pelaajanSuunta);
107
108    }
109
110    void VedaAlusta()
111    {
112        Vector pelaajanSuunta = Vector.FromLengthAndAngle(2500.0, alus.Angle);
113        alus.Push(pelaajanSuunta - pelaajanSuunta - pelaajanSuunta);
114
115    }
116
117    void kuolema(PhysicsObject alus, PhysicsObject vihollinen)
118    {
119        alus.Destroy();
120        pisteLaskuri.Reset();
121    }
122
123    void LisaaAsteroidi()
124    {
125        //Vector kentanPiste = Level.GetRandomPosition();
126        //RandomGen.NextVector(
127
128        Vector kentanPiste = Vector.FromLengthAndAngle(Level.Width + 200, RandomGen.NextAngle());
129        asteroidi = new PhysicsObject(50, 50);
130        asteroidi.Position = kentanPiste;
131        asteroidi.Shape = Shape.Circle;
132        asteroidi.Color = Color.Black;
133        asteroidi.Image = asteroidikuva;
134        asteroidi.Tag = "vihollinen";
135        Add(asteroidi);
136        Angle asteroidikulma = (Vector.Zero - asteroidi.Position).Angle;
137        Vector asteroidivector = Vector.FromLengthAndAngle(500, RandomGen.NextAngle(asteroidikulma -Angle.FromDegrees(50), (asteroidikulma +Angle.FromDegrees(50))));
138        asteroidi.Hit(asteroidivector);
139    }
140
141    void AsteroidiAjastin()
142    {
143        Timer ajastin = new Timer();
144        ajastin.Interval = 0.5;
145        ajastin.Timeout += LisaaAsteroidi;
146        ajastin.Start();
147    }
148
149    void VihollisAjastin()
150    {
151        Timer ajastin = new Timer();
152        ajastin.Interval = 1.5;
153        ajastin.Timeout += LisaaVihollinen;
154        ajastin.Start();
155    }
156
157    void LisaaVihollinen()
158    {
159        Vector kentanPiste = Vector.FromLengthAndAngle(Level.Width + 200, RandomGen.NextAngle());
160        vihollinen = new PhysicsObject(150, 150);
161        vihollinen.Position = kentanPiste;
162        vihollinen.Shape = Shape.Circle;
163        vihollinen.Color = Color.Black;
164        vihollinen.Image = vihollinenkuva;
165        vihollinen.Tag = "vihollinen";
166        Add(vihollinen);
167        Angle vihollinenkulma = (Vector.Zero - vihollinen.Position).Angle;
168        Vector vihollinenvector = Vector.FromLengthAndAngle(500, RandomGen.NextAngle(vihollinenkulma - Angle.FromDegrees(50), (vihollinenkulma + Angle.FromDegrees(50))));
169        vihollinen.Hit(vihollinenvector);
170
171    }
172
173    void Ammu()
174    {
175        PhysicsObject ammus = new PhysicsObject(10, 10);
176       
177        Vector pelaajanSuunta = Vector.FromLengthAndAngle(2500.0, alus.Angle);
178       
179
180        ammus.Position = alus.Position + Vector.FromLengthAndAngle(80.0, alus.Angle);
181        ammus.Shape = Shape.Circle;
182        ammus.Color = Color.Yellow;
183        ammus.Hit(pelaajanSuunta);
184
185        Add(ammus, -1);
186       
187       
188        ammus.CanRotate = false;
189        ammus.IgnoresCollisionResponse = true;
190        AddCollisionHandler(ammus, "vihollinen", vihollisenKuolema);
191       
192        Timer poistumisAjastin = new Timer();
193        poistumisAjastin.Interval = 1;
194        poistumisAjastin.Timeout += delegate { ammusPoistuu(ammus); };
195        poistumisAjastin.Start();
196       
197    }
198
199    void ammusPoistuu(PhysicsObject ammus)
200    {
201        if (ammus.X > Level.Right)
202        {
203            ammus.Destroy();
204        }
205
206        else if (ammus.Y > Level.Top)
207        {
208            ammus.Destroy();
209        }
210    }
211
212    void vihollisenKuolema(PhysicsObject ammus, PhysicsObject vihollinen)
213    {
214        vihollinen.Destroy();
215        ammus.Destroy();
216
217        pisteLaskuri.Value += 10;
218       
219    }
220}
Note: See TracBrowser for help on using the repository browser.