source: 2009/enni_h/Pong/Peli.cs @ 1252

Revision 233, 4.3 KB checked in by hemitopp, 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        Meter<int> pelaajan1Pisteet;
29        Meter<int> pelaajan2Pisteet;
30
31
32        protected override void LoadContent()
33        {
34            Level = LuoKentta();
35            AloitaPeli();
36            AsetaOhjaimet();
37            LisaaLaskurit();
38
39        }
40
41        Level LuoKentta()
42        {
43
44
45            Level kentta = new Level(this);
46            kentta.BackgroundColor = Color.Black;
47
48            IShape ympyra = Shapes.CreateCircle(18.1);
49            pallo = new PhysicsObject(8.4, ympyra);
50            kentta.Objects.Add(pallo);
51            pallo.X = -100.0;
52            pallo.Y = 50.0;
53            pallo.Restitution = 1.0;
54
55            maila1 = LuoMaila(kentta.Left + 20.0, 0.0, kentta);
56            maila2 = LuoMaila(kentta.Right - 20.0, 0.0, kentta);
57
58
59            kentta.CreateBorder(1.0, false);
60
61            return kentta;
62        }
63
64        void AloitaPeli()
65        {
66            Vector2D impulssi = new Vector2D(3000.0, 0.0);
67            pallo.Hit(impulssi);
68        }
69
70        PhysicsObject LuoMaila(double x, double y, Level kentta)
71        {
72            IShape suorakulmio = Shapes.CreateRectangle(20.0, 100.0);
73            PhysicsObject maila = PhysicsObject.CreateStaticObject(suorakulmio);
74            maila.X = x;
75            maila.Y = y;
76            maila.Restitution = 1.0;
77            kentta.Objects.Add(maila);
78            return maila;
79
80        }
81        void AsetaOhjaimet()
82        {
83            Controls.Listen(Keys.A, ButtonPosition.Down, AsetaNopeus, "Pelaaja 1: Liikuta mailaa ylös", maila1, nopeusYlos);
84            Controls.Listen(Keys.A, ButtonPosition.Released, AsetaNopeus, null, maila1, Vector2D.Zero);
85            Controls.Listen(Keys.Z, ButtonPosition.Down, AsetaNopeus, "Pelaaja 1: Liikuta mailaa alas", maila1, nopeusAlas);
86            Controls.Listen(Keys.Z, ButtonPosition.Released, AsetaNopeus, null, maila1, Vector2D.Zero);
87
88            Controls.Listen(Keys.Up, ButtonPosition.Down, AsetaNopeus, "Pelaaja 2: Liikuta mailaa ylös", maila2, nopeusYlos);
89            Controls.Listen(Keys.Up, ButtonPosition.Released, AsetaNopeus, null, maila2, Vector2D.Zero);
90            Controls.Listen(Keys.Down, ButtonPosition.Down, AsetaNopeus, "Pelaaja 2: Liikuta mailaa alas", maila2, nopeusAlas);
91            Controls.Listen(Keys.Down, ButtonPosition.Released, AsetaNopeus, null, maila2, Vector2D.Zero);
92
93        }
94
95        bool AsetaNopeus( ControlEvent e )
96        {
97            PhysicsObject maila = e.Parameter0.ToPhysicsObject();
98            Vector2D nopeus = e.Parameter1.ToVector2D();
99
100            if ( (nopeus.Y < 0) && (maila.Y < Level.Bottom) )
101            {
102                maila.Velocity = Vector2D.Zero;
103                return false;
104            }
105            if ( (nopeus.Y > 0) && (maila.Y > Level.Top) )
106            {
107                maila.Velocity = Vector2D.Zero;
108                return false;
109            }
110
111            maila.Velocity = nopeus;
112           
113            return false;
114
115        }
116
117        void LisaaLaskurit()
118        {
119            pelaajan1Pisteet = LuoPisteLaskuri( Screen.Left + 100.0, Screen.Top - 100.0 );
120            pelaajan2Pisteet = LuoPisteLaskuri(Screen.Right - 100.0, Screen.Top - 100.0);
121
122        }
123
124        Meter<int> LuoPisteLaskuri()
125        {
126            Meter<int> laskuri = new Meter<int>(0, 0, 10);
127            ValueDisplay naytto = new ValueDisplay(this);
128            naytto.BindTo(laskuri);
129            naytto.X = x;
130            naytto.Y = y;
131            naytto.ValueColor = Color.White;
132            Add(naytto);
133
134            return laskuri;
135        }
136
137    }
138}
Note: See TracBrowser for help on using the repository browser.