source: 2017/utsjoki/MihkkalK/Testi/The_piggy_bank_game/The_piggy_bank_game/The_piggy_bank_game/The_piggy_bank_game.cs @ 9223

Revision 9223, 9.6 KB checked in by sieerinn, 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
9class Kassa : PhysicsObject
10{
11    private IntMeter elamaLaskuri = new IntMeter(2, 0, 3);
12    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
13
14    public Kassa(double leveys, double korkeus)
15        : base(leveys, korkeus)
16    {
17        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
18    }
19}
20public class The_piggy_bank_game : PhysicsGame
21{
22    int kassamäärä = 2;
23    DoubleMeter alaspainLaskuri;
24    Timer aikaLaskuri;
25    Image kolikko = LoadImage("kolikko");
26    Image tausta = LoadImage("New Piskel (2)");
27    Image kasa = LoadImage("kassa");
28    Image kasakassaa = LoadImage("kassa 2");
29
30    Font fontti = LoadFont("SpriteFont1");
31   
32    AssaultRifle pelaajan1Ase;
33    Vector viimeisinsuunta;
34    SoundEffect shitgun = LoadSoundEffect("shitgun");
35
36    PhysicsObject pena;
37    Image[] alas = LoadImages("front f1", "front f2");
38    Image[] oikea = LoadImages("side2 f1", "side2 f2");
39    Image[] vasen = LoadImages("side f1", "side f2");
40    Image[] ylös = LoadImages("back f1", "back f2");
41    public override void Begin()
42    {
43        ClearAll();
44        MessageDisplay.Font = fontti;
45        LuoKentta();
46        Level.Background.Image = tausta;
47
48        Level.Background.Width = Screen.Width * 4;
49        Level.Background.Height = Screen.Height * 4;
50
51        kassamäärä = 2;
52
53        SmoothTextures = false;
54        Luopossu();
55        LuoKassoja();
56       
57        LuoPistelaskuri();
58        LuoAikaLaskuri();
59        penaohjaimet();
60        LuoKolikkoAjastin();
61
62
63        // TODO: Kirjoita ohjelmakoodisi tähän
64
65        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
66        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
67
68    }
69
70    void LuoKentta()
71    {
72        //1. Luetaan kuva uuteen ColorTileMappiin, kuvan nimen perässä ei .png-päätettä.
73        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("kentta");
74
75        //2. Kerrotaan mitä aliohjelmaa kutsutaan, kun tietyn värinen pikseli tulee vastaan kuvatiedostossa.
76        ruudut.SetTileMethod(Color.Black, LuoPuu);
77        ruudut.SetTileMethod(Color.Red, LuoMeri);
78
79        //3. Execute luo kentän
80        //   Parametreina leveys ja korkeus
81        ruudut.Execute(30, 30);
82
83    }
84    void LuoPuu(Vector paikka, double leveys, double korkeus)
85    {
86        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys*3, korkeus*4);
87        taso.Position = paikka;
88        taso.CollisionIgnoreGroup = 1;
89        taso.Image = LoadImage("Tree");
90        AddCollisionHandler(taso, "ammus", osupuuhun);
91        Add(taso);
92    }
93    void LuoMeri(Vector paikka, double leveys, double korkeus)
94    {
95        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys * 1, korkeus * 1);
96        taso.Position = paikka;
97        taso.CollisionIgnoreGroup = 1;
98        taso.Image = LoadImage("Tree");
99        AddCollisionHandler(taso, "ammus", osupuuhun);
100        taso.IsVisible = false;
101        Add(taso);
102    }
103
104    void Luopossu()
105    {
106        MediaPlayer.Play("oo");
107        pena = new PhysicsObject(100, 100);
108        pena.Image = alas[0];
109        pena.Shape = Shape.Ellipse;
110        pena.Color = Color.Black;
111        pena.LinearDamping = 0.6;
112        pena.CanRotate = false;
113        AddCollisionHandler(pena, "kassa", osuukassaan);
114        AddCollisionHandler(pena, "koli", OsuuKolikkoon);
115
116        Add(pena);
117        pelaajan1Ase = new AssaultRifle(30, 10);
118        pelaajan1Ase.FireRate = 0.5;
119        pelaajan1Ase.IsVisible = false;
120        pelaajan1Ase.AttackSound = shitgun;
121        pelaajan1Ase.Power.DefaultValue = 1000;
122        pena.Add(pelaajan1Ase);
123        Camera.Follow(pena);
124    }
125    void penaohjaimet()
126    {
127        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", pelaajan1Ase);
128        Keyboard.Listen(Key.S, ButtonState.Down, penaliikunta, "alas", new Vector(0, -10000), new Animation(alas));
129        Keyboard.Listen(Key.S, ButtonState.Released, penaliikuntastop, "alas", new Animation(alas));
130        Keyboard.Listen(Key.W, ButtonState.Down, penaliikunta, "ylös", new Vector(0, 10000), new Animation(ylös));
131        Keyboard.Listen(Key.W, ButtonState.Released, penaliikuntastop, "ylös", new Animation(ylös));
132        Keyboard.Listen(Key.A, ButtonState.Down, penaliikunta, "vasen", new Vector(-10000, 0), new Animation(vasen));
133        Keyboard.Listen(Key.A, ButtonState.Released, penaliikuntastop, "vasen", new Animation(vasen));
134        Keyboard.Listen(Key.D, ButtonState.Down, penaliikunta, "oikea", new Vector(10000, 0), new Animation(oikea));
135        Keyboard.Listen(Key.D, ButtonState.Released, penaliikuntastop, "Oikea", new Animation(oikea));
136    }
137    void penaliikunta(Vector liike, Animation penaminaatio)
138    {
139        pena.Push(liike);
140        viimeisinsuunta = liike;
141        if (pena.Animation != penaminaatio)
142        {
143           
144            pena.Animation = penaminaatio;
145            pena.Animation.FPS = 10;
146            pena.Animation.Start();
147           
148        }
149        pena.Animation.Resume();
150    }
151    void AmmuAseella(AssaultRifle ase)
152    {
153        ase.Angle = viimeisinsuunta.Angle;
154        PhysicsObject ammus = ase.Shoot();
155       
156        if (ammus != null)
157        {
158            ammus.Tag = "ammus";
159            ammus.Size *= 2;
160            //ammus.Image = ...
161            //ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
162           
163        }
164    }
165    void penaliikuntastop(Animation anim)
166    {
167        pena.Animation.Stop();
168    }
169    void osupuuhun(PhysicsObject puu,PhysicsObject ammus)
170    {
171        ammus.Destroy();
172    }
173    IntMeter pisteLaskuri;
174
175    void LuoPistelaskuri()
176    {
177        pisteLaskuri = new IntMeter(100);
178
179        Label pisteNaytto = new Label();
180        pisteNaytto.X = Screen.Right - 100;
181        pisteNaytto.Y = Screen.Bottom + 100;
182        pisteNaytto.TextColor = Color.Black;
183        pisteNaytto.Color = Color.White;
184        pisteNaytto.Font = fontti;
185
186        pisteNaytto.BindTo(pisteLaskuri);
187        Add(pisteNaytto);
188
189        kassalaskuri = new IntMeter(0);
190
191        Label pisteNaytto2 = new Label();
192        pisteNaytto2.X = Screen.Left + 100;
193        pisteNaytto2.Y = Screen.Bottom + 100;
194        pisteNaytto2.TextColor = Color.Black;
195        pisteNaytto2.Color = Color.White;
196        pisteNaytto2.Font = fontti;
197
198        pisteNaytto2.BindTo(kassalaskuri);
199        Add(pisteNaytto2);
200    }
201
202    IntMeter kassalaskuri;
203
204   
205
206    void LuoKassa(double x, double y)
207    {
208        PhysicsObject kassa = new PhysicsObject(100, 100);
209        kassa.Shape = Shape.Rectangle;
210        kassa.X = x;
211        kassa.Y = y;
212        Add(kassa);
213        AddCollisionHandler(kassa, "ammus", kassakatoaa);
214        kassa.Image = kasa;
215        kassa.Tag = "kassa";
216       
217        FollowerBrain aivot = new FollowerBrain(pena);
218        kassa.Brain = aivot;
219        kassa.CanRotate = false;
220    }
221    void osuukassaan(PhysicsObject pena, PhysicsObject kassa)
222    {
223        pisteLaskuri.Value -= 10;
224        kassa.Destroy();
225        if(pisteLaskuri.Value == 0)
226        {
227            pena.Destroy();
228            Label teksti = new Label("Game Over");
229            teksti.Font = fontti;
230            teksti.TextScale *= 2;
231            Add(teksti);
232            Label teksti2 = new Label("Restart in 3 seconds");
233            teksti2.Font = fontti;
234            teksti2.TextScale *= 1;
235            Add(teksti2);
236            teksti2.Y = -100;
237            Timer.SingleShot(3, Begin);
238        };
239    }
240    void kassakatoaa(PhysicsObject kassa, PhysicsObject ammus)
241    {
242        kassa.Image = kasakassaa;
243        kassa.IgnoresCollisionWith(pena);
244        kassa.IgnoresCollisionResponse = true;
245        kassa.Brain.Active = false;
246        kassamäärä++;
247        kassalaskuri.Value++;
248        Timer.SingleShot(3, delegate { kassa.Destroy(); });
249    }
250    void LuoKassoja()
251    {
252
253        for (int i = 0; i < kassamäärä/2; i++)
254        {
255            LuoKassa(RandomGen.NextDouble(-700, 700), RandomGen.NextDouble(-700, 700));
256        }
257    }
258
259    void LuoAikaLaskuri()
260    {
261        alaspainLaskuri = new DoubleMeter(5);
262
263        aikaLaskuri = new Timer();
264        aikaLaskuri.Interval = 0.1;
265        aikaLaskuri.Timeout += LaskeAlaspain;
266        aikaLaskuri.Start();
267
268       
269    }
270
271    void LaskeAlaspain()
272    {
273        alaspainLaskuri.Value -= 0.1;
274
275        if (alaspainLaskuri.Value <= 0)
276        {
277            LuoKassoja();
278            alaspainLaskuri.Reset();
279            // täydennä mitä tapahtuu, kun aika loppuu
280        }
281    }
282    void LuoKolikko(double x, double y)
283    {
284        PhysicsObject kolikko = new PhysicsObject(100, 100);
285        kolikko.Shape = Shape.Rectangle; 
286        kolikko.Image = LoadImage("kolikko");
287        kolikko.Tag = "koli";
288        kolikko.X = x;
289        kolikko.Y = y;
290        Add(kolikko);
291    }
292    void LuoKolikkoja()
293    {
294       
295        {
296            LuoKolikko(RandomGen.NextDouble(-700, 700), RandomGen.NextDouble(-700, 700));
297        }
298    }
299    void LuoKolikkoAjastin()
300    {
301        Timer ajastin = new Timer();
302        ajastin.Interval = 5; // Kuinka usein ajastin "laukeaa" sekunneissa
303        ajastin.Timeout += delegate { LuoKolikkoja(); }; // Aliohjelma, jota kutsutaan 3.5 sekunnin välein
304        ajastin.Start(); // Ajastin pitää aina muistaa käynnistää
305    }
306    void OsuuKolikkoon(PhysicsObject pena, PhysicsObject koli)
307    {
308        pisteLaskuri.Value += 10;
309        koli.Destroy();
310    }
311}
Note: See TracBrowser for help on using the repository browser.