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

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