source: 2016/27/VerttiH/Pong/Pong/Pong/Pong.cs @ 7788

Revision 7788, 4.9 KB checked in by karkaite, 3 years ago (diff)
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 nopeusYlos = new Vector(0, 200);
12    Vector nopeusAlas = new Vector(0, -200);
13
14    PhysicsObject pallo;
15    PhysicsObject maila1;
16    PhysicsObject maila2;
17
18    PhysicsObject vasenReuna;
19    PhysicsObject oikeaReuna;
20
21    IntMeter pelaajan1Pisteet;
22    IntMeter pelaajan2Pisteet;
23    public override void Begin()
24     
25    {
26       
27
28        LuoKentta();
29        AsetaOhjaimet();
30        LisaaLaskurit();
31        AloitaPeli();
32
33        Vector impulssi = new Vector(500.0, 0.0);
34        pallo.Hit(impulssi);
35
36       
37    }
38    PhysicsObject LuoMaila(double x, double y)
39    {
40        PhysicsObject maila = PhysicsObject.CreateStaticObject(20.0, 100.0);
41        maila.Shape = Shape.Rectangle;
42        maila.X = x;
43        maila.Y = y;
44        maila.Restitution = 1.0;
45        Add(maila);
46        return maila;
47    }
48
49    void AsetaNopeus(PhysicsObject maila, Vector nopeus)
50    {
51        if ((nopeus.Y < 0) && (maila.Bottom < Level.Bottom))
52        {
53            maila.Velocity = Vector.Zero;
54            return;
55        }
56        if ((nopeus.Y > 0) && (maila.Top > Level.Top))
57        {
58            maila.Velocity = Vector.Zero;
59            return;
60        }
61
62        maila.Velocity = nopeus;
63    }
64
65    IntMeter LuoPisteLaskuri(double x, double y)
66    {
67        IntMeter laskuri = new IntMeter(0);
68        laskuri.MaxValue = 10;
69
70        Label naytto = new Label();
71        naytto.BindTo(laskuri);
72        naytto.X = x;
73        naytto. Y = y;
74        naytto.TextColor = Color.White;
75        naytto.BorderColor = Level.Background.Color;
76        naytto.Color = Level.Background.Color;
77        Add(naytto);
78
79        return laskuri;
80    }
81    void LisaaLaskurit()
82    {
83        pelaajan1Pisteet = LuoPisteLaskuri(Screen.Left + 100.0, Screen.Top - 100.0);
84        pelaajan2Pisteet = LuoPisteLaskuri(Screen.Right - 100.0, Screen.Top - 100.0);
85    }
86    void AsetaOhjaimet()
87    {
88        Keyboard.Listen(Key.A, ButtonState.Down, AsetaNopeus, "Pelaaja 1: Liikuta mailaa ylös", maila1, nopeusYlos);
89        Keyboard.Listen(Key.A, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero);
90        Keyboard.Listen(Key.Z, ButtonState.Down, AsetaNopeus, "Pelaaja 1: Liikuta mailaa alas", maila1, nopeusAlas);
91        Keyboard.Listen(Key.Z, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero);
92
93        Keyboard.Listen(Key.Up, ButtonState.Down, AsetaNopeus, "Pelaaja 2: Liikuta mailaa ylös", maila2, nopeusYlos);
94        Keyboard.Listen(Key.Up, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero);
95        Keyboard.Listen(Key.Down, ButtonState.Down, AsetaNopeus, "Pelaaja 2: Liikuta mailaa alas", maila2, nopeusAlas);
96        Keyboard.Listen(Key.Down, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero);
97
98        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
99
100        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
101    }
102
103    const double PALLON_MIN_NOPEUS = 500;
104
105    protected override void Update(Time time)
106    {
107        if (pallo != null && Math.Abs(pallo.Velocity.X) < PALLON_MIN_NOPEUS)
108        {
109            pallo.Velocity = new Vector(pallo.Velocity.X * 1.1, pallo.Velocity.Y);
110        }
111        base.Update(time);
112
113    }
114    void AloitaPeli()
115    {
116        Vector impulssi = new Vector(500.0, 0.0);
117        pallo.Hit(impulssi);
118    }
119    void KasittelePallonTormays(PhysicsObject Pallo, PhysicsObject kohde)
120    {
121    if (kohde == oikeaReuna)
122        {
123            pelaajan1Pisteet.Value += 1;
124        }
125    else if (kohde == vasenReuna)
126        {
127            pelaajan2Pisteet.Value += 1;
128        }
129    }
130    void LuoKentta()
131    {
132         pallo = new PhysicsObject(40.0, 40.0);
133        pallo.Shape = Shape.Circle;
134        pallo.X = -200.0;
135        pallo.Y = 0.0;
136        pallo.Restitution = 1.0;
137        Add(pallo);
138
139        AddCollisionHandler(pallo, KasittelePallonTormays); 
140
141       
142
143        maila1 = LuoMaila(Level.Left + 20.0, 0.0);
144        maila2 = LuoMaila(Level.Right - 20.0, 0.0);
145
146         vasenReuna = Level.CreateLeftBorder();
147        vasenReuna.Restitution = 1.0;
148        vasenReuna.IsVisible = false;
149
150         oikeaReuna = Level.CreateRightBorder();
151        oikeaReuna.Restitution = 1.0;
152        oikeaReuna.IsVisible = false;
153
154        PhysicsObject alaReuna = Level.CreateBottomBorder();
155        alaReuna.Restitution = 1.0;
156        alaReuna.IsVisible = false;
157
158        PhysicsObject ylaReuna = Level.CreateTopBorder();
159        ylaReuna.Restitution = 1.0;
160        ylaReuna.IsVisible = false;
161
162        Level.Background.Color = Color.Black;
163
164       
165       
166
167        Camera.ZoomToLevel();
168    }
169}
170   
Note: See TracBrowser for help on using the repository browser.