source: kyosti_s/Pong/Peli.cs @ 248

Revision 248, 4.3 KB checked in by kykasalo, 11 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        PhysicsObject pallo;
24        PhysicsObject maila1;
25        PhysicsObject maila2;
26        Vector2D nopeusYlos = new Vector2D(0, 200);
27        Vector2D nopeusAlas = new Vector2D(0, -200);
28
29        protected override void LoadContent()
30        {
31            Level = LuoKentta();
32            AsetaOhjaimet();
33            AloitaPeli();
34        }
35
36        Level LuoKentta()
37        {
38            Level kentta = new Level(this);
39            kentta.BackgroundColor = Color.Black;
40
41            IShape ympyra = Shapes.CreateCircle(20.0);
42            pallo = new PhysicsObject(10.0, ympyra);
43            pallo.X = -200.0;
44            pallo.Y = 0.0;
45            pallo.Restitution = 1.0;
46            kentta.Objects.Add(pallo);
47
48            maila1 = LuoMaila(kentta.Left + 20.0, 0.0, kentta);
49            maila2 = LuoMaila(kentta.Right - 20.0, 0.0, kentta);
50
51            kentta.CreateBorder(1.0, false);
52            return kentta;
53        }
54
55        void AloitaPeli()
56        {
57            Vector2D impulssi = new Vector2D(2000.0, 0.0);
58            pallo.Hit(impulssi);
59        }
60
61        PhysicsObject LuoMaila(double x, double y, Level kentta)
62        {
63            IShape suorakulmio = Shapes.CreateRectangle(20.0, 100.0);
64            PhysicsObject maila = PhysicsObject.CreateStaticObject(suorakulmio);
65            maila.X = x;
66            maila.Y = y;
67            maila.Restitution = 1.0;
68            kentta.Objects.Add(maila);
69            return maila;
70        }
71
72        void AsetaOhjaimet()
73        {
74            Controls.Listen(Keys.A, ButtonPosition.Down, AsetaNopeus, "Pelaaja 1: Liikuta mailaa ylös", maila1, nopeusYlos);
75            Controls.Listen(Keys.A, ButtonPosition.Released, AsetaNopeus, null, maila1, Vector2D.Zero);
76            Controls.Listen(Keys.Z, ButtonPosition.Down, AsetaNopeus, "Pelaaja 1: Liikuta mailaa ylös", maila1, nopeusAlas);
77            Controls.Listen(Keys.Z, ButtonPosition.Released, AsetaNopeus, null, maila1, Vector2D.Zero);
78
79            Controls.Listen(Keys.Up, ButtonPosition.Down, AsetaNopeus, "Pelaaja 2: Liikuta mailaa ylös", maila2, nopeusYlos);
80            Controls.Listen(Keys.Up, ButtonPosition.Released, AsetaNopeus, null, maila2, Vector2D.Zero);
81            Controls.Listen(Keys.Down, ButtonPosition.Down, AsetaNopeus, "Pelaaja 2: Liikuta mailaa ylös", maila2, nopeusAlas);
82            Controls.Listen(Keys.Down, ButtonPosition.Released, AsetaNopeus, null, maila2, Vector2D.Zero);
83
84            AsetaGamePadOhjaimet(PlayerIndex.One, maila1);
85            AsetaGamePadOhjaimet(PlayerIndex.Two, maila2);
86        }
87
88        void AsetaGamePadOhjaimet(PlayerIndex pelaajaNumero, PhysicsObject maila)
89        {
90            Controls.Listen(pelaajaNumero, Buttons.DPadUp, ButtonPosition.Down, AsetaNopeus, "Liikuta mailaa ylös", maila, nopeusYlos);
91            Controls.Listen(pelaajaNumero, Buttons.DPadUp, ButtonPosition.Released, AsetaNopeus, null, maila, Vector2D.Zero);
92            Controls.Listen(pelaajaNumero, Buttons.DPadDown, ButtonPosition.Down, AsetaNopeus, "Liikuta mailaa alas", maila, nopeusAlas);
93            Controls.Listen(pelaajaNumero, Buttons.DPadDown, ButtonPosition.Released, AsetaNopeus, null, maila, Vector2D.Zero);
94        }
95
96        bool AsetaNopeus(ControlEvent e)
97        {
98            PhysicsObject maila = e.Parameter0.ToPhysicsObject();
99            Vector2D nopeus = e.Parameter1.ToVector2D();
100
101            if ((nopeus.Y < 0) && (maila.Y < Level.Bottom + 55))
102            {
103                maila.Velocity = Vector2D.Zero;
104                return false;
105            }
106            if ((nopeus.Y > 0) && (maila.Y > Level.Top - 55))
107            {
108                maila.Velocity = Vector2D.Zero;
109                return false;
110            }
111            maila.Velocity = nopeus;
112
113            return false;
114        }
115    }
116}
Note: See TracBrowser for help on using the repository browser.