source: 2009/sipi_o/pongi/Peli.cs @ 2162

Revision 25, 4.7 KB checked in by sikajeov, 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 pongi
20{
21    public class Peli : PhysicsGame
22    {
23        const double mailanNopeus = 200.0;
24        PhysicsObject pallo;
25        //PhysicsObject palla;
26        PhysicsObject maila1;
27        PhysicsObject maila2;
28        Meter<int> pelaajan1Pisteet;
29        Meter<int> pelaajan2Pisteet;
30
31        protected override void LoadContent()
32        {
33            Level = LuoKentta();
34            AsetaOhjaimet();
35            LisaaLaskurit();
36            AloitaPeli();
37        }
38
39        Level LuoKentta()
40        {
41            Level kentta = new Level(this);
42            kentta.BackgroundColor = Color.MistyRose;
43
44            IShape ympyra = Shapes.CreateCircle(15.0);
45            pallo = new PhysicsObject(10.0, ympyra);
46            pallo.X = -200.0;
47            pallo.Y = 0.0;
48            pallo.Restitution = 1.0;
49            pallo.Color = Color.Indigo;
50            kentta.Objects.Add(pallo);
51
52            //IShape ympyra2 = Shapes.CreateCircle(15.0);
53            //palla = new PhysicsObject(10.0, ympyra2);
54            //palla.X = -200.0;
55            //palla.Y = 0.0;
56            //palla.Restitution = 1.0;
57            //palla.Color = Color.Indigo;
58            //kentta.Objects.Add(palla);
59
60            AddCollisionHandler(pallo, KasittelePallonTormays);
61
62            maila1 = LuoMaila(kentta.Left + 20.0, 0.0, kentta);
63            maila2 = LuoMaila(kentta.Right - 20.0, 0.0, kentta);
64
65            kentta.CreateBorder(1.0, false);
66
67            return kentta;
68        }
69
70        PhysicsObject LuoMaila(double x, double y, Level kentta)
71        {
72            IShape suorakulmio = Shapes.CreateRectangle(10.0, 150.0);
73            PhysicsObject maila = PhysicsObject.CreateStaticObject(suorakulmio);
74            maila.X = x;
75            maila.Y = y;
76            maila.Restitution = 1.0;
77            maila.Color = Color.Red;
78            kentta.Objects.Add(maila);
79            return maila;
80        }
81
82       
83        void LisaaLaskurit()
84                {
85                pelaajan1Pisteet = LuoPisteLaskuri( Screen.Left + 100.0, Screen.Top - 100.0 );
86                    pelaajan2Pisteet = LuoPisteLaskuri( Screen.Right - 100.0, Screen.Top - 100.0 );
87                }
88
89       
90
91        Meter<int> LuoPisteLaskuri(double x, double y)
92        {
93            Meter<int> laskuri = new Meter<int>(0, 0, 10);
94            ValueDisplay naytto = new ValueDisplay(this);
95            naytto.BindTo(laskuri);
96            naytto.X = x;
97            naytto.Y = y; 
98            naytto.ValueColor = Color.Black;
99            Add(naytto);
100            return laskuri;
101        }
102        void KasittelePallonTormays(Collision collision)
103        {
104            PhysicsObject pallo = collision.Obj;
105            PhysicsObject kohde = collision.Other;
106
107            if (kohde == Level.RightBorder)
108            {
109                pelaajan1Pisteet.Value += 1;
110            }
111            else if (kohde == Level.LeftBorder)
112            {
113                pelaajan2Pisteet.Value += 1;
114            }
115        }
116
117        void AloitaPeli()
118        {
119            Vector2D impulssi = new Vector2D(5000.0, 0.0);
120            pallo.Hit(impulssi);
121            //Vector2D impulssi2 = new Vector2D(-5000.0, 0.0);
122            //palla.Hit(impulssi2);
123        }
124
125        void AsetaOhjaimet()
126        {
127            Controls.Listen(Keys.A, ButtonPosition.Down, LiikutaMailaa, "Pelaaja 1: Liikuta mailaa ylös", maila1, mailanNopeus);
128            Controls.Listen(Keys.Z, ButtonPosition.Down, LiikutaMailaa, "Pelaaja 1: Liikuta mailaa alas", maila1, -mailanNopeus);
129
130            Controls.Listen(Keys.Up, ButtonPosition.Down, LiikutaMailaa, "Pelaaja 2: Liikuta mailaa ylös", maila2, mailanNopeus);
131            Controls.Listen(Keys.Down, ButtonPosition.Down, LiikutaMailaa, "Pelaaja 2: Liikuta mailaa alas", maila2, -mailanNopeus);
132        }
133
134        bool LiikutaMailaa( ControlEvent e )
135        {
136            PhysicsObject maila = e.Parameter0.ToPhysicsObject();
137            double nopeus = e.Parameter1.ToDouble();
138            double sekuntejaKulunut = e.Time.ElapsedGameTime.TotalSeconds;
139            double uusiY = maila.Y + nopeus * sekuntejaKulunut;
140
141            if ( ( Level.Bottom < uusiY ) && ( uusiY < Level.Top ) )
142            {
143                maila.Y = uusiY;
144            }
145
146            return false;
147        }
148    }
149}
Note: See TracBrowser for help on using the repository browser.