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

Revision 4275, 9.0 KB checked in by jeniemel, 10 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.Color = Color.Black;
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            pelaaja1.Destroy();
141            pisteLaskuri2.Value++;
142            Timer ajastin = new Timer();
143            ajastin.Interval = 3;
144            ajastin.Timeout += delegate
145            {
146                LisaaPelaaja1(paikka, leveys, korkeus);
147                ClearControls();
148                LisaaNappaimet();
149            };
150            ajastin.Start(1);
151        };
152        Add(pelaaja1);
153    }
154
155    void LisaaPelaaja2(Vector paikka, double leveys, double korkeus)
156    {
157        pelaaja2 = new Pelaaja(leveys, korkeus);
158        pelaaja2.Position = paikka;
159        pelaaja2.Mass = 4.0;
160        pelaaja2.CanRotate = false;
161        pelaaja2.CollisionIgnoreGroup = 3;
162        pelaaja2.Image = pelaajanKuva2;
163        pelaaja2.Elamat.LowerLimit += delegate { 
164            pelaaja2.Destroy();
165            pisteLaskuri1.Value++;
166
167            Explosion rajahdys = new Explosion(50);
168            rajahdys.Position = pelaaja2.Position;
169            pelaaja2.Destroy();
170            Add(rajahdys);
171         
172            Timer ajastin = new Timer();
173            ajastin.Interval = 3;
174            ajastin.Timeout += delegate
175            {
176                LisaaPelaaja2(paikka, leveys, korkeus);
177                ClearControls();
178                LisaaNappaimet();
179            };
180            ajastin.Start(1);
181        };
182        Add(pelaaja2);
183    }
184
185
186
187
188    void LisaaNappaimet()
189    {
190        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
191        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
192
193
194        LisaaNappaimetPelaaja1lle();
195        LisaaNappaimetPelaaja2lle();
196    }
197
198
199    void LisaaNappaimetPelaaja1lle()
200    {
201       
202        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, new Vector(-100, 0));
203        Keyboard.Listen(Key.Left, ButtonState.Released, Liikuta, "Liikkuu vasemmalle", pelaaja1,Vector.Zero);
204        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja1,new Vector(100, 0));
205        Keyboard.Listen(Key.Right, ButtonState.Released, Liikuta, "Liikkuu oikealle", pelaaja1, Vector.Zero);
206        Keyboard.Listen(Key.Up, ButtonState.Down, Liikuta, "Liikkuu ylös", pelaaja1,new Vector(0, 100));
207        Keyboard.Listen(Key.Up, ButtonState.Released, Liikuta, "Liikkuu ylös", pelaaja1, Vector.Zero);
208        Keyboard.Listen(Key.Down, ButtonState.Down, Liikuta, "Liikkuu alas", pelaaja1,new Vector(0, -100));
209        Keyboard.Listen(Key.Down, ButtonState.Released, Liikuta, "Liikkuu alas", pelaaja1, Vector.Zero);
210        Keyboard.Listen(Key.End, ButtonState.Pressed, Ammu, "Ampuu aseella", pelaaja1);
211    }
212
213    void LisaaNappaimetPelaaja2lle()
214    {
215        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, new Vector(-100, 0));
216        Keyboard.Listen(Key.A, ButtonState.Released, Liikuta, "Liikkuu vasemmalle", pelaaja2, Vector.Zero);
217        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja2, new Vector(100, 0));
218        Keyboard.Listen(Key.D, ButtonState.Released, Liikuta, "Liikkuu oikealle", pelaaja2, Vector.Zero);
219        Keyboard.Listen(Key.W, ButtonState.Down, Liikuta, "Liikkuu ylös", pelaaja2, new Vector(0, 100));
220        Keyboard.Listen(Key.W, ButtonState.Released, Liikuta, "Liikkuu ylös", pelaaja2, Vector.Zero);
221        Keyboard.Listen(Key.S, ButtonState.Down, Liikuta, "Liikkuu alas", pelaaja2, new Vector(0, -100));
222        Keyboard.Listen(Key.S, ButtonState.Released, Liikuta, "Liikkuu alas", pelaaja2, Vector.Zero);
223        Keyboard.Listen(Key.LeftControl, ButtonState.Pressed, Ammu, "Ampuu aseella", pelaaja2);
224    }
225
226
227
228    void Ammu(PhysicsObject ampuja)
229    {
230        if (ampuja == null || ampuja.IsDestroyed) return;
231
232        PhysicsObject ammus = new PhysicsObject(9, 9);
233        ammus.LifetimeLeft = TimeSpan.FromSeconds(4);
234        ammus.Position = ampuja.Position;
235        ammus.IgnoresGravity = true;
236        AddCollisionHandler(ammus, AmmusOsui);
237        ammus.CollisionIgnoreGroup = ampuja.CollisionIgnoreGroup;
238        ammus.Hit(Vector.FromLengthAndAngle(500, ampuja.Angle));
239
240        ammus.Color = Color.Yellow;
241        Add(ammus);
242    }
243
244    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
245    {
246        ammus.Destroy();
247        //kohde.Destroy();
248        if (kohde.Equals(pelaaja1))
249            pelaaja1.Elamat.Value--;
250        if (kohde.Equals(pelaaja2))
251            pelaaja2.Elamat.Value--;
252    }
253
254
255    void Liikuta(PhysicsObject hahmo, Vector suunta)
256    {
257        hahmo.Velocity = suunta;
258        if (!(suunta.Equals(Vector.Zero)))
259        hahmo.Angle = suunta.Angle;
260    }
261
262
263    public int pMax { get; set; }
264}
265
266public class Pelaaja : PhysicsObject
267{
268    IntMeter elamat;
269    public IntMeter Elamat { get { return elamat; } set { elamat = value; } }
270    public Pelaaja(double leveys, double korkeus)
271        : base(leveys, korkeus)
272    {
273        elamat = new IntMeter(5, 0, 5);
274    }
275
276
277}
Note: See TracBrowser for help on using the repository browser.