source: 2012/30/OtsoR/Projekti/Projekti/Projekti/Projekti.cs @ 3819

Revision 3819, 14.9 KB checked in by otelretu, 7 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 Projekti : PhysicsGame
10{
11    Image[] shipimages = new Image[100];
12    Color[] shipcolors = { Color.DarkGray, Color.Silver, Color.DarkOrange, Color.Ultramarine };
13    Color[] shipcolors2 = { Color.Ruby, Color.Azure, Color.Emerald, Color.Emerald };
14
15    String[] weaponnames = { "projectile","laser","plasma" };
16
17    PhysicsObject topedge;
18    PhysicsObject bottomedge;
19    PhysicsObject leftedge;
20    PhysicsObject rightedge;
21   
22    PhysicsObject ship;
23    Weapon weapon;
24    PhysicsObject ship2;
25    Weapon weapon2;
26    PhysicsObject hostile;
27    Weapon hostilew;
28
29    Label number;
30    Label number2;
31    Label weaponlabel;
32    Label weaponlabel2;
33    Widget Aluskuva;
34    Widget Aluskuva2;
35    IntMeter shipimg;
36    IntMeter shipcolor;
37    IntMeter shipwpn;
38    IntMeter shipimg2;
39    IntMeter shipcolor2;
40    IntMeter shipwpn2;
41    int shipcounter;
42    public override void Begin()
43    {
44        for (int i = 1; i <= 100; i++)
45        {
46            shipimages[i-1] = LoadImage("s"+i);
47        }
48        IsMouseVisible = true;
49        MultiSelectWindow numberofplayersmenu = new MultiSelectWindow("Select number of players", "1 Player", "2 Players", "Quit");
50        numberofplayersmenu.ItemSelected += mainmenu;
51        Add(numberofplayersmenu);
52    }
53    void mainmenu(int choice)
54    {
55        switch (choice)
56        {
57            case 0:
58                ClearAll();
59                singleplayer();
60                break;
61            case 1:
62                ClearAll();
63                coop();
64                break;
65            case 2:
66                Exit();
67                break;
68        }
69    }
70    void singleplayer()
71    {
72        Aluskuva = new Widget(50, 50);
73        Aluskuva.X = 0;
74        Aluskuva.Y = 250;
75        Aluskuva.Image = shipimages[0];
76        Add(Aluskuva);
77
78        shipimg = new IntMeter(1, 1, 100);
79        shipimg.Changed += Changeship;
80        shipwpn = new IntMeter(1, 1, 3);
81        shipwpn.Changed += delegate { weaponlabel.Text = weaponnames[shipwpn.Value - 1]; };
82        shipcolor = new IntMeter(1, 1, 4);
83        shipcolor.Changed += Changeship;
84
85        number = new Label();
86        number.BindTo(shipimg);
87        number.X = 0;
88        number.Y = 300;
89        Add(number);
90
91        weaponlabel = new Label(weaponnames[0]);
92        weaponlabel.X = 125;
93        weaponlabel.Y = 125;
94        Add(weaponlabel);
95
96        Slider shiptype = new Slider(550, 10);
97        shiptype.X = 0;
98        shiptype.Y = 200;
99        shiptype.BindTo(shipimg);
100        Slider shipcolour = new Slider(125, 15);
101        shipcolour.X = -125;
102        shipcolour.Y = 150;
103        shipcolour.BindTo(shipcolor);
104        Slider shipweapon = new Slider(125, 15);
105        shipweapon.X = 125;
106        shipweapon.Y = 150;
107        shipweapon.BindTo(shipwpn);
108
109        Add(shiptype);
110        Add(shipcolour);
111        Add(shipweapon);
112
113        List<Label> valikonKohdat;
114        valikonKohdat = new List<Label>(); // Alustetaan lista, johon valikon kohdat tulevat
115        Label kohta1 = new Label("Start");  // Luodaan uusi Label-olio, joka toimii uuden pelin aloituskohtana
116        kohta1.Position = new Vector(0, -100);  // Asetetaan valikon ensimmäinen kohta hieman kentän keskikohdan yläpuolelle
117        valikonKohdat.Add(kohta1);  // Lisätään luotu valikon kohta listaan jossa kohtia säilytetään
118        // Lisätään kaikki luodut kohdat peliin foreach-silmukalla
119        foreach (Label valikonKohta in valikonKohdat)
120        {
121            Add(valikonKohta);
122        }
123        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, singleplayerbase, null);
124    }
125    void Changeship(int vanha, int uusi)
126    {
127        Aluskuva.Image = shipimages[shipimg.Value-1].Clone();
128        Aluskuva.Image.ReplaceColor(Color.White, shipcolors[shipcolor.Value - 1]);
129        Aluskuva.Image.ReplaceColor(Color.Black, shipcolors2[shipcolor.Value - 1]);
130    }
131    void Changeship2(int vanha, int uusi)
132    {
133        Aluskuva2.Image = shipimages[shipimg2.Value - 1].Clone();
134        Aluskuva2.Image.ReplaceColor(Color.White, shipcolors[shipcolor2.Value - 1]);
135        Aluskuva2.Image.ReplaceColor(Color.Black, shipcolors2[shipcolor2.Value - 1]);
136    }
137    void Createship()
138    {
139        ship = new PhysicsObject(16, 16, Shape.FromImage(Aluskuva.Image));
140        ship.Image = Aluskuva.Image;
141        ship.Restitution = 1.0;
142        ship.KineticFriction = 0.0;
143        ship.MomentOfInertia = Double.PositiveInfinity;
144        ship.LinearDamping = 0.95;
145        ship.AngularDamping = 0.95;
146        Add(ship);
147        choice(shipwpn.Value);
148        ship.Add(weapon);
149        ship.CollisionIgnoreGroup = 1;
150    }
151    void Createship2()
152    {
153        ship2 = new PhysicsObject(16, 16, Shape.FromImage(Aluskuva2.Image));
154        ship2.Image = Aluskuva2.Image;
155        ship2.Restitution = 1.0;
156        ship2.KineticFriction = 0.0;
157        ship2.MomentOfInertia = Double.PositiveInfinity;
158        ship2.LinearDamping = 0.95;
159        ship2.AngularDamping = 0.95;
160        Add(ship2);
161        choice2(shipwpn2.Value);
162        ship2.Add(weapon2);
163        ship2.CollisionIgnoreGroup = 1;
164    }
165    void Spawnhostiles()
166    {
167        int shipcounter = 0;
168
169        while (shipcounter < 5)
170        {
171        int hostileship = RandomGen.NextInt(0, 100);
172        double hostiley = 0.0;
173        double hostilex = 0.0;
174        if (RandomGen.NextBool())
175        {
176            hostiley = Level.Bottom + 2 * Level.Top * RandomGen.NextInt(0, 2);
177            hostilex = RandomGen.NextDouble(Level.Left, Level.Right);
178        }
179        else
180        {
181            hostiley = RandomGen.NextDouble(Level.Bottom, Level.Top);
182            hostilex = Level.Left + 2 * Level.Right * RandomGen.NextInt(0, 2);
183
184        }
185        Createhostile(hostileship, hostiley, hostilex);
186        shipcounter++;
187        }
188    }
189    void Createhostile(int randomship, double randomy, double randomx)
190    {
191        hostile = new PhysicsObject(16, 16, Shape.FromImage(shipimages[randomship]));
192        hostile.Image = shipimages[randomship];
193        hostile.Y = randomy;
194        hostile.X = randomx;
195        hostile.Restitution = 1.0;
196        hostile.KineticFriction = 0.0;
197        hostile.MomentOfInertia = Double.PositiveInfinity;
198        hostile.LinearDamping = 0.95;
199        hostile.AngularDamping = 1;
200        hostile.Tag = "hostile";
201        Add(hostile);
202        hostile.CollisionIgnoreGroup = 2;
203        hostile.Image.ReplaceColor(Color.White, Color.Ultramarine);
204        hostile.Image.ReplaceColor(Color.Black, Color.Emerald);
205
206        AssaultRifle hostilew = new AssaultRifle(0, 0);
207        hostilew.ProjectileCollision = weaponhit;
208        hostilew.FireRate = 0.5;
209        hostile.Add(hostilew);
210
211        FollowerBrain brain = new FollowerBrain(ship, ship2);
212        brain.Speed = 20;
213        brain.DistanceFar = 10000;
214        brain.DistanceClose = 200;
215        brain.StopWhenTargetClose = false;
216        brain.TargetClose += delegate { fire(hostilew); };
217        brain.TurnWhileMoving = true;
218        hostile.Brain = brain;
219    }
220    void createedges()
221    {
222        PhysicsObject leftedge = Level.CreateLeftBorder();
223        leftedge.Restitution = 1.0;
224        leftedge.KineticFriction = 0.0;
225        leftedge.IsVisible = false;
226        leftedge.CollisionIgnoreGroup = 2;
227        PhysicsObject rightedge = Level.CreateRightBorder();
228        rightedge.Restitution = 1.0;
229        rightedge.KineticFriction = 0.0;
230        rightedge.IsVisible = false;
231        rightedge.CollisionIgnoreGroup = 2;
232        PhysicsObject topedge = Level.CreateTopBorder();
233        topedge.Restitution = 1.0;
234        topedge.KineticFriction = 0.0;
235        topedge.IsVisible = false;
236        topedge.CollisionIgnoreGroup = 2;
237        PhysicsObject bottomedge = Level.CreateBottomBorder();
238        bottomedge.Restitution = 1.0;
239        bottomedge.IsVisible = false;
240        bottomedge.KineticFriction = 0.0;
241        topedge.CollisionIgnoreGroup = 2;
242    }
243    void coop()
244    {
245        Aluskuva = new Widget(50, 50);
246        Aluskuva.X = -300;
247        Aluskuva.Y = 250;
248        Aluskuva.Image = shipimages[0];
249        Add(Aluskuva);
250
251        Aluskuva2 = new Widget(50, 50);
252        Aluskuva2.X = 300;
253        Aluskuva2.Y = 250;
254        Aluskuva2.Image = shipimages[0];
255        Add(Aluskuva2);
256
257        shipimg = new IntMeter(1, 1, 100);
258        shipimg.Changed += Changeship;
259        shipwpn = new IntMeter(1, 1, 3);
260        shipwpn.Changed += delegate { weaponlabel.Text = weaponnames[shipwpn.Value - 1]; };
261        shipcolor = new IntMeter(1, 1, 4);
262        shipcolor.Changed += Changeship;
263        shipimg2 = new IntMeter(1, 1, 100);
264        shipimg2.Changed += Changeship2;
265        shipwpn2 = new IntMeter(1, 1, 3);
266        shipwpn2.Changed += delegate { weaponlabel2.Text = weaponnames[shipwpn2.Value - 1]; };
267        shipcolor2 = new IntMeter(1, 1, 4);
268        shipcolor2.Changed += Changeship2;
269
270        number = new Label();
271        number.BindTo(shipimg);
272        number.X = -300;
273        number.Y = 300;
274        Add(number);
275
276        number2 = new Label();
277        number2.BindTo(shipimg2);
278        number2.X = 300;
279        number2.Y = 300;
280        Add(number2);
281
282        weaponlabel = new Label(weaponnames[0]);
283        weaponlabel.X = -225;
284        weaponlabel.Y = 125;
285        Add(weaponlabel);
286        weaponlabel2 = new Label(weaponnames[0]);
287        weaponlabel2.X = 425;
288        weaponlabel2.Y = 125;
289        Add(weaponlabel2);
290
291        Slider shiptype = new Slider(550, 10);
292        shiptype.X = -300;
293        shiptype.Y = 200;
294        shiptype.BindTo(shipimg);
295        Slider shipcolour = new Slider(125, 15);
296        shipcolour.X = -425;
297        shipcolour.Y = 150;
298        shipcolour.BindTo(shipcolor);
299        Slider shipweapon = new Slider(125, 15);
300        shipweapon.X = -225;
301        shipweapon.Y = 150;
302        shipweapon.BindTo(shipwpn);
303
304        Slider shiptype2 = new Slider(550, 10);
305        shiptype2.X = 300;
306        shiptype2.Y = 200;
307        shiptype2.BindTo(shipimg2);
308        Slider shipcolour2 = new Slider(125, 15);
309        shipcolour2.X = 225;
310        shipcolour2.Y = 150;
311        shipcolour2.BindTo(shipcolor2);
312        Slider shipweapon2 = new Slider(125, 15);
313        shipweapon2.X = 425;
314        shipweapon2.Y = 150;
315        shipweapon2.BindTo(shipwpn2);
316
317        Add(shiptype);
318        Add(shipcolour);
319        Add(shipweapon);
320        Add(shiptype2);
321        Add(shipcolour2);
322        Add(shipweapon2);
323
324        List<Label> valikonKohdat2;
325        valikonKohdat2 = new List<Label>(); // Alustetaan lista, johon valikon kohdat tulevat
326        Label kohta2 = new Label("Start");  // Luodaan uusi Label-olio, joka toimii uuden pelin aloituskohtana
327        kohta2.Position = new Vector(0, -100);  // Asetetaan valikon ensimmäinen kohta hieman kentän keskikohdan yläpuolelle
328        valikonKohdat2.Add(kohta2);  // Lisätään luotu valikon kohta listaan jossa kohtia säilytetään
329        // Lisätään kaikki luodut kohdat peliin foreach-silmukalla
330        foreach (Label valikonKohta2 in valikonKohdat2)
331        {
332            Add(valikonKohta2);
333        }
334        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, coopbase, null);
335    }
336    void choice(int choice)
337    {
338        switch (choice)
339        {
340            case 1:
341                weapon = new AssaultRifle(0, 0);
342                weapon.ProjectileCollision = weaponhit;
343                weapon.FireRate = 4;
344                break;
345            case 2:
346                weapon = new LaserGun(0, 0);
347                weapon.ProjectileCollision = weaponhit;
348                weapon.FireRate = 0.5;
349                break;
350            case 3:
351                weapon = new PlasmaCannon(0, 0);
352                weapon.ProjectileCollision = weaponhit;
353                weapon.FireRate = 2;
354                break;
355        }
356    }
357    void choice2(int choice)
358    {
359        switch (choice)
360        {
361            case 1:
362                weapon2 = new AssaultRifle(0, 0);
363                weapon2.ProjectileCollision = weaponhit;
364                weapon2.FireRate = 4;
365                break;
366            case 2:
367                weapon2 = new LaserGun(0, 0);
368                weapon2.ProjectileCollision = weaponhit;
369                weapon2.FireRate = 0.5;
370                break;
371            case 3:
372                weapon2 = new PlasmaCannon(0, 0);
373                weapon2.ProjectileCollision = weaponhit;
374                weapon2.FireRate = 2;
375                break;
376        }
377    }
378    void fire(Weapon ase)
379    {
380        PhysicsObject ammus = ase.Shoot();
381
382
383        if (ammus != null)
384        {
385             //Add(ammus, 2);
386            //ammus.Size *= 3;
387            //ammus.Image =
388            //ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
389        }
390    }
391
392    void weaponhit(PhysicsObject ammus, PhysicsObject kohde)
393    {
394        if (kohde.Tag == "hostile") kohde.Destroy();
395        ammus.Destroy();
396    }
397
398    void Controlsship1()
399    {
400        Keyboard.Listen(Key.W, ButtonState.Down, thrust, "", 1.0, ship);
401        Keyboard.Listen(Key.S, ButtonState.Down, thrust, "", -1.0, ship);
402        Keyboard.Listen(Key.A, ButtonState.Down, tilt, "", 1.0, ship);
403        Keyboard.Listen(Key.D, ButtonState.Down, tilt, "", -1.0, ship);
404        Keyboard.Listen(Key.F, ButtonState.Down, fire, "", weapon);
405        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
406    }
407    void Controlsship2()
408    {
409        Keyboard.Listen(Key.NumPad8, ButtonState.Down, thrust, "", 1.0, ship2);
410        Keyboard.Listen(Key.NumPad5, ButtonState.Down, thrust, "", -1.0, ship2);
411        Keyboard.Listen(Key.NumPad4, ButtonState.Down, tilt, "", 1.0, ship2);
412        Keyboard.Listen(Key.NumPad6, ButtonState.Down, tilt, "", -1.0, ship2);
413        Keyboard.Listen(Key.Add, ButtonState.Down, fire, "", weapon2);
414    }
415    void thrust(double direction, PhysicsObject ship)
416    {
417        Vector shipdirection = Vector.FromLengthAndAngle(100.0*direction, ship.Angle);
418        ship.Push(shipdirection);
419    }
420    void tilt(double direction, PhysicsObject ship)
421    {
422        ship.AngularAcceleration = 10.0*direction;
423    }
424    void singleplayerbase()
425    {
426        ClearAll();
427        Level.BackgroundColor = Color.Black;
428        Level.CreateBorders();
429        Camera.ZoomToLevel();
430        Createship();
431        Controlsship1();
432    }
433    void coopbase()
434    {
435        ClearAll();
436        Level.BackgroundColor = Color.Black;
437        Level.CreateBorders();
438        Camera.ZoomToLevel();
439        Createship();
440        Createship2();
441        Spawnhostiles();
442        Controlsship1();
443        Controlsship2();
444
445        Timer a = new Timer();
446        a.Interval = 5;
447        a.Timeout += Spawnhostiles;
448        a.Start();
449    }
450}
Note: See TracBrowser for help on using the repository browser.