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

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