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

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