source: arho_m/Pong/Peli.cs @ 255

Revision 255, 4.1 KB checked in by armahlam, 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        PhysicsObject maila1, maila2, pallo;
24        const double MAILAN_NOPEUS = 20.0;
25
26        protected override void LoadContent()
27        {
28            Level.CreateBorder(1.0, false);
29            Level.BackgroundColor = Color.Black;
30            LuoMailat(20.0, 150.0, 1000.0);
31            LuoPallo(20.0);
32            AsetaOhjaimet();
33            AddCollisionHandler(pallo, KasittelePallonColl);
34        }
35
36        void LuoPallo(double koko)
37        {
38            IShape s_pallo = Shapes.CreateCircle(koko);
39            pallo = new PhysicsObject(15.0, s_pallo);
40            Level.Objects.Add(pallo);
41            Vector2D v = new Vector2D(
42                RandomGen.NextDouble(-50000.0, 50000.0), 
43                RandomGen.NextDouble(-1000.0, -1000.0));
44            pallo.Hit(v);
45            pallo.StaticFriction = 0.0;
46            pallo.KineticFriction = 0.0;
47            pallo.Restitution = 1.0;
48
49            Timer tm = new Timer();
50            tm.Interval = 3.0;
51            tm.Trigger += new Timer.TriggerHandler(PalloImpulssi);
52            tm.Start();
53            AddTimer(tm);
54        }
55
56        void PalloImpulssi( Timer sender )
57        {
58            Vector2D vek = new Vector2D(20000, RandomGen.NextDouble(-5000, 5000));
59
60            if (pallo.Velocity.X > 0)
61                pallo.Hit(vek);
62            else
63                pallo.Hit(-vek);
64        }
65
66        void LuoMailat( double leveys, double korkeus, double dist )
67        {
68            Texture2D tex = Content.Load<Texture2D>("maila");
69            Vector2D vec = new Vector2D(64.0, 128.0);
70            IShape shp = Shapes.CreateFromTexture(tex, vec, 10.0);
71            //IShape shp = Shapes.CreateRectangle(leveys, korkeus);
72
73            maila1 = PhysicsObject.CreateStaticObject(shp);
74            maila1.Color = Color.White;
75            maila1.X = -dist / 2.0;
76            maila1.Restitution = 1.0;
77            maila1.Texture = tex;
78
79            maila2 = PhysicsObject.CreateStaticObject(shp);
80            maila2.Color = Color.White;
81            maila2.X = dist / 2.0;
82            maila2.Restitution = 1.0;
83            maila2.Texture = tex;
84
85            Timer tm = new Timer();
86            tm.Interval = 1.0 / 60.0;
87            tm.Trigger += new Timer.TriggerHandler(LiikutaMaila2);
88            tm.Start();
89            AddTimer(tm);
90
91            Level.Objects.Add(maila1);
92            Level.Objects.Add(maila2);
93        }
94
95        bool LiikutaYlos(ControlEvent e)
96        {
97            maila1.Y += MAILAN_NOPEUS;
98            return false;
99        }
100
101        bool LiikutaAlas(ControlEvent e)
102        {
103            maila1.Y -= MAILAN_NOPEUS;
104            return false;
105        }
106
107        void AsetaOhjaimet()
108        {
109            Controls.Listen(Keys.Up, ButtonPosition.Down, LiikutaYlos, null, null);
110            Controls.Listen(Keys.Down, ButtonPosition.Down, LiikutaAlas, null, null);
111        }
112
113        void KasittelePallonColl(Collision collision)
114        {
115            PhysicsObject pallo = collision.Obj;
116            PhysicsObject kohde = collision.Other;
117            if (kohde == Level.RightBorder)
118            {
119                // piste ykköselle
120            }
121            if (kohde == Level.LeftBorder)
122            {
123                // piste kakkoselle
124            }
125        }
126
127        void LiikutaMaila2( Timer sender )
128        {
129            double matka = pallo.Y - maila2.Y;
130
131            double xmatka = maila2.X - pallo.X;
132            if (xmatka < 0)
133                maila2.Y -= matka;
134            else
135                maila2.Y += matka;
136        }
137    }
138}
Note: See TracBrowser for help on using the repository browser.