source: onni_m/Pong/Peli.cs @ 253

Revision 253, 4.9 KB checked in by joonalmo, 11 years ago (diff)

Pong valmis : ) ja lumiukkoo alotin

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