source: joonas_s/Pong/Peli.cs @ 236

Revision 236, 4.3 KB checked in by josojakk, 10 years ago (diff)
Line 
1#region Usings
2using System;
3using System.Collections.Generic;
4using System.Linq;
5using Microsoft.Xna.Framework;
6using Microsoft.Xna.Framework.Audio;
7using Microsoft.Xna.Framework.Content;
8using Microsoft.Xna.Framework.Graphics;
9using Microsoft.Xna.Framework.Input;
10using Microsoft.Xna.Framework.Media;
11using Jypeli;
12using Jypeli.ScreenObjects;
13using Jypeli.Assets;
14using AdvanceMath;
15using Physics2DDotNet;
16using Physics2DDotNet.Shapes;
17#endregion
18
19namespace Pong
20{
21    public class Peli : PhysicsGame
22    {
23        Vector2D nopeusYlos = new Vector2D(0, 200);
24        Vector2D nopeusAlas = new Vector2D(0, -200);
25
26        PhysicsObject pallo;
27        PhysicsObject maila1;
28        PhysicsObject maila2;
29
30        protected override void LoadContent()
31        {
32            Level = LuoKentta();
33            AsetaOhjaimet();
34            AloitaPeli();
35        }
36
37        Level LuoKentta()
38        {
39            Level kentta = new Level(this);
40            kentta.BackgroundColor = Color.Black;
41
42            IShape ympyra = Shapes.CreateCircle(200.0);
43            pallo = new PhysicsObject(10.0, ympyra);
44            pallo.X = -200.0;
45            pallo.Y = 0.0;
46            pallo.Restitution = 1.1;
47            kentta.Objects.Add(pallo);
48
49            maila1 = LuoMaila(kentta.Left + 20.0, 0.0, kentta);
50            maila2 = LuoMaila(kentta.Right - 20.0, 0.0, kentta);
51
52            kentta.CreateBorder(1.0, false);
53
54            return kentta;
55        }
56
57        PhysicsObject LuoMaila(double x, double y, Level kentta)
58        {
59            IShape suorakulmio = Shapes.CreateRectangle(20.0, 100.0);
60            PhysicsObject maila = PhysicsObject.CreateStaticObject(suorakulmio);
61            maila.X = x;
62            maila.Y = y;
63            maila.Restitution = 1.1;
64            kentta.Objects.Add(maila);
65            return maila;
66        }
67
68        void AloitaPeli()
69        {
70            Vector2D impulssi = new Vector2D(20000.0, 2000.0);
71            pallo.Hit(impulssi);
72        }
73
74        void AsetaOhjaimet()
75        {
76            Controls.Listen(Keys.A, ButtonPosition.Down, AsetaNopeus, "Pelaaja 1: Liikuta mailaa ylös", maila1, nopeusYlos);
77            Controls.Listen(Keys.A, ButtonPosition.Released, AsetaNopeus, null, maila1, Vector2D.Zero);
78            Controls.Listen(Keys.Z, ButtonPosition.Down, AsetaNopeus, "Pelaaja 1: Liikuta mailaa alas", maila1, nopeusAlas);
79            Controls.Listen(Keys.Z, ButtonPosition.Released, AsetaNopeus, null, maila1, Vector2D.Zero);
80
81            Controls.Listen(Keys.Up, ButtonPosition.Down, AsetaNopeus, "Pelaaja 2: Liikuta mailaa ylös", maila2, nopeusYlos);
82            Controls.Listen(Keys.Up, ButtonPosition.Released, AsetaNopeus, null, maila2, Vector2D.Zero);
83            Controls.Listen(Keys.Down, ButtonPosition.Down, AsetaNopeus, "Pelaaja 2: Liikuta mailaa alas", maila2, nopeusAlas);
84            Controls.Listen(Keys.Down, ButtonPosition.Released, AsetaNopeus, null, maila2, Vector2D.Zero);
85
86            AsetaGamePadOhjaimet(PlayerIndex.One, maila1);
87            AsetaGamePadOhjaimet(PlayerIndex.Two, maila2);
88        }
89
90        void AsetaGamePadOhjaimet(PlayerIndex pelaajaNumero, PhysicsObject maila)
91        {
92            Controls.Listen(pelaajaNumero, Buttons.DPadUp, ButtonPosition.Down, AsetaNopeus, "Liikuta mailaa ylös", maila, nopeusYlos);
93            Controls.Listen(pelaajaNumero, Buttons.DPadUp, ButtonPosition.Released, AsetaNopeus, null, maila, Vector2D.Zero);
94            Controls.Listen(pelaajaNumero, Buttons.DPadDown, ButtonPosition.Down, AsetaNopeus, "Liikuta mailaa alas", maila, nopeusAlas);
95            Controls.Listen(pelaajaNumero, Buttons.DPadDown, ButtonPosition.Released, AsetaNopeus, null, maila, Vector2D.Zero);
96        }
97
98        bool AsetaNopeus(ControlEvent e)
99        {
100            PhysicsObject maila = e.Parameter0.ToPhysicsObject();
101            Vector2D nopeus = e.Parameter1.ToVector2D();
102
103            if ((nopeus.Y < 0) && (maila.Y < Level.Bottom))
104            {
105                maila.Velocity = Vector2D.Zero;
106                return false;
107            }
108            if ((nopeus.Y > 0) && (maila.Y > Level.Top))
109            {
110                maila.Velocity = Vector2D.Zero;
111                return false;
112            }
113
114            maila.Velocity = nopeus;
115
116            return false;
117        }
118    }
119}
120
Note: See TracBrowser for help on using the repository browser.