source: 2011/23/jalindgr/solar sailors/solar sailors/solar sailors/Peli.cs @ 1896

Revision 1896, 6.9 KB checked in by jalindgr, 9 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Peli : TopDownPhysicsGame
10{
11    // Jasu Lindgren
12
13    Image olionKuva = LoadImage("solarsailors");
14    Image punainenalus = LoadImage("punainenalus");
15    Automobile alus;
16    PlasmaCannon plasmacannon;
17    ExplosionSystem rajahdys;
18    IntMeter vastuksiaJaljellaLaskuri;
19    IntMeter vastuksiaTuhottuLaskuri = new IntMeter(0);
20    IntMeter HPlaskuri = new IntMeter(20);
21
22
23    public override void Begin()
24    {
25        rajahdys = new ExplosionSystem(LoadImage("rajahdys"), 200);
26        Add(rajahdys);
27        LuoLaskurit();
28        LuoNaytot();
29        AloitaPeli();
30        ohjaimet();
31
32    }
33
34    void LuoNaytot()
35    {
36        Label hpNaytto = new Label();
37        hpNaytto.BindTo(HPlaskuri);
38        hpNaytto.Position = new Vector(Screen.Left + 100, Screen.Top - 100);
39        Add(hpNaytto);
40        hpNaytto.TextColor = Color.LightBlue;
41
42    }
43
44    void AloitaPeli()
45    {
46
47        Level.Background.CreateStars();
48        reunat();
49        LuoVastustaja(-100, 200);
50        LuoVastustaja(100, 200);
51        LuoVastustaja(0, 200);
52        alus = new Automobile(40.0, 40.0);
53        alus.AngularDamping = 0.9;
54        alus.LinearDamping = 0.97;
55        alus.Acceleration = 1500;
56        alus.Restitution = 0.3;
57        alus.Maneuverability = Angle.FromRadians(Math.PI);
58        Add(alus);
59        (alus).Color = Color.Blue;
60        alus.Image = olionKuva;
61
62
63        plasmacannon = new PlasmaCannon(5, 5);
64        plasmacannon.TimeBetweenUse = TimeSpan.FromMilliseconds(500);
65        alus.Add(plasmacannon);
66        plasmacannon.Ammo.Value = int.MaxValue;
67
68
69        Vector impulssi = new Vector(500.0, 0.0);
70        (alus).Hit(impulssi);
71    }
72
73    void LuoLaskurit()
74    {
75        vastuksiaJaljellaLaskuri = new IntMeter(0);
76        vastuksiaJaljellaLaskuri.MinValue = 0;
77        vastuksiaJaljellaLaskuri.LowerLimit += lisavastustajat;
78
79        HPlaskuri.MinValue = 0;
80        HPlaskuri.LowerLimit += AlusTuhoutuu;
81
82        vastuksiaTuhottuLaskuri.MaxValue = 10;
83        vastuksiaTuhottuLaskuri.UpperLimit += PeliPaattyi;
84
85        Label vastuksiaTuhottuNaytto = new Label();
86        vastuksiaTuhottuNaytto.BindTo(vastuksiaTuhottuLaskuri);
87        vastuksiaTuhottuNaytto.Position = new Vector(Screen.Right - 100, Screen.Top - 100);
88        Add(vastuksiaTuhottuNaytto);
89        vastuksiaTuhottuNaytto.TextColor = Color.White;
90    }
91
92    void PeliPaattyi(int arvo)
93    {
94        ClearControls();
95       
96
97        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, null);
98        Label pelipaattyiTeksti = new Label("voitit tarpeeksi monta vastustajaa! vastustajat perääntyvät.");
99        pelipaattyiTeksti.TextColor = Color.White;
100        Add(pelipaattyiTeksti);
101    }
102
103    void AlusTuhoutuu(int arvo)
104    {
105        rajahdys.AddEffect(alus.Position, 50);
106        alus.Destroy();
107        PeliLoppuu();
108    }
109
110    void PeliLoppuu()
111    {
112        Label teksti = new Label("hävisit!!");
113        teksti.TextColor = Color.Pink;
114        Add(teksti);
115    }
116
117    void lisavastustajat(int arvo)
118    {
119        int i = 0;
120        while (i < 4)
121        {
122            double x = RandomGen.NextDouble(Level.Left, Level.Right);
123            double y = RandomGen.NextDouble(Level.Bottom, Level.Top);
124            LuoVastustaja(x, y);
125            i++;
126        }
127    }
128
129    void reunat()
130    {
131        PhysicsObject vasenReuna;
132        PhysicsObject oikeaReuna;
133
134        vasenReuna = Level.CreateLeftBorder();
135        vasenReuna.Restitution = 0.9;
136        vasenReuna.IsVisible = false;
137        oikeaReuna = Level.CreateRightBorder();
138        oikeaReuna.Restitution = 0.9;
139        oikeaReuna.IsVisible = false;
140        PhysicsObject ylaReuna = Level.CreateTopBorder();
141        ylaReuna.Restitution = 0.9;
142        ylaReuna.IsVisible = false;
143        PhysicsObject alaReuna = Level.CreateBottomBorder();
144        alaReuna.Restitution = 0.9;
145        alaReuna.IsVisible = false;
146    }
147    void ohjaimet()
148    {
149        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu");
150        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
151        MessageDisplay.TextColor = Color.White;
152        Keyboard.Listen(Key.W, ButtonState.Down, kiihdytä, "kiihdytä", alus);
153        Keyboard.Listen(Key.A, ButtonState.Down, käänny, "kääntyy vasemmalle", alus, Angle.FromDegrees(180));
154        Keyboard.Listen(Key.D, ButtonState.Down, käänny, "kääntyy oikealle", alus, Angle.FromDegrees(-180));
155        Keyboard.Listen(Key.Space, ButtonState.Down, Ammu, "ammu", alus, plasmacannon);
156        Keyboard.Listen(Key.F4, ButtonState.Pressed, lisaahpta, null);
157    }
158
159    void lisaahpta()
160    {
161        HPlaskuri.Value += 5;
162
163    }
164
165    void ennätyslista()
166    {
167       
168    }
169
170
171    void Ammu(Automobile auto, PlasmaCannon ase)
172    {
173        PhysicsObject ammus = ase.Shoot();
174        if (ammus != null)
175        {
176            ammus.Size *= 5;
177            AddCollisionHandler(ammus, AmmusOsui);
178        }
179    }
180    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
181    {
182        if (kohde.Tag.ToString() == "vastustaja")
183        {
184            rajahdys.AddEffect(kohde.Position, 40);
185            kohde.Destroy();
186            vastuksiaJaljellaLaskuri.Value--;
187            vastuksiaTuhottuLaskuri.Value++;
188        }
189
190        if (kohde == alus)
191        {
192            HPlaskuri.Value--;
193
194        }
195    }
196
197    void kiihdytä(Automobile auto)
198    {
199        auto.Accelerate(Time.SinceLastUpdate.TotalSeconds);
200    }
201    void käänny(Automobile auto, Angle kulma)
202    {
203
204        auto.Turn(kulma, 0.04);
205    }
206
207
208    void LuoVastustaja(double x, double y)
209    {
210
211        PhysicsObject vastustaja;
212        vastustaja = new PhysicsObject(30.0, 40.0);
213        Add(vastustaja);
214        vastustaja.Restitution = 2.0;
215        vastustaja.X = x;
216        vastustaja.Y = y;
217        vastustaja.AngularDamping = 0.1;
218        vastustaja.LinearDamping = 0.1;
219        vastustaja.Tag = "vastustaja";
220        vastuksiaJaljellaLaskuri.Value++;
221        vastustaja.Image = punainenalus;
222
223        PlasmaCannon ase = new PlasmaCannon(1, 1);
224        vastustaja.Add(ase);
225        Timer ampumisajastin = new Timer();
226        ampumisajastin.Trigger += delegate(Timer t) { VihollinenAmpuu(vastustaja, ase); };
227        ampumisajastin.Start();
228        ampumisajastin.Interval = 2.5;
229    }
230
231    void VihollinenAmpuu(PhysicsObject vihollinen, PlasmaCannon ase)
232    {
233        if (HPlaskuri.Value > 0)
234        {
235            ase.Angle = (alus.Position - vihollinen.Position).Angle;
236            PhysicsObject ammus = ase.Shoot();
237            if (ammus != null)
238            {
239                ammus.Size *= 5;
240            }
241            AddCollisionHandler(ammus, AmmusOsui);
242        }
243    }
244}
Note: See TracBrowser for help on using the repository browser.