source: 2013/26/JesseN/CallOfTwo/CallOfTwo/CallOfTwo/CallOfTwo.cs @ 4319

Revision 4319, 9.2 KB checked in by jeniemel, 8 years ago (diff)

Talletus.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class CallOfTwo : 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    // int pelaajaa = 1;
18
19    Image pelaajanKuva = LoadImage("pelaaja1a");
20    Image pelaajanKuva2 = LoadImage("pelaaja2a");
21    Image taustaKuva = LoadImage("oikeatausta");
22
23    IntMeter pisteLaskuri1;
24    IntMeter pisteLaskuri2;
25
26    public override void Begin()
27    {
28        valikko();
29        LuoPistelaskurit();
30    }
31
32    void valikko()
33    {
34
35        MultiSelectWindow alkuvalikko = new MultiSelectWindow("Pelin Alkuvalikko",
36            "Aloita Peli", "Ohjeet", "Lopeta");
37        alkuvalikko.Color = Color.Black;
38        alkuvalikko.SelectionColor = Color.Gray;
39        Add(alkuvalikko);
40        alkuvalikko.AddItemHandler(0, AloitaPeli);
41        alkuvalikko.AddItemHandler(1, NaytaOhjeet);
42        alkuvalikko.AddItemHandler(2, Exit);
43    }
44
45    void NaytaOhjeet()
46    {
47        MessageWindow tekstia = new MessageWindow("Ohjeet");
48        tekstia.Closed += delegate { valikko(); };
49        Label osio = new Label("Pelaaja 1");
50        osio.Color = Color.Red;
51        tekstia.Add(osio);
52
53        Label osio2 = new Label("nuolinäppäimet liikkuaksesi ja End ampuaksesi");
54        tekstia.Add(osio2);
55
56        Label osio4 = new Label("pelaaja2");
57        osio4.Color = Color.Blue;
58        tekstia.Add(osio4);
59
60        Label osio5 = new Label("WASD liikkuaksesi ja G ampuaksesi");
61        tekstia.Add(osio5);
62
63        Add(tekstia);
64    }
65
66
67    void AloitaPeli()
68    {
69        //Gravity = new Vector(0, 1000);
70
71        LuoKentta();
72        LisaaNappaimet();
73        //Level.BackgroundColor = Color.Gray;
74        Level.Background.Image = taustaKuva;
75        Level.Background.FitToLevel();
76        //Camera.ZoomFactor = 1.2;
77        //Camera.StayInLevel = true;
78        //Camera.Follow(pelaaja1, pelaaja2);
79        Camera.ZoomToLevel();
80    }
81
82
83    void LuoKentta()
84    {
85        ColorTileMap kentta = ColorTileMap.FromLevelAsset("areena2");
86        kentta.SetTileMethod("000000", LisaaTaso);
87        kentta.SetTileMethod("FF0000", LisaaPelaaja1);
88        kentta.SetTileMethod("0026FF", LisaaPelaaja2);
89        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
90        Level.CreateBorders();
91    }
92
93
94    void LisaaTaso(Vector paikka, double leveys, double korkeus)
95    {
96        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
97        taso.Position = paikka;
98        taso.Image = LoadImage("palikantekstuuri");
99        Add(taso);
100    }
101
102    void LuoPistelaskurit()
103    {
104        pisteLaskuri1 = LuoPistelaskuri(pisteLaskuri1, Color.Red, Screen.Left + 100, Screen.Top - 100);
105        pisteLaskuri2 = LuoPistelaskuri(pisteLaskuri2, Color.Blue, Screen.Right - 100, Screen.Top - 100);
106    }
107
108    IntMeter LuoPistelaskuri(IntMeter pisteLaskuri, Color taustavari, double x, double y)
109    {
110        pisteLaskuri = new IntMeter(0);
111
112        Label pisteNaytto = new Label();
113        pisteNaytto.X = x;
114        pisteNaytto.Y = y;
115        pisteNaytto.TextColor = Color.White;
116        pisteNaytto.Color = taustavari;
117        pisteNaytto.Title = "Pisteet";
118        pisteNaytto.BindTo(pisteLaskuri);
119        Add(pisteNaytto);
120        return pisteLaskuri;
121    }
122
123
124    void LisaaPelaaja1(Vector paikka, double leveys, double korkeus)
125    {
126        pelaaja1 = new Pelaaja(leveys, korkeus);
127        pelaaja1.Position = paikka;
128        pelaaja1.CanRotate = false;
129        pelaaja1.Mass = 4.0;
130        pelaaja1.CollisionIgnoreGroup = 2;
131        pelaaja1.Destroyed += delegate
132        {
133            Explosion rajahdys = new Explosion(50);
134            rajahdys.Position = pelaaja1.Position;
135            pelaaja1.Destroy();
136            Add(rajahdys);
137        };
138        pelaaja1.Image = pelaajanKuva;
139        pelaaja1.Elamat.LowerLimit += delegate
140        {
141            pelaaja1.Destroy();
142            pisteLaskuri2.Value++;
143            Timer ajastin = new Timer();
144            ajastin.Interval = 3;
145            ajastin.Timeout += delegate
146            {
147                LisaaPelaaja1(paikka, leveys, korkeus);
148                ClearControls();
149                LisaaNappaimet();
150            };
151            ajastin.Start(1);
152        };
153        Add(pelaaja1);
154    }
155
156    void LisaaPelaaja2(Vector paikka, double leveys, double korkeus)
157    {
158        pelaaja2 = new Pelaaja(leveys, korkeus);
159        pelaaja2.Position = paikka;
160        pelaaja2.Mass = 4.0;
161        pelaaja2.CanRotate = false;
162        pelaaja2.CollisionIgnoreGroup = 3;
163        pelaaja2.Image = pelaajanKuva2;
164        pelaaja2.Elamat.LowerLimit += delegate
165        {
166            pelaaja2.Destroy();
167            pisteLaskuri1.Value++;
168
169            Explosion rajahdys = new Explosion(50);
170            rajahdys.Position = pelaaja2.Position;
171            pelaaja2.Destroy();
172            Add(rajahdys);
173
174            Timer ajastin = new Timer();
175            ajastin.Interval = 3;
176            ajastin.Timeout += delegate
177            {
178                LisaaPelaaja2(paikka, leveys, korkeus);
179                ClearControls();
180                LisaaNappaimet();
181            };
182            ajastin.Start(1);
183        };
184        Add(pelaaja2);
185    }
186
187
188
189
190    void LisaaNappaimet()
191    {
192        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
193        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
194
195
196        LisaaNappaimetPelaaja1lle();
197        LisaaNappaimetPelaaja2lle();
198    }
199
200
201    void LisaaNappaimetPelaaja1lle()
202    {
203
204        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, new Vector(-150, 0));
205        Keyboard.Listen(Key.Left, ButtonState.Released, Liikuta, "Liikkuu vasemmalle", pelaaja1, Vector.Zero);
206        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja1, new Vector(150, 0));
207        Keyboard.Listen(Key.Right, ButtonState.Released, Liikuta, "Liikkuu oikealle", pelaaja1, Vector.Zero);
208        Keyboard.Listen(Key.Up, ButtonState.Down, Liikuta, "Liikkuu ylös", pelaaja1, new Vector(0, 150));
209        Keyboard.Listen(Key.Up, ButtonState.Released, Liikuta, "Liikkuu ylös", pelaaja1, Vector.Zero);
210        Keyboard.Listen(Key.Down, ButtonState.Down, Liikuta, "Liikkuu alas", pelaaja1, new Vector(0, -150));
211        Keyboard.Listen(Key.Down, ButtonState.Released, Liikuta, "Liikkuu alas", pelaaja1, Vector.Zero);
212        Keyboard.Listen(Key.End, ButtonState.Pressed, Ammu, "Ampuu aseella", pelaaja1);
213    }
214
215    void LisaaNappaimetPelaaja2lle()
216    {
217        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, new Vector(-150, 0));
218        Keyboard.Listen(Key.A, ButtonState.Released, Liikuta, "Liikkuu vasemmalle", pelaaja2, Vector.Zero);
219        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja2, new Vector(150, 0));
220        Keyboard.Listen(Key.D, ButtonState.Released, Liikuta, "Liikkuu oikealle", pelaaja2, Vector.Zero);
221        Keyboard.Listen(Key.W, ButtonState.Down, Liikuta, "Liikkuu ylös", pelaaja2, new Vector(0, 150));
222        Keyboard.Listen(Key.W, ButtonState.Released, Liikuta, "Liikkuu ylös", pelaaja2, Vector.Zero);
223        Keyboard.Listen(Key.S, ButtonState.Down, Liikuta, "Liikkuu alas", pelaaja2, new Vector(0, -150));
224        Keyboard.Listen(Key.S, ButtonState.Released, Liikuta, "Liikkuu alas", pelaaja2, Vector.Zero);
225        Keyboard.Listen(Key.LeftControl, ButtonState.Pressed, Ammu, "Ampuu aseella", pelaaja2);
226    }
227
228
229
230    void Ammu(Pelaaja pelaaja)
231    {
232        if (pelaaja == null || pelaaja.IsDestroyed) return;
233        if (!pelaaja.VoikoAmpua) return;
234        pelaaja.VoikoAmpua = false;
235        PhysicsObject ammus = new PhysicsObject(15, 15);
236        ammus.LifetimeLeft = TimeSpan.FromSeconds(4);
237        ammus.Position = pelaaja.Position;
238        ammus.IgnoresGravity = true;
239        AddCollisionHandler(ammus, AmmusOsui);
240        ammus.CollisionIgnoreGroup = pelaaja.CollisionIgnoreGroup;
241        ammus.Hit(Vector.FromLengthAndAngle(500, pelaaja.Angle));
242        ammus.Image = LoadImage("ammus");
243        Add(ammus);
244        Timer.SingleShot(0.5, delegate { pelaaja.VoikoAmpua = true; });
245    }
246
247    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
248    {
249        ammus.Destroy();
250        //kohde.Destroy();
251        if (kohde.Equals(pelaaja1))
252            pelaaja1.Elamat.Value--;
253        if (kohde.Equals(pelaaja2))
254            pelaaja2.Elamat.Value--;
255    }
256
257
258    void Liikuta(PhysicsObject hahmo, Vector suunta)
259    {
260        hahmo.Velocity = suunta;
261        if (!(suunta.Equals(Vector.Zero)))
262            hahmo.Angle = suunta.Angle;
263    }
264
265
266    public int pMax { get; set; }
267}
268
269public class Pelaaja : PhysicsObject
270{
271    IntMeter elamat;
272    public IntMeter Elamat { get { return elamat; } set { elamat = value; } }
273    public bool VoikoAmpua = true;
274    public Pelaaja(double leveys, double korkeus)
275        : base(leveys, korkeus)
276    {
277        elamat = new IntMeter(3, 0, 3);
278    }
279
280
281}
Note: See TracBrowser for help on using the repository browser.