source: 2017/utsjoki/NilláN/Speargear/Speargear/Speargear/Speargear.cs @ 9212

Revision 9212, 8.6 KB checked in by sieerinn, 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
9class Pelaaja : PhysicsObject
10{
11    private IntMeter elamaLaskuri = new IntMeter(3, 0, 3);
12    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
13    public Vector suunta;
14    public bool saalyödä = true;
15    public bool puolustaa = false;
16
17    public Pelaaja(double leveys, double korkeus)
18        : base(leveys, korkeus)
19    {
20        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
21    }
22}
23
24public class Speargear : PhysicsGame
25{
26    Pelaaja pelaaja1;
27    Pelaaja pelaaja2;
28
29    SoundEffect osumanääni = LoadSoundEffect("robux");
30
31    Vector nopeusYlos = new Vector(0, 10000);
32    Vector nopeusAlas = new Vector(0, -10000);
33    Vector nopeusOikea = new Vector(10000, 0);
34    Vector nopeusVasen = new Vector(-10000, 0);
35
36    PhysicsObject vasenReuna;
37    PhysicsObject oikeaReuna;
38    PhysicsObject ylaReuna;
39    PhysicsObject alaReuna;
40
41    Image ylösKuva = LoadImage("ylös");
42    Image alasKuva = LoadImage("alas");
43    Image oikeaKuva = LoadImage("oikea");
44    Image vasenKuva = LoadImage("peliukko");
45    Image taustakuva = LoadImage("taso");
46    Image hitsplat = LoadImage("hit");
47
48
49    public override void Begin()
50    {
51        SmoothTextures = false;
52        LuoKentta();
53        Ohjaimet();
54        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
55        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
56    }
57
58    Pelaaja LuoPelaaja(double x, double y)
59    {
60        Pelaaja pelaaja = new Pelaaja(50, 50);
61        pelaaja.Shape = Shape.Rectangle;
62        Add(pelaaja);
63        pelaaja.X = x;
64        pelaaja.Y = y;
65        pelaaja.LinearDamping = 0.4;
66        pelaaja.CanRotate = false;
67        pelaaja.Image = LoadImage("peliukko");
68
69        ProgressBar elamaPalkki = new ProgressBar(50, 10);
70        elamaPalkki.X = 0;
71        elamaPalkki.Y = 50;
72        elamaPalkki.BindTo(pelaaja.ElamaLaskuri);
73        pelaaja.Add(elamaPalkki);
74
75        elamaPalkki.BarColor = Color.FromHexCode("64FE2E");
76        elamaPalkki.Color = Color.Red;
77
78        return pelaaja;
79
80
81    }
82
83    void LuoKentta()
84    {
85        pelaaja1 = LuoPelaaja(370, 250);
86        pelaaja2 = LuoPelaaja(-370, -250);
87
88        AddCollisionHandler<Pelaaja, PhysicsObject>(pelaaja1, "heitto2", (a, b) => osuuKeihääseen(a, b, 1, LoadImage("hit")));
89        AddCollisionHandler<Pelaaja, PhysicsObject>(pelaaja2, "heitto1", (a,b) => osuuKeihääseen(a, b, 1, LoadImage("hit")));
90
91        AddCollisionHandler<Pelaaja, PhysicsObject>(pelaaja1, "keihäs2", (a, b) => osuuKeihääseen(a, b, 2, LoadImage("hit2")));
92        AddCollisionHandler<Pelaaja, PhysicsObject>(pelaaja2, "keihäs1", (a, b) => osuuKeihääseen(a, b, 2, LoadImage("hit2")));
93
94        vasenReuna = Level.CreateLeftBorder();
95        oikeaReuna = Level.CreateRightBorder();
96        ylaReuna = Level.CreateTopBorder();
97        alaReuna = Level.CreateBottomBorder();
98
99        Level.Background.Image = taustakuva;
100        Level.Background.FitToLevel();
101
102        //MediaPlayer.Play("");
103
104    }
105
106    void PelaajaLiike(Pelaaja pelaaja, Vector nopeus, Image uusikuva)
107    {
108        pelaaja.Push(nopeus);
109        pelaaja.suunta = nopeus;
110        pelaaja.Image = uusikuva;
111
112    }
113
114
115
116    void Ohjaimet()
117    {
118        Keyboard.Listen(Key.Up, ButtonState.Down, PelaajaLiike, null, pelaaja1, nopeusYlos, ylösKuva);
119        Keyboard.Listen(Key.Down, ButtonState.Down, PelaajaLiike, null, pelaaja1, nopeusAlas, alasKuva);
120        Keyboard.Listen(Key.Right, ButtonState.Down, PelaajaLiike, null, pelaaja1, nopeusOikea, oikeaKuva);
121        Keyboard.Listen(Key.Left, ButtonState.Down, PelaajaLiike, null, pelaaja1, nopeusVasen, vasenKuva);
122
123        Keyboard.Listen(Key.M, ButtonState.Pressed, Lyönti, null, pelaaja1, "keihäs1");
124        Keyboard.Listen(Key.Comma, ButtonState.Pressed, torjunta, null, pelaaja1);
125        Keyboard.Listen(Key.Period, ButtonState.Pressed, heitäKeihäs, null, pelaaja1, "heitto1");
126
127
128        Keyboard.Listen(Key.W, ButtonState.Down, PelaajaLiike, null, pelaaja2, nopeusYlos, ylösKuva);
129        Keyboard.Listen(Key.S, ButtonState.Down, PelaajaLiike, null, pelaaja2, nopeusAlas, alasKuva);
130        Keyboard.Listen(Key.D, ButtonState.Down, PelaajaLiike, null, pelaaja2, nopeusOikea, oikeaKuva);
131        Keyboard.Listen(Key.A, ButtonState.Down, PelaajaLiike, null, pelaaja2, nopeusVasen, vasenKuva);
132
133        Keyboard.Listen(Key.Y, ButtonState.Pressed, Lyönti, null, pelaaja2, "keihäs2");
134        Keyboard.Listen(Key.U, ButtonState.Pressed, torjunta, null, pelaaja2);
135        Keyboard.Listen(Key.T, ButtonState.Pressed, heitäKeihäs, null, pelaaja2, "heitto2");
136
137    }
138
139    void Lyönti(Pelaaja pelaaja, string tägi)
140    {
141        if (!pelaaja.saalyödä)
142            return;
143        pelaaja.saalyödä = false;
144        Timer.SingleShot(1, delegate { pelaaja.saalyödä = true; });
145
146        PhysicsObject keihäs = new PhysicsObject(50, 10);
147        keihäs.Image = LoadImage("keppi");
148        keihäs.Position = pelaaja.Position;
149        keihäs.CanRotate = false;
150        keihäs.LifetimeLeft = TimeSpan.FromSeconds(0.1);
151        keihäs.IgnoresCollisionResponse = false;
152        keihäs.Tag = tägi;
153        Add(keihäs);
154
155        keihäs.Angle = pelaaja.suunta.Angle;
156
157        double paikka = 0;
158
159        Timer ajastin = new Timer();
160        ajastin.Interval = 0.02;
161        ajastin.Timeout += delegate
162        {
163            paikka += 10;
164            keihäs.Position = pelaaja.Position + pelaaja.suunta.Normalize() * paikka;
165            keihäs.Velocity = pelaaja.Velocity;
166            keihäs.Angle = pelaaja.suunta.Angle;
167        };
168        ajastin.Start();
169
170    }
171
172    void osuuKeihääseen(Pelaaja puolustaja, PhysicsObject keihäs, int vahinko, Image splatkuva)
173    {
174        Pelaaja hyökkääjä = (puolustaja == pelaaja1) ? pelaaja2 : pelaaja1;
175        bool vastakkain = hyökkääjä.suunta.Angle.MainDirection == (puolustaja.suunta.Angle + Angle.FromDegrees(180)).MainDirection;
176
177        if (puolustaja.puolustaa && vastakkain)
178        {
179            hyökkääjä.Hit((puolustaja.Position - keihäs.Position).Normalize() * -5000);
180        }
181        else
182        {
183            GameObject hitsplat = new GameObject(30, 30);
184            hitsplat.Image = splatkuva;
185            puolustaja.Add(hitsplat);
186            hitsplat.LifetimeLeft = TimeSpan.FromSeconds(1);
187            osumanääni.Play();
188            puolustaja.ElamaLaskuri.Value -= vahinko;
189            puolustaja.Hit((puolustaja.Position - keihäs.Position).Normalize() * 5000);
190        }
191       
192
193    }
194
195    void torjunta(Pelaaja pelaaja)
196    {
197        if (!pelaaja.saalyödä)
198            return;
199        pelaaja.saalyödä = false;
200        pelaaja.puolustaa = true;
201        Timer.SingleShot(1, delegate { pelaaja.saalyödä = true; });
202
203        PhysicsObject keihäs = new PhysicsObject(50, 10);
204        keihäs.Image = LoadImage("keppi");
205        keihäs.Position = pelaaja.Position + pelaaja.suunta.Normalize() * 25;
206        keihäs.CanRotate = false;
207        keihäs.LifetimeLeft = TimeSpan.FromSeconds(0.4);
208        keihäs.IgnoresCollisionResponse = true;
209        keihäs.Destroyed += delegate { pelaaja.puolustaa = false; };
210        Add(keihäs);
211
212        keihäs.Angle = pelaaja.suunta.Angle + Angle.FromDegrees(90);
213
214        Timer ajastin2 = new Timer();
215        ajastin2.Interval = 0.02;
216        ajastin2.Timeout += delegate
217        {
218            keihäs.Position = pelaaja.Position + pelaaja.suunta.Normalize() * 30;
219            keihäs.Velocity = pelaaja.Velocity;
220            keihäs.Angle = pelaaja.suunta.Angle + Angle.FromDegrees(90);
221        };
222        ajastin2.Start();
223
224
225    }
226
227    void heitäKeihäs(Pelaaja pelaaja, String tag)
228    {
229        if (!pelaaja.saalyödä)
230            return;
231        pelaaja.saalyödä = false;
232        Timer.SingleShot(1, delegate { pelaaja.saalyödä = true; });
233
234        PhysicsObject keihäs = new PhysicsObject(50, 10);
235        keihäs.Image = LoadImage("keppi");
236        keihäs.Position = pelaaja.Position + pelaaja.suunta.Normalize() * 60;
237        keihäs.CanRotate = false;
238        keihäs.LifetimeLeft = TimeSpan.FromSeconds(3);
239        keihäs.IgnoresCollisionResponse = false;
240        keihäs.Tag = tag;
241        Add(keihäs);
242
243        keihäs.Angle = pelaaja.suunta.Angle;
244        keihäs.Velocity = pelaaja.suunta * 0.2;
245
246        AddCollisionHandler(keihäs, osu);
247
248
249    }
250
251    void osu(PhysicsObject keihäs, PhysicsObject kohde)
252    {
253        keihäs.Destroy();
254
255    }
256
257}
258
Note: See TracBrowser for help on using the repository browser.