source: 2017/27/OttoK/1v1MeBitch/1v1MeBitch/_1v1MeBitch/_1v1MeBitch.cs @ 8938

Revision 8938, 9.2 KB checked in by npo17_47, 2 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 _1v1MeBitch : PhysicsGame
10{
11    const double nopeus = 200;
12    const double hyppyNopeus = 750;
13    const int RUUDUN_KOKO = 40;
14
15    Pelaaja pelaaja1;
16    Pelaaja pelaaja2;
17
18    Image ohjuksenKuva = LoadImage("ohjus");
19    Image pelaaja1kuva = LoadImage("pelaaja1");
20    Image pelaaja2kuva = LoadImage("pelaaja2");
21    Image tikkaankuva = LoadImage("tikas");
22    Image taustakuva = LoadImage("takajeejee");
23
24    public override void Begin()
25    {
26        Gravity = new Vector(0, -1000);
27
28        LuoKentta();
29        LisaaNappaimet();
30        IsFullScreen = false;
31
32        pelaaja1.Ammuslaskuri = LuoAmmuslaskuri(Screen.Right - 100, Screen.Bottom + 100);
33        pelaaja2.Ammuslaskuri = LuoAmmuslaskuri(Screen.Left + 100, Screen.Bottom + 100);
34
35        Camera.ZoomToLevel();
36        Camera.StayInLevel = true;
37    }
38
39    void LuoKentta()
40    {
41        TileMap kentta = TileMap.FromLevelAsset("kentta1");
42        kentta.SetTileMethod('#', LisaaTaso);
43        kentta.SetTileMethod('T', LisaaTikas);
44        kentta.SetTileMethod('N', LisaaPelaaja1);
45        kentta.SetTileMethod('M', LisaaPelaaja2);
46        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
47        Level.CreateBorders();
48        Level.Background.Image = taustakuva;
49
50        Timer ajastin = new Timer();
51        ajastin.Interval = 2;
52        ajastin.Timeout += LuoShrine;
53        ajastin.Start();
54    }
55    void LisaaTaso(Vector paikka, double leveys, double korkeus)
56    {
57        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
58        taso.Position = paikka;
59        taso.Color = Color.Green;
60        Add(taso);
61    }
62
63    void LisaaTikas(Vector paikka, double leveys, double korkeus)
64    {
65        //Luodaan tikkaat.
66        Tikas tikas = new Tikas(leveys, korkeus);
67        tikas.MakeOneWay();
68        tikas.AloitusPaikka = paikka;
69        tikas.MakeStatic();
70        tikas.Color = Color.Beige;
71        tikas.Position = paikka;
72        tikas.Tag = "tikas";
73        Add(tikas);
74    }
75
76
77    Pelaaja LisaaPelaaja(Vector paikka, double leveys, double korkeus, Color vari, Vector laskurinpaikka)
78    {
79        Pelaaja pelaaja = new Pelaaja(leveys, korkeus);
80        pelaaja.Position = paikka;
81        pelaaja.Mass = 4.0;
82        pelaaja.Color = vari;
83        pelaaja.Ammu = Ammu1;
84        pelaaja.Tag = "pelaaja";
85        Add(pelaaja);
86
87        ProgressBar elamaPalkki = new ProgressBar(150, 20);
88        elamaPalkki.Position = laskurinpaikka;
89        elamaPalkki.BindTo(pelaaja.ElamaLaskuri);
90        Add(elamaPalkki);
91
92        AddCollisionHandler<Pelaaja, PhysicsObject>(pelaaja, "shrine", PowerUp);
93        return pelaaja;
94    }
95
96    void LisaaPelaaja1(Vector paikka, double leveys, double korkeus)
97    {
98        pelaaja1 = LisaaPelaaja(paikka, leveys, korkeus, Color.HotPink, new Vector(Screen.Right - 150, Screen.Top - 20));
99        pelaaja1.Image = pelaaja1kuva;
100    }
101
102    void LisaaPelaaja2(Vector paikka, double leveys, double korkeus)
103    {
104        pelaaja2 = LisaaPelaaja(paikka, leveys, korkeus, Color.JungleGreen, new Vector(Screen.Left + 150, Screen.Top - 20));
105        pelaaja2.Image = pelaaja2kuva;
106    }
107
108    void LisaaNappaimet()
109    {
110        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
111        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
112
113        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
114        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
115        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
116
117        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, -nopeus);
118        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, nopeus);
119        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2, hyppyNopeus);
120
121        Keyboard.Listen(Key.Down, ButtonState.Down, Alas, "Pelaaja menee alas", pelaaja1, hyppyNopeus, "tikas");
122        Keyboard.Listen(Key.S, ButtonState.Down, Alas, "Pelaaja menee alas", pelaaja2, hyppyNopeus, "tikas2");
123
124        Keyboard.Listen(Key.NumPad0, ButtonState.Pressed, Ammu, "Ammu ohjus", pelaaja1);
125        Keyboard.Listen(Key.LeftControl, ButtonState.Pressed, Ammu, "Ammu ohjus", pelaaja2);
126    }
127    IntMeter LuoAmmuslaskuri(double sijaintix, double sijaintiy)
128    {
129        IntMeter ammuslaskuri = new IntMeter(4, 0, 4);
130
131        Label pisteNaytto = new Label();
132        pisteNaytto.X = sijaintix;
133        pisteNaytto.Y = sijaintiy;
134        pisteNaytto.TextColor = Color.Black;
135        pisteNaytto.Color = Color.White;
136        pisteNaytto.BindTo(ammuslaskuri);
137        Add(pisteNaytto);
138
139        ammuslaskuri.LowerLimit += delegate
140        {
141            Timer.SingleShot(4.0, delegate
142            {
143                ammuslaskuri.Value = ammuslaskuri.MaxValue;
144            });
145        };
146        return ammuslaskuri;
147    }
148
149    void Liikuta(Pelaaja hahmo, double nopeus)
150    {
151        hahmo.Walk(nopeus);
152    }
153    void Hyppaa(Pelaaja hahmo, double nopeus)
154    {
155        hahmo.Jump(nopeus);
156    }
157    void Alas(Pelaaja hahmo, double nopeus, string tag)
158    {
159        List<GameObject> tikkaat = GetObjectsAt(new Vector(hahmo.X, hahmo.Bottom - 5));
160        bool voiPudota = false;
161        foreach (GameObject tikas in tikkaat)
162        {
163            if (tikas.Tag.ToString() == "tikas")
164            {
165                voiPudota = true;
166                break;
167            }
168        }
169        if (!hahmo.IsAboutToFall() && voiPudota)
170        {
171            hahmo.Y -= 50;
172        }
173    }
174
175    void Ammu(Pelaaja hahmo)
176    {
177        if (hahmo.IsDestroyed || hahmo.Ammuslaskuri.Value == 0)
178            return;
179
180        hahmo.Ammu(hahmo);
181    }
182
183    void Ammu1(Pelaaja hahmo)
184    {
185        PhysicsObject ohjus = new PhysicsObject(40, 12);
186        ohjus.Position = hahmo.Position;
187        ohjus.X += hahmo.FacingDirection.GetVector().X * 60;
188        ohjus.Color = hahmo.Color;
189        ohjus.Image = ohjuksenKuva;
190        ohjus.CollisionIgnoreGroup = 1;
191        ohjus.IgnoresGravity = true;
192        ohjus.IgnoresCollisionResponse = true;
193        Add(ohjus);
194
195        hahmo.Ammuslaskuri.AddValue(-1);
196
197        ohjus.Hit(hahmo.FacingDirection.GetVector() * 1200);
198        if (ohjus.Velocity.X < 0) ohjus.Angle += Angle.FromDegrees(180);
199        AddCollisionHandler(ohjus, delegate (PhysicsObject a, PhysicsObject b)
200        {
201            TuhoaOhjus(a, b, hahmo);
202        });
203    }
204    void Ammu2(Pelaaja hahmo)
205    {
206        PhysicsObject laaseri = new PhysicsObject(70, 5);
207        laaseri.Position = hahmo.Position;
208        laaseri.X += hahmo.FacingDirection.GetVector().X * 70;
209        laaseri.Color = hahmo.Color;
210        laaseri.CollisionIgnoreGroup = 1;
211        laaseri.IgnoresGravity = true;
212        laaseri.IgnoresCollisionResponse = true;
213        Add(laaseri);
214
215        hahmo.Ammuslaskuri.AddValue(-1);
216
217        laaseri.Hit(hahmo.FacingDirection.GetVector() * 4000);
218        if (laaseri.Velocity.X < 0) laaseri.Angle += Angle.FromDegrees(180);
219        AddCollisionHandler(laaseri, delegate (PhysicsObject a, PhysicsObject b)
220        {
221            TuhoaLaser(a, b, hahmo);
222        });
223     }
224    void Ammu3(Pelaaja hahmo)
225    {
226
227    }
228    void TuhoaOhjus(PhysicsObject ohjus, PhysicsObject kohde, PhysicsObject ampuja)
229    {
230        if (kohde.Tag != "tikas")
231        {
232
233            Explosion rajahdys = new Explosion(110);
234            rajahdys.Force = 15;
235            rajahdys.Position = ohjus.Position;
236            Add(rajahdys);
237            rajahdys.ShockwaveReachesObject += delegate (IPhysicsObject rajahdyksenKohde, Vector shokki)
238            {
239                Pelaaja kohdePelaaja = rajahdyksenKohde as Pelaaja;
240                if (kohdePelaaja != null && kohdePelaaja != ampuja)
241                {
242                    kohdePelaaja.ElamaLaskuri.Value--;
243
244                    if (kohdePelaaja.IsDestroyed || kohdePelaaja.IsDestroying) Timer.SingleShot(2.0, ConfirmExit);
245                }
246            };
247            ohjus.Destroy();
248        }
249    }
250    void LuoShrine()
251    {
252        PhysicsObject shrine = new PhysicsObject(40, 40);
253        Vector powerupPiste = Level.GetRandomPosition();
254        shrine.Position = powerupPiste;
255        shrine.Color = Color.Red;
256        shrine.Shape = Shape.Circle;
257        shrine.IgnoresGravity = true;
258        shrine.Tag = "shrine";
259        Add(shrine);
260    }
261    void PowerUp(Pelaaja pelaaja, PhysicsObject shrine)
262    {
263        shrine.Destroy();
264
265        Action<Pelaaja> vanha = pelaaja.Ammu;
266        while(pelaaja.Ammu == vanha)
267            pelaaja.Ammu = RandomGen.SelectOne<Action<Pelaaja>>(Ammu1, Ammu2, Ammu3);
268    }
269    void TuhoaLaser(PhysicsObject laaseri, PhysicsObject kohde, PhysicsObject ampuja)
270    {
271        if (kohde.Tag != "pelaaja") return;
272        Pelaaja p = (Pelaaja)kohde;
273        p.ElamaLaskuri.AddValue(-2);
274        laaseri.Destroy();
275
276        if (p.IsDestroyed || p.IsDestroying) Timer.SingleShot(2.0, ConfirmExit);
277    }
278}
Note: See TracBrowser for help on using the repository browser.