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

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