source: 2016/25/MiskaL/Kurlingi/Kurlingi/Kurlingi/Kurlingi.cs @ 7504

Revision 7504, 7.1 KB checked in by koannak, 4 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 Kurlingi : PhysicsGame
10{
11    Image harjanKuva = LoadImage("Harja Harja");
12    PhysicsObject Kiekko;
13    bool onkoLyoty = false;
14    bool onkoLahtenyt = false;
15    IntMeter PisteLaskuri = new IntMeter(0);
16
17    private PhysicsObject vasenKenttaReuna;
18    private PhysicsObject oikeaKenttaReuna;
19
20    PhysicsObject Harja;
21
22    public override void Begin()
23    {
24        LuoAlkuValikko();
25
26    } 
27
28    void LuoAlkuValikko()
29    {
30
31        ClearAll();
32        MultiSelectWindow valikko = new MultiSelectWindow("Valikko", "Start", "Quit");
33        Add(valikko);
34        valikko.AddItemHandler(0, AloitaPeli);
35        valikko.AddItemHandler(1, Exit);
36    }
37
38    void AloitaPeli()
39    {
40        onkoLahtenyt = false;
41        onkoLyoty = false;
42        LuoKentta();
43        LuoPistelaskuri();
44        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
45        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
46        IsMouseVisible = true;
47        Keyboard.Listen(Key.Space, ButtonState.Pressed, LyoKiekkoa, null);
48        Mouse.Listen(MouseButton.Left, ButtonState.Down, Harjaa, null);
49    }
50
51    void LyoKiekkoa()
52    {
53        if (onkoLyoty) return;
54        Vector suunta = Mouse.PositionOnWorld - Kiekko.Position;
55        onkoLyoty = true;
56        Timer.SingleShot(2.2, delegate
57        {
58            Kiekko.Velocity = suunta.Normalize() * 250;
59            onkoLahtenyt = true;
60        });
61       
62
63
64    }
65
66
67    void Harjaa()
68    {
69        if (!onkoLyoty) return;
70        Harja.Position = Mouse.PositionOnWorld;
71
72
73
74    }
75
76
77
78    void LuoKentta()
79    {
80        LuoKiekko(); 
81        LuoMaali();
82        LuoKentanReunat();
83        LuoHarjaJaLaiska();
84    }
85
86    void LuoHarjaJaLaiska()
87    {
88        Harja = PhysicsObject.CreateStaticObject(50, 50);
89        Add(Harja);
90        Harja.Image = harjanKuva;
91        AddCollisionHandler(Harja, "laiska", CollisionHandler.DestroyTarget);
92        for (int i = 0; i < 1000; i++)
93        {
94            Double X = RandomGen.NextDouble(vasenKenttaReuna.X, oikeaKenttaReuna.X);
95            Double Y = RandomGen.NextDouble(-250, 200);
96            TeeLaiska(X, Y);
97        }
98    }
99
100    void LuoKiekko()
101    {
102        Kiekko = new PhysicsObject(50, 50);
103        Add(Kiekko);
104        Kiekko.Shape = Shape.Circle;
105        Kiekko.Color = Color.Gray;
106        Kiekko.X = 0.0;
107        Kiekko.Y = -350.0;
108        Kiekko.CollisionIgnoreGroup = 2;
109        Kiekko.LinearDamping = 1.0;
110    }
111
112    void LuoMaali()
113    {
114        GameObject valkoinenMaaliRinki = new GameObject(200, 200);
115        valkoinenMaaliRinki.Y = 300;
116        Add(valkoinenMaaliRinki, -3);
117        valkoinenMaaliRinki.Shape = Shape.Circle;
118        valkoinenMaaliRinki.Color = Color.White;
119        valkoinenMaaliRinki.Tag = ("valkoinenMaali");
120
121        GameObject sininenMaaliRinki = new GameObject(150, 150);
122        sininenMaaliRinki.Color = Color.Blue;
123        sininenMaaliRinki.Shape = Shape.Circle;
124        sininenMaaliRinki.Position = valkoinenMaaliRinki.Position;
125        Add(sininenMaaliRinki, -3);
126        sininenMaaliRinki.Tag = ("sininenMaali");
127
128        GameObject pinenempiValkoinenMaaliRinki = new GameObject(100, 100);
129        pinenempiValkoinenMaaliRinki.Shape = Shape.Circle;
130        pinenempiValkoinenMaaliRinki.Color = Color.White;
131        Add(pinenempiValkoinenMaaliRinki, -3);
132        pinenempiValkoinenMaaliRinki.Position = valkoinenMaaliRinki.Position;
133        pinenempiValkoinenMaaliRinki.Tag = "pieniValkoinenMaali";
134
135        GameObject punainenMaaliRinki = new GameObject(50, 50);
136        punainenMaaliRinki.Shape = Shape.Circle;
137        punainenMaaliRinki.Color = Color.Red;
138        Add(punainenMaaliRinki, -3);
139        punainenMaaliRinki.Position = valkoinenMaaliRinki.Position;
140        punainenMaaliRinki.Tag = "punainenMaali";
141    }
142
143    void LuoKentanReunat()
144    {
145        vasenKenttaReuna = PhysicsObject.CreateStaticObject(10, 1000);
146        vasenKenttaReuna.Shape = Shape.Rectangle;
147        vasenKenttaReuna.Color = Color.Black;
148        Add(vasenKenttaReuna);
149        vasenKenttaReuna.X = -150;
150
151        oikeaKenttaReuna = PhysicsObject.CreateStaticObject(10, 1000);
152        oikeaKenttaReuna.Shape = Shape.Rectangle;
153        oikeaKenttaReuna.Color = Color.Black;
154        Add(oikeaKenttaReuna);
155        oikeaKenttaReuna.X = 150;
156       
157
158        PhysicsObject vasenReuna = Level.CreateLeftBorder();
159        vasenReuna.Restitution = 1.0;
160        vasenReuna.IsVisible = false;
161
162        PhysicsObject Bottom = Level.CreateBottomBorder();
163        Bottom.Restitution = 1.0;
164        Bottom.IsVisible = false;
165
166        PhysicsObject Top = Level.CreateTopBorder();
167        Top.Restitution = 1.0;
168        Top.IsVisible = false;
169
170        PhysicsObject oikeaReuna = Level.CreateRightBorder();
171        oikeaReuna.Restitution = 1.0;
172        oikeaReuna.IsVisible = false;
173        Camera.ZoomToLevel();
174    }
175
176    protected override void Update(Time time)
177    {
178        base.Update(time);
179        if (Kiekko == null) return;
180        List<GameObject> laiskatPaikat =  GetObjectsAt(Kiekko.Position, "laiska", 0.1);
181        List<GameObject> sininenmaaliPaikka = GetObjectsAt(Kiekko.Position, "sininenMaali", 0.0);
182        if (laiskatPaikat.Count > 0 || sininenmaaliPaikka.Count > 0)
183            Kiekko.LinearDamping = 0.95;
184        else Kiekko.LinearDamping = 1.0;
185        if (onkoLahtenyt && Kiekko.Velocity.Magnitude < 0.1) 
186        {
187            List<GameObject> valkloinenMaali = GetObjectsAt(Kiekko.Position, "valkoinenMaali", 1.0);
188            List<GameObject> pienempivalkoinenMaali = GetObjectsAt(Kiekko.Position, "pieniValkoinenMaali", 1.0);
189            List<GameObject> punainenmaali = GetObjectsAt(Kiekko.Position, "punainenMaali", 1.0);
190            if (punainenmaali.Count > 0) PisteLaskuri.Value += 20;
191            else if (pienempivalkoinenMaali.Count > 0) PisteLaskuri.Value += 15;
192            else if (sininenmaaliPaikka.Count > 0) PisteLaskuri.Value += 10;
193            else if (valkloinenMaali.Count > 0) PisteLaskuri.Value += 5;
194            Kiekko = null;
195            Timer.SingleShot(2.0, LopetaPeli);
196           
197           
198        }
199}
200
201
202    void LopetaPeli()
203    {
204
205        ClearAll();
206        LuoAlkuValikko();
207    }
208
209    void LuoPistelaskuri()
210    { 
211           
212
213            Label pisteNaytto = new Label();
214            pisteNaytto.X = Screen.Left + 100;
215            pisteNaytto.Y = Screen.Top - 100;
216            pisteNaytto.TextColor = Color.Black;
217            pisteNaytto.Color = Color.White;
218
219            pisteNaytto.BindTo(PisteLaskuri);
220            Add(pisteNaytto);
221        }
222
223    void TeeLaiska(Double X, Double Y)
224    {
225        PhysicsObject laiska = new PhysicsObject(20, 20);
226        laiska.CollisionIgnoreGroup = Kiekko.CollisionIgnoreGroup;
227        laiska.Y = Y;
228        laiska.X = X;
229        laiska.Tag = "laiska";
230        Add(laiska, -2);
231
232    }
233}
234
235
236
Note: See TracBrowser for help on using the repository browser.