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

Revision 9181, 7.5 KB checked in by sieerinn, 22 months 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    AssaultRifle pelaajan1Ase;
31    Vector viimeisinsuunta;
32    SoundEffect shitgun = LoadSoundEffect("shitgun");
33
34    PhysicsObject pena;
35    Image[] alas = LoadImages("front f1", "front f2");
36    Image[] oikea = LoadImages("side2 f1", "side2 f2");
37    Image[] vasen = LoadImages("side f1", "side f2");
38    Image[] ylös = LoadImages("back f1", "back f2");
39    public override void Begin()
40    {
41        LuoKentta();
42        Level.Background.Image = tausta;
43
44        Level.Background.Width = Screen.Width * 4;
45        Level.Background.Height = Screen.Height * 4;
46
47        SmoothTextures = false;
48        Luopossu();
49        LuoKassoja();
50        LuoKolikko();
51        LuoPistelaskuri();
52        LuoAikaLaskuri();
53        penaohjaimet();
54               
55
56        // TODO: Kirjoita ohjelmakoodisi tähän
57
58        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
59        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
60
61    }
62
63    void LuoKentta()
64    {
65        //1. Luetaan kuva uuteen ColorTileMappiin, kuvan nimen perässä ei .png-päätettä.
66        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("kentta");
67
68        //2. Kerrotaan mitä aliohjelmaa kutsutaan, kun tietyn värinen pikseli tulee vastaan kuvatiedostossa.
69        ruudut.SetTileMethod(Color.Black, LuoPuu);
70
71        //3. Execute luo kentän
72        //   Parametreina leveys ja korkeus
73        ruudut.Execute(30, 30);
74
75    }
76    void LuoPuu(Vector paikka, double leveys, double korkeus)
77    {
78        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys*3, korkeus*4);
79        taso.Position = paikka;
80        taso.CollisionIgnoreGroup = 1;
81        taso.Image = LoadImage("Tree");
82        AddCollisionHandler(taso, "ammus", osupuuhun);
83        Add(taso);
84    }
85    void Luopossu()
86    {
87        MediaPlayer.Play("skan_krale_-_no_glory_ft_mime_drama_-NlloEEEoTZ8_fmt22");
88        pena = new PhysicsObject(100, 100);
89        pena.Shape = Shape.Ellipse;
90        pena.Color = Color.Black;
91        pena.LinearDamping = 0.6;
92        pena.CanRotate = false;
93        AddCollisionHandler(pena, "kassa", osuukassaan);
94
95        Add(pena);
96        pelaajan1Ase = new AssaultRifle(30, 10);
97        pelaajan1Ase.FireRate = 0.5;
98        pelaajan1Ase.IsVisible = false;
99        pelaajan1Ase.AttackSound = shitgun;
100        pelaajan1Ase.Power.DefaultValue = 1000;
101        pena.Add(pelaajan1Ase);
102        Camera.Follow(pena);
103    }
104    void penaohjaimet()
105    {
106        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", pelaajan1Ase);
107        Keyboard.Listen(Key.S, ButtonState.Down, penaliikunta, "alas", new Vector(0, -10000), new Animation(alas));
108        Keyboard.Listen(Key.S, ButtonState.Released, penaliikuntastop, "alas", new Animation(alas));
109        Keyboard.Listen(Key.W, ButtonState.Down, penaliikunta, "ylös", new Vector(0, 10000), new Animation(ylös));
110        Keyboard.Listen(Key.W, ButtonState.Released, penaliikuntastop, "ylös", new Animation(ylös));
111        Keyboard.Listen(Key.A, ButtonState.Down, penaliikunta, "vasen", new Vector(-10000, 0), new Animation(vasen));
112        Keyboard.Listen(Key.A, ButtonState.Released, penaliikuntastop, "vasen", new Animation(vasen));
113        Keyboard.Listen(Key.D, ButtonState.Down, penaliikunta, "oikea", new Vector(10000, 0), new Animation(oikea));
114        Keyboard.Listen(Key.D, ButtonState.Released, penaliikuntastop, "Oikea", new Animation(oikea));
115    }
116    void penaliikunta(Vector liike, Animation penaminaatio)
117    {
118        pena.Push(liike);
119        viimeisinsuunta = liike;
120        if (pena.Animation != penaminaatio)
121        {
122           
123            pena.Animation = penaminaatio;
124            pena.Animation.FPS = 10;
125            pena.Animation.Start();
126           
127        }
128        pena.Animation.Resume();
129    }
130    void AmmuAseella(AssaultRifle ase)
131    {
132        ase.Angle = viimeisinsuunta.Angle;
133        PhysicsObject ammus = ase.Shoot();
134       
135        if (ammus != null)
136        {
137            ammus.Tag = "ammus";
138            ammus.Size *= 2;
139            //ammus.Image = ...
140            //ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
141           
142        }
143    }
144    void penaliikuntastop(Animation anim)
145    {
146        pena.Animation.Stop();
147    }
148    void osupuuhun(PhysicsObject puu,PhysicsObject ammus)
149    {
150        ammus.Destroy();
151    }
152    IntMeter pisteLaskuri;
153
154    void LuoPistelaskuri()
155    {
156        pisteLaskuri = new IntMeter(100);
157
158        Label pisteNaytto = new Label();
159        pisteNaytto.X = Screen.Left + 100;
160        pisteNaytto.Y = Screen.Top - 100;
161        pisteNaytto.TextColor = Color.Black;
162        pisteNaytto.Color = Color.White;
163
164        pisteNaytto.BindTo(pisteLaskuri);
165        Add(pisteNaytto);
166    }
167    void LuoKassa(double x, double y)
168    {
169        PhysicsObject kassa = new PhysicsObject(100, 100);
170        kassa.Shape = Shape.Rectangle;
171        kassa.X = x;
172        kassa.Y = y;
173        Add(kassa);
174        AddCollisionHandler(kassa, "ammus", kassakatoaa);
175        kassa.Image = kasa;
176        kassa.Tag = "kassa";
177       
178        FollowerBrain aivot = new FollowerBrain(pena);
179        kassa.Brain = aivot;
180        kassa.CanRotate = false;
181    }
182    void osuukassaan(PhysicsObject pena, PhysicsObject kassa)
183    {
184        pisteLaskuri.Value -= 10;
185        kassa.Destroy();
186        if(pisteLaskuri.Value == 0) { pena.Destroy(); };
187    }
188    void kassakatoaa(PhysicsObject kassa, PhysicsObject ammus)
189    {
190        kassa.Image = kasakassaa;
191        kassa.IgnoresCollisionWith(pena);
192        kassa.IgnoresCollisionResponse = true;
193        kassa.Brain.Active = false;
194        kassamäärä++;
195        Timer.SingleShot(3, delegate { kassa.Destroy(); });
196    }
197    void LuoKassoja()
198    {
199
200        for (int i = 0; i < kassamäärä/2; i++)
201        {
202            LuoKassa(RandomGen.NextDouble(-1000, 1000), RandomGen.NextDouble(-1000, 1000));
203        }
204    }
205
206    void LuoAikaLaskuri()
207    {
208        alaspainLaskuri = new DoubleMeter(5);
209
210        aikaLaskuri = new Timer();
211        aikaLaskuri.Interval = 0.1;
212        aikaLaskuri.Timeout += LaskeAlaspain;
213        aikaLaskuri.Start();
214
215       
216    }
217
218    void LaskeAlaspain()
219    {
220        alaspainLaskuri.Value -= 0.1;
221
222        if (alaspainLaskuri.Value <= 0)
223        {
224            LuoKassoja();
225            alaspainLaskuri.Reset();
226            // täydennä mitä tapahtuu, kun aika loppuu
227        }
228    }
229    void LuoKolikko()
230    {
231        PhysicsObject kolikko = new PhysicsObject(100, 100);
232        kolikko.Shape = Shape.Rectangle;
233        Add(kolikko);
234        kolikko.Image = LoadImage("kolikko");
235        kolikko.Tag = "koli";
236    }
237}
Note: See TracBrowser for help on using the repository browser.