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

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