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

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