source: 2016/30/PyryS/Pinkiponki/Pinkiponki/Pinkiponki/Pinkiponki.cs @ 8171

Revision 8171, 5.5 KB checked in by pybesilt, 3 years ago (diff)

tein pelaajalle kontrollit ja viholliselle tekoälyn, jonka avulla se osaa ampua

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Pinkiponki : PhysicsGame
10{
11    Vector nopeusYlos = new Vector(0, 200);
12    Vector nopeusAlas = new Vector(0, -200);
13    Vector lahtonopeus = new Vector(-500.0, 100.0);
14
15
16    const int pistemaksimi = 10;
17
18
19    PhysicsObject pallo;
20    PhysicsObject maila1;
21    PhysicsObject maila2;
22
23    PhysicsObject vasenReuna;
24    PhysicsObject oikeaReuna;
25
26    Level.Background.color taustavari = Color.Black;
27
28    const double PALLO_MIN_NOPEUS = 550;
29
30    IntMeter P1Pisteet;
31    IntMeter P2Pisteet;
32    public override void Begin()
33    {
34        Luokentta();
35        Ohjaimet();
36        LisääLaskurit();
37        Timer.SingleShot(5.0, AloitaPeli);
38
39
40
41    }
42
43    void Luokentta()
44    {
45        pallo = new PhysicsObject(40.0, 40.0);
46        Add(pallo);
47        pallo.Shape = Shape.Circle;
48        pallo.X = 0.0;
49        pallo.Y = 0.0;
50        pallo.Restitution = 1.1;
51
52        maila1 = LuoMaila(Level.Left + 20.0, 0.0);
53        maila2 = LuoMaila(Level.Right - 20.0, 0.0);
54
55        AddCollisionHandler(pallo, KasittelePallonTormays);
56
57        vasenReuna = Level.CreateLeftBorder();
58        vasenReuna.Restitution = 1.0;
59        vasenReuna.IsVisible = true;
60
61        oikeaReuna = Level.CreateRightBorder();
62        oikeaReuna.Restitution = 1.0;
63        vasenReuna.IsVisible = true;
64
65        PhysicsObject alaReuna = Level.CreateBottomBorder();
66        alaReuna.Restitution = 1.0;
67        alaReuna.IsVisible = true;
68
69        PhysicsObject yläReuna = Level.CreateTopBorder();
70        yläReuna.Restitution = 1.0;
71        yläReuna.IsVisible = true;
72
73
74
75        Level.Background.Color = taustavari;
76
77        Camera.ZoomToLevel();
78    }
79    void AloitaPeli()
80    {
81        Vector impulssi = lahtonopeus;
82        pallo.Hit(impulssi);
83    }
84
85    PhysicsObject LuoMaila(double x, double y)
86    {
87        PhysicsObject maila = PhysicsObject.CreateStaticObject(20.0, 100.0);
88        maila.Shape = Shape.Rectangle;
89        maila.X = x;
90        maila.Y = y;
91        maila.Restitution = 1.0;
92        Add(maila);
93        return maila;
94    }
95
96    void Ohjaimet()
97    {
98        Keyboard.Listen(Key.W, ButtonState.Down, AsetaNopeus, "P1 maila ylös", maila1, nopeusYlos);
99        Keyboard.Listen(Key.W, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero);
100        Keyboard.Listen(Key.S, ButtonState.Down, AsetaNopeus, "P1 maila alas", maila1, nopeusAlas);
101        Keyboard.Listen(Key.S, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero);
102
103
104        Keyboard.Listen(Key.Up, ButtonState.Down, AsetaNopeus, "P2 maila ylös", maila2, nopeusYlos);
105        Keyboard.Listen(Key.Up, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero);
106        Keyboard.Listen(Key.Down, ButtonState.Down, AsetaNopeus, "P2 maila alas", maila2, nopeusAlas);
107        Keyboard.Listen(Key.Down, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero);
108
109        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "näytä ohjeet");
110        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
111    }
112
113    void AsetaNopeus(PhysicsObject maila, Vector nopeus)
114    {
115        if ((nopeus.Y > 0) && (maila.Top > Level.Top))
116        {
117            maila.Velocity = Vector.Zero;
118            return;
119        }
120
121            if ((nopeus.Y < 0) && (maila.Bottom < Level.Bottom))
122            {
123                maila.Velocity = Vector.Zero;
124                return;
125            }
126       
127        maila.Velocity = nopeus;
128
129        if (maila == maila2 && Keyboard.IsShiftDown())
130        {
131            maila2.Velocity = nopeus * 2.0;
132        }
133        if ( maila == maila1 && Keyboard.IsCtrlDown())
134        {
135            maila1.Velocity = nopeus * 2.0;
136        }
137       
138         
139
140    }
141
142    void LisääLaskurit()
143    {
144        P1Pisteet = LuoLaskuri(Screen.Left + 100.0, Screen.Top - 100.0);
145        P1Pisteet.UpperLimit += delegate { LopetaPeli("P1 voitti pelin"); };
146
147        P2Pisteet = LuoLaskuri(Screen.Right - 100.0, Screen.Top - 100.0);
148        P2Pisteet.UpperLimit += delegate { LopetaPeli("P2 voitti pelin"); };
149       
150
151    }
152
153    IntMeter LuoLaskuri(double x, double y)
154    {
155        IntMeter laskuri = new IntMeter(0);
156        laskuri.MaxValue = pistemaksimi;
157
158        Label naytto = new Label();
159        naytto.BindTo(laskuri);
160        naytto.X = x;
161        naytto.Y = y;
162        naytto.TextColor = Color.White;
163        naytto.BorderColor = Level.Background.Color;
164        naytto.Color = Level.Background.Color;
165        Add(naytto);
166
167        return laskuri;
168    }
169
170    void KasittelePallonTormays(PhysicsObject pallo, PhysicsObject kohde)
171    {
172        if (kohde == oikeaReuna)
173        {
174            P1Pisteet.Value += 1;
175        }
176        else if (kohde == vasenReuna)
177        {
178            P2Pisteet.Value += 1;
179        }
180    }
181   
182
183    protected override void Update(Time time)
184    {
185        if (pallo != null && Math.Abs(pallo.Velocity.X) < PALLO_MIN_NOPEUS)
186        {
187            pallo.Velocity = new Vector(pallo.Velocity.X * 1.1, pallo.Velocity.Y);
188        }
189
190        base.Update(time);
191    }
192
193    void LopetaPeli(String viesti)
194    {
195        MessageWindow voittofanfaari = new MessageWindow(viesti);
196        Add(voittofanfaari);
197
198        IsPaused = true;
199        voittofanfaari.Closed += delegate { Exit(); };
200    }
201   
202
203}
Note: See TracBrowser for help on using the repository browser.