source: 2014/30/AtteB/Pong/Pong/Pong/Pong.cs @ 5498

Revision 5498, 5.1 KB checked in by athebla, 7 years ago (diff)

Pong Alpha 0.1

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Pong : PhysicsGame
10{
11    Vector nopeusYlös = new Vector(0, 200);
12    Vector nopeusAlas = new Vector(0, -200);
13   
14    PhysicsObject pallo;
15
16    PhysicsObject maila1;
17    PhysicsObject maila2;
18
19    PhysicsObject vasenReuna;
20    PhysicsObject oikeaReuna;
21
22    IntMeter P1Pisteet;
23    IntMeter P2Pisteet;
24
25    public override void Begin()
26    {
27
28        LuoKenttä();
29        AloitaPeli();
30        AsetaOhjaimet();
31        LisääLaskurit();
32    }
33
34    public void AsetaOhjaimet()
35    {
36        // Lopeta
37        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
38
39        // Apua
40        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
41
42        // Maila 1
43        Keyboard.Listen(Key.W, ButtonState.Down, AsetaNopeus, "Pelaaja 1: liikuta mailaa ylös", maila1, nopeusYlös);
44        Keyboard.Listen(Key.W, ButtonState.Released, AsetaNopeus, "null", maila1, Vector.Zero);
45        Keyboard.Listen(Key.S, ButtonState.Down, AsetaNopeus, "Pelaaja 1: liikuta mailaa alas", maila1, nopeusAlas);
46        Keyboard.Listen(Key.S, ButtonState.Released, AsetaNopeus, "null", maila1, Vector.Zero);
47       
48        // Maila 2
49        Keyboard.Listen(Key.Up, ButtonState.Down, AsetaNopeus, "Pelaaja 2: liikuta mailaa ylös", maila2, nopeusYlös);
50        Keyboard.Listen(Key.Up, ButtonState.Released, AsetaNopeus, "null", maila2, Vector.Zero);
51        Keyboard.Listen(Key.Down, ButtonState.Down, AsetaNopeus, "Pelaaja 2: liikuta mailaa alas", maila2, nopeusAlas);
52        Keyboard.Listen(Key.Down, ButtonState.Released, AsetaNopeus, "null", maila2, Vector.Zero);
53    }
54
55    public void AsetaNopeus(PhysicsObject maila, Vector nopeus)
56    {
57
58        if ((nopeus.Y < 0) && (maila.Bottom < Level.Bottom))
59        {
60            maila.Velocity = Vector.Zero;
61            return;
62        }
63
64        if ((nopeus.Y > 0) && (maila.Top > Level.Top))
65        {
66            maila.Velocity = Vector.Zero;
67            return;
68        }
69       
70        maila.Velocity = nopeus;
71    }
72
73    public void LuoKenttä() // Tekee kentän ja pallon
74    {
75        // Tekee taustan kenttään
76        Level.Background.Color = Color.Black;
77        Camera.ZoomToLevel();
78
79        // Reunat (Vasen/Oikea/Ylös/Alas)
80        vasenReuna = Level.CreateLeftBorder();
81        vasenReuna.Restitution = 1.0;
82        vasenReuna.IsVisible = false;
83
84        oikeaReuna = Level.CreateRightBorder();
85        oikeaReuna.Restitution = 1.0;
86        oikeaReuna.IsVisible = false;
87
88        PhysicsObject yläReuna = Level.CreateTopBorder();
89        yläReuna.Restitution = 3.0;
90        yläReuna.IsVisible = false;
91
92        PhysicsObject alaReuna = Level.CreateBottomBorder();
93        alaReuna.Restitution = 3.0;
94        alaReuna.IsVisible = false;
95
96        pallo = new PhysicsObject(25.0, 25.0);
97        pallo.Color = Color.White;
98        pallo.Shape = Shape.Circle;
99        pallo.X = 0;
100        pallo.Y = 0;
101        pallo.Restitution = 1.0;
102
103        maila1 = LuoMaila(Level.Left + 20.0, 0.0);
104        maila2 = LuoMaila(Level.Right + -20.0, 0.0);
105
106        // Lisää esineet peliin
107        Add(pallo);
108
109        AddCollisionHandler(pallo, KäsittelePallonTörmäys);
110    }
111
112    public void AloitaPeli()
113    {
114        // Liikuttaa palloa
115        Vector impulssi = new Vector(500.0, 0.0);
116        pallo.Hit(impulssi);
117    }
118
119    PhysicsObject LuoMaila(double x, double y)
120    {
121        PhysicsObject maila = PhysicsObject.CreateStaticObject(20.0, 100.0);
122        maila.Shape = Shape.Rectangle;
123        maila.X = x;
124        maila.Y = y;
125        maila.Restitution = 1.0;
126        Add(maila);
127        return maila;
128    }
129
130    public void LisääLaskurit()
131    {
132        P1Pisteet = LuoPisteLaskuri(Screen.Left + 240.0, Screen.Top - 150.0);
133        P2Pisteet = LuoPisteLaskuri(Screen.Right - 240.0, Screen.Top - 150.0);
134
135    }
136
137    IntMeter LuoPisteLaskuri(double x, double y)
138    {
139        IntMeter laskuri = new IntMeter(0);
140        laskuri.MaxValue = 10;
141
142        Label näyttö = new Label();
143        näyttö.BindTo(laskuri);
144        näyttö.X = x;
145        näyttö.Y = y;
146        näyttö.TextColor = Color.DarkTurquoise;
147        näyttö.BorderColor = Level.Background.Color;
148        näyttö.Color = Level.Background.Color;
149        Add(näyttö);
150       
151        return laskuri;
152    }
153
154    void KäsittelePallonTörmäys(PhysicsObject pallo, PhysicsObject kohde)
155    {
156        if (kohde == oikeaReuna)
157        {
158            P1Pisteet.Value += 1;
159        }
160        else if (kohde == vasenReuna)
161        {
162            P2Pisteet.Value += 1;
163        }
164
165    }
166
167    const double PALLON_MIN_NOPEUS = 500;
168
169    protected override void Update(Time time)
170    {
171        if (pallo != null && Math.Abs(pallo.Velocity.X) < PALLON_MIN_NOPEUS)
172        {
173            pallo.Velocity = new Vector(pallo.Velocity.X * 1.1, pallo.Velocity.Y);
174        }
175        base.Update(time);
176    }
177
178}
Note: See TracBrowser for help on using the repository browser.