source: 2017/30/LuukasM/Pong/Pong/Pong/Pong.cs @ 9079

Revision 9079, 4.8 KB checked in by npo17_65, 4 years ago (diff)

Sain pongin valmiiksi

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