source: 2010/24/Vilvaini/Pongi/Peli.cs @ 975

Revision 835, 7.0 KB checked in by vilvaini, 11 years ago (diff)

tuunasin pongin ja tein muutaman uuden minipelin.

Line 
1using System;
2using Jypeli;
3using Jypeli.ScreenObjects;
4
5public class Peli : PhysicsGame
6{
7    Vector nopeusYlos = new Vector(0, 400);
8    Vector nopeusAlas = new Vector(0, -400);
9
10    PhysicsObject pallo1;
11    PhysicsObject pallo2;
12    PhysicsObject maila1;
13    PhysicsObject maila2;
14
15    PhysicsObject vasenReuna;
16    PhysicsObject oikeaReuna;
17
18    IntMeter pelaajan1Pisteet;
19    IntMeter pelaajan2Pisteet;
20    Timer aikaLaskuri;          // laskee aikaa
21    ValueDisplay aikaNaytto;    // näyttää ajan
22
23    private void aikaLoppui(Timer sender)
24    {
25        Level.BackgroundColor = RandomGen.NextColor();
26        pallo1.Color = RandomGen.NextColor();
27        pallo2.Color = RandomGen.NextColor();
28        maila1.Color = RandomGen.NextColor();
29        maila2.Color = RandomGen.NextColor();
30        aikaLaskuri.Interval = 0.1;  // nollataan aikalaskuri oletusarvoonsa, joka oli 0.
31    }
32    protected override void Begin()
33    {
34        LuoKentta();
35        AsetaOhjaimet();
36        LisaaLaskurit();
37        AloitaPeli();
38        aikaLaskuri = new Timer();                     // luodaan uusi ajastin, nimeltä aikaLaskuri
39        aikaLaskuri.Interval = 0.1;                      // ajastukseksi 5 sekuntia
40        aikaLaskuri.Trigger += new Timer.TriggerHandler(aikaLoppui);  //   // asetetaan tapahtuma, kun aikaLaskuri kun 5 sekuntia on kulunut.
41        Add(aikaLaskuri);                       // lisätään aikaLaskuri peliin
42        aikaLaskuri.Start();                           // käynnistetään aikaLaskuri
43
44        aikaNaytto = new ValueDisplay();         // luo uuden aikaNayton
45        aikaNaytto.Text = "Aikaa jäljellä: ";          // laitetaan näytöllä näkyvä teksti
46        aikaNaytto.TextColor = Color.Red;          // vaihdetaan tekstin väriä
47        aikaNaytto.FormatDouble(0, true);            // asetetaan näyttämään aika siten, ettei siinä näy yhtään (0) desimaalia
48        aikaNaytto.ValueColor = Color.Red;
49        aikaNaytto.BindTo(aikaLaskuri.SecondCounter); // liitetään aikaNaytto aikaLaskuriin
50     
51    }
52
53    void LuoKentta()
54    {
55
56        pallo1 = LuoPallo(Level.Left + 20.0, 0.0);
57        pallo2 = LuoPallo(Level.Right - 20.0, 0.0);
58
59
60
61        maila1 = LuoMaila(Level.Left + 20.0, 0.0);
62        maila2 = LuoMaila(Level.Right - 20.0, 0.0);
63
64        vasenReuna = Level.CreateLeftBorder();
65        vasenReuna.Restitution = 0.8;
66        vasenReuna.IsVisible = false;
67        oikeaReuna = Level.CreateRightBorder();
68        oikeaReuna.Restitution = 0.8;
69        oikeaReuna.IsVisible = false;
70        PhysicsObject ylaReuna = Level.CreateTopBorder();
71        ylaReuna.Restitution = 1.1;
72        ylaReuna.IsVisible = false;
73        PhysicsObject alaReuna = Level.CreateBottomBorder();
74        alaReuna.Restitution = 1.1;
75        alaReuna.IsVisible = false;
76
77        Level.BackgroundColor = Color.Black;
78
79        Camera.ZoomToLevel();
80    }
81
82    PhysicsObject LuoMaila(double x, double y)
83    {
84        PhysicsObject maila = PhysicsObject.CreateStaticObject(20.0, 100.0);
85        maila.Shape = Shapes.Rectangle;
86        maila.X = x;
87        maila.Y = y;
88        maila.Restitution = 1.0;
89        Add(maila);
90        return maila;
91    }
92
93    PhysicsObject LuoPallo(double x, double y)
94    {
95        PhysicsObject pallo = new PhysicsObject(50.0, 50.0);
96        pallo.Shape = Shapes.Circle;
97        pallo.X = x;
98        pallo.Y = y;
99        pallo.Restitution = 1.0;
100        Add(pallo);
101        return pallo;
102    }
103
104    void LisaaLaskurit()
105    {
106        pelaajan1Pisteet = LuoPisteLaskuri(Screen.Left + 100.0, Screen.Top - 100.0);
107        pelaajan2Pisteet = LuoPisteLaskuri(Screen.Right - 100.0, Screen.Top - 100.0);
108    }
109
110    IntMeter LuoPisteLaskuri(double x, double y)
111    {
112        IntMeter laskuri = new IntMeter(0);
113        laskuri.MaxValue = 10;
114        ValueDisplay naytto = new ValueDisplay();
115        naytto.BindTo(laskuri);
116        naytto.X = x;
117        naytto.Y = y;
118        naytto.ValueColor = Color.White;
119        Add(naytto);
120        return laskuri;
121    }
122
123    void KasittelePallonTormays(PhysicsObject pallo1, PhysicsObject kohde)
124    {
125        if (kohde == oikeaReuna)
126        {
127            pelaajan1Pisteet.Value += 1;
128        }
129        else if (kohde == vasenReuna)
130        {
131            pelaajan2Pisteet.Value += 1;
132        }
133    }
134
135    void AloitaPeli()
136    {
137        Vector impulssi = new Vector(500.0, 0.0);
138        pallo1.Hit(impulssi);
139        Vector impulsi = new Vector(500.0, 0.0);
140        pallo2.Hit(impulsi);
141    }
142
143    void AsetaOhjaimet()
144    {
145        Keyboard.Listen(Key.A, ButtonState.Down, AsetaNopeus, "Pelaaja 1: Liikuta mailaa ylös", maila1, nopeusYlos);
146        Keyboard.Listen(Key.A, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero);
147        Keyboard.Listen(Key.Z, ButtonState.Down, AsetaNopeus, "Pelaaja 1: Liikuta mailaa alas", maila1, nopeusAlas);
148        Keyboard.Listen(Key.Z, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero);
149
150        Keyboard.Listen(Key.Up, ButtonState.Down, AsetaNopeus, "Pelaaja 2: Liikuta mailaa ylös", maila2, nopeusYlos);
151        Keyboard.Listen(Key.Up, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero);
152        Keyboard.Listen(Key.Down, ButtonState.Down, AsetaNopeus, "Pelaaja 2: Liikuta mailaa alas", maila2, nopeusAlas);
153        Keyboard.Listen(Key.Down, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero);
154
155        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
156        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu");
157
158        ControllerOne.Listen(Button.DPadUp, ButtonState.Down, AsetaNopeus, "Liikuta mailaa ylös", maila1, nopeusYlos);
159        ControllerOne.Listen(Button.DPadUp, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero);
160        ControllerOne.Listen(Button.DPadDown, ButtonState.Down, AsetaNopeus, "Liikuta mailaa alas", maila1, nopeusAlas);
161        ControllerOne.Listen(Button.DPadDown, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero);
162
163        ControllerTwo.Listen(Button.DPadUp, ButtonState.Down, AsetaNopeus, "Liikuta mailaa ylös", maila2, nopeusYlos);
164        ControllerTwo.Listen(Button.DPadUp, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero);
165        ControllerTwo.Listen(Button.DPadDown, ButtonState.Down, AsetaNopeus, "Liikuta mailaa alas", maila2, nopeusAlas);
166        ControllerTwo.Listen(Button.DPadDown, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero);
167
168        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu");
169        ControllerTwo.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu");
170    }
171
172    void AsetaNopeus(PhysicsObject maila, Vector nopeus)
173    {
174        if ((nopeus.Y < 0) && (maila.Bottom < Level.Bottom))
175        {
176            maila.Velocity = Vector.Zero;
177            return;
178        }
179        if ((nopeus.Y > 0) && (maila.Top > Level.Top))
180        {
181            maila.Velocity = Vector.Zero;
182            return;
183        }
184
185        maila.Velocity = nopeus;
186    }
187}
Note: See TracBrowser for help on using the repository browser.