source: 2012/JAO/Miiro/Tykkipeli/Tykkipeli/Tykkipeli/Tykkipeli.cs @ 2734

Revision 2734, 6.6 KB checked in by anonymous, 8 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 Tykkipeli : PhysicsGame
10{
11    ScoreList topLista = new ScoreList(10, false, 0);
12   
13    Timer aikaLaskuri;
14
15    Image pelaajakuva = LoadImage("cartman");
16    Image tukinkuva = LoadImage("tukki");
17    List<Label> valikonKohdat;
18    int rajahdykset = 0;
19    PhysicsObject pallo;
20    PhysicsObject tukki;
21    public override void Begin()
22    {
23        if (DataStorage.Exists("pisteet.xml"))
24            topLista = DataStorage.Load<ScoreList>(topLista, "pisteet.xml");
25
26        Valikko();
27
28
29        Camera.Zoom(1.4);
30
31       
32
33
34
35  }
36   
37    void  LuoKentta()
38    {
39        CollisionShapeParameters parametres = new CollisionShapeParameters();
40       
41        parametres.DistanceGridSpacing = 3;
42        parametres.MaxVertexDistance = 3;
43
44            pallo = new PhysicsObject(20.0, 20.0,Shape.Rectangle,parametres);       
45            pallo.X = -Level.Width * 3 + 150;       
46            pallo.Y = 300.0;       
47            pallo.Restitution = 1.0;       
48            pallo.KineticFriction = 0.0;       
49            //pallo.MomentOfInertia = Double.PositiveInfinity;
50            pallo.Image = pelaajakuva; 
51            pallo.Collided += JokuTormasi;
52            pallo.Mass = 100;
53            Add(pallo);
54    }
55
56    void Ammu()
57    {
58        //pallo.Color = Color.Red;
59        Timer tukkilaskuri = new Timer();
60        tukkilaskuri.Interval = 0.1;
61        tukki.Move(new Vector(400,600));
62        tukkilaskuri.Start();
63        tukkilaskuri.Timeout += Pysaytatukki;
64        Camera.Zoom(0.7);
65        //tukki.Hit(new Vector(1000, 200));
66        //Vector paikkaKentalla = Mouse.PositionOnWorld;
67        //Vector pallonsijainti = pallo.Position;
68        //pallo.Hit(new Vector(paikkaKentalla.X - pallonsijainti.X, paikkaKentalla.Y - pallonsijainti.Y));
69    }
70    void Pysaytatukki()
71    {
72        tukki.Stop();
73    }
74    void JokuTormasi(IPhysicsObject tormaaja, IPhysicsObject kohde)
75    {
76        if (kohde.Tag == "maa")
77        {
78            Explosion rajahdys = new Explosion(10);
79            rajahdys.Position = pallo.Position;
80            rajahdys.Force = 1000;
81            rajahdykset++;
82            if (3 <= rajahdykset)
83            {
84                double aikaaKulunut = aikaLaskuri.SecondCounter.Value;
85                double matka = 0;
86                if (pallo.X >= 0) { matka = Level.Width * 3 + pallo.X; }
87                else matka = Level.Width * 3 + pallo.X;
88                ClearAll();
89                HighScoreWindow topIkkuna = new HighScoreWindow(
90                             "Parhaat pisteet",
91                             "Onneksi olkoon, pääsit listalle pisteillä %p! Syötä nimesi:",
92                             topLista, matka);
93                topIkkuna.Closed += TallennaPisteet;
94                Add(topIkkuna);
95                aikaLaskuri.Stop();
96
97            }
98
99            Add(rajahdys);
100            Camera.Zoom(Camera.ZoomFactor + 0.2);
101        }
102    }
103
104
105    void AloitaPeli()
106    {
107
108        ClearAll();
109        rajahdykset = 0;
110        //double[] korkeudet = new double[] { 10, 59, 26, 78, 80, 17, 69, 20, 250, 40, 90, 80, 65, 42, 56, 85, 25, 79, 79, 78, 57, 20, 45, 25, 76, 85, 69, 69, 76, 58 };
111        double[] korkeudet = new double[50];
112        korkeudet[0] = 10;
113        korkeudet[1] = 10;
114        korkeudet[2] = 10;
115        korkeudet[3] = 10;
116        korkeudet[4] = 10;
117        for (int i = 5; i < korkeudet.Length; i++) 
118        {
119            korkeudet[i] = RandomGen.NextInt(10, 150);
120        }
121        Surface maasto2 = new Surface(Level.Width*6, korkeudet, 1.0);
122        maasto2.Y = +25;
123        maasto2.Color = Color.White;
124        maasto2.Tag = "maa";
125        Add(maasto2);
126
127        //Level.CreateBorders(false);
128        PhysicsObject vasen = PhysicsObject.CreateStaticObject(10, 1500);
129        vasen.X = -Level.Width * 3;
130        Add(vasen);
131        PhysicsObject oikea = PhysicsObject.CreateStaticObject(10, 1500);
132        oikea.X = Level.Width * 3;
133        Add(oikea);
134        PhysicsObject lahto = PhysicsObject.CreateStaticObject(500, 10);
135        lahto.X = -Level.Width * 3 + 250;
136        lahto.Y = -30;
137        Add(lahto);
138
139           
140
141
142        LuoAikaLaskuri();
143       
144
145        Surface maasto = new Surface(Level.Width*6, korkeudet, 1.0);
146        Add(maasto);
147
148       
149
150        Gravity = new Vector(0.0, -500.0);
151
152        tukki = new PhysicsObject(100,25);
153        tukki.Angle = Angle.FromDegrees(40);
154        tukki.X = -Level.Width * 3 + 100;
155        tukki.IgnoresGravity = true;
156        tukki.Mass = 1000;
157        tukki.Image = tukinkuva;
158        tukki.CanRotate = false;
159        Add(tukki);
160        LuoKentta();
161        Camera.Follow(pallo);
162
163        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, Ammu, "Ammu aseella.");
164        Mouse.IsCursorVisible = true;
165    }
166
167    void Valikko()
168    {
169        ClearAll();
170        valikonKohdat = new List<Label>();
171
172        Label kohta1 = new Label("Aloita uusi peli");
173        kohta1.Position = new Vector(0, 40);
174        valikonKohdat.Add(kohta1);
175
176        Label kohta2 = new Label("Lopeta");
177        kohta2.Position = new Vector(0, -40);
178        valikonKohdat.Add(kohta2);
179
180        foreach (Label valikonKohta in valikonKohdat)
181        {
182            Add(valikonKohta);
183        }
184
185        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, AloitaPeli, null);
186        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Exit, null);
187
188        Mouse.IsCursorVisible = true;
189        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
190        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "");
191    }
192
193    void ValikossaLiikkuminen(AnalogState hiirenTila)
194    {
195        foreach (Label kohta in valikonKohdat)
196        {
197            if (Mouse.IsCursorOn(kohta))
198            {
199                kohta.TextColor = Color.Red;
200            }
201            else
202            {
203                kohta.TextColor = Color.Black;
204            }
205
206        }
207    }
208
209
210    void LuoAikaLaskuri()
211    {
212        aikaLaskuri = new Timer();
213        aikaLaskuri.Start();
214
215        Label aikaNaytto = new Label();
216        aikaNaytto.TextColor = Color.White;
217        aikaNaytto.DecimalPlaces = 1;
218        aikaNaytto.BindTo(aikaLaskuri.SecondCounter);
219        aikaNaytto.X = 500;
220        aikaNaytto.Y = 500;
221        Add(aikaNaytto);
222    }
223
224
225    void TallennaPisteet(Window sender)
226    {
227        DataStorage.Save<ScoreList>(topLista, "pisteet.xml");
228        Valikko();
229    }
230
231
232}
233
Note: See TracBrowser for help on using the repository browser.