source: 2010/27/frjolehm/Ping Pong/Ping Pong/Peli.cs @ 1088

Revision 1088, 6.6 KB checked in by frjolehm, 11 years ago (diff)

Laitin tekoälyn....

Line 
1using System;
2using Jypeli;
3using Jypeli.Widgets;
4using Jypeli.Assets;
5
6public class Peli : PhysicsGame
7{
8    Vector nopeusYlös = new Vector(0, 250);
9    Vector nopeusAlas = new Vector(0, -250);
10
11    //Liikuvat kohteeet
12    PhysicsObject pallo;
13    PhysicsObject maila1;
14    PhysicsObject maila2;
15
16    PhysicsObject vasenReuna;
17    PhysicsObject oikeaReuna;
18    PhysicsObject yläReuna;
19    PhysicsObject alaReuna;
20
21    IntMeter pelaaja1Pisteet;
22    IntMeter pelaaja2Pisteet;
23
24    Boolean vastustaja;
25    Boolean löyjä;
26
27    protected override void Begin()
28    {
29        //=)
30
31        LuoKenttä();
32        Ohjaimet();
33        LisääLaskurit();
34        AloitaPeli(500);
35
36    }
37
38    //Pelin luonti
39    void LuoKenttä()
40    {
41        //mailan luonti
42        maila1 = LuoMaila(Level.Left + 30, 0, 1.0);
43        maila2 = LuoMaila(Level.Right - 30, 0, 1.0);
44        //pallon luonti
45        LuoPallo(RandomGen.NextColor());
46        //taso
47        vasenReuna = Level.CreateLeftBorder();
48        vasenReuna.Restitution = 1.0;
49        vasenReuna.IsVisible = false;
50
51        oikeaReuna = Level.CreateRightBorder();
52        oikeaReuna.Restitution = 1.0;
53        oikeaReuna.IsVisible = false;
54
55        alaReuna = Level.CreateBottomBorder();
56        alaReuna.Restitution = 1.0;
57        alaReuna.IsVisible = false;
58        alaReuna.KineticFriction = 0.0;
59
60        yläReuna = Level.CreateTopBorder();
61        yläReuna.Restitution = 1.0;
62        yläReuna.IsVisible = false; 
63        yläReuna.KineticFriction = 0.0;
64
65
66        Camera.ZoomToLevel();
67
68    }
69
70    void LuoPallo(Color väri)
71    {
72        pallo = new PhysicsObject(35, 35);
73        pallo.Shape = Shapes.Rectangle;
74        pallo.KineticFriction = 0.0;
75        pallo.Color = väri;
76        pallo.X = 0;
77        pallo.Y = 0;
78        pallo.Restitution = 1.0;
79        Add(pallo);
80        AddCollisionHandler(pallo, PallonTörmäys); 
81    }
82
83    void PallonTörmäys(PhysicsObject pallo, PhysicsObject kohde)
84    {
85        if (kohde == vasenReuna)
86        {
87            pelaaja2Pisteet.Value += 1;
88            pallo.Destroy();
89            LuoPallo(RandomGen.NextColor()); 
90            AloitaPeli(-500);
91
92        }
93        else if (kohde == oikeaReuna)
94        {
95            pelaaja1Pisteet.Value += 1;
96            pallo.Destroy();
97            LuoPallo(RandomGen.NextColor());
98            AloitaPeli(500);
99        }
100        else if (kohde == maila2)
101        {
102            löyjä = true;
103        }
104        else if (kohde == maila1)
105        {
106            löyjä = false;
107        }
108    }
109
110    void AloitaPeli(double nopeus)
111    {
112        Vector impullsi = new Vector(nopeus, RandomGen.NextInt(-200,200));
113        pallo.Hit(impullsi);
114    }
115
116    PhysicsObject LuoMaila(double x, double y, double kimmoisuus)
117    {
118        PhysicsObject maila = PhysicsObject.CreateStaticObject(25, 150);
119        maila.Shape = Shapes.Rectangle;
120        maila.X = x;
121        maila.Y = y;
122        maila.Restitution = kimmoisuus;
123        maila.KineticFriction = 1.5;
124        Add(maila);
125        return maila;
126    }
127
128    //Ohjamiet
129    void Ohjaimet()
130    {
131        //Yleiset
132        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu");
133        Keyboard.Listen(Key.H, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
134        Keyboard.Listen(Key.Enter, ButtonState.Pressed, LaitaVastustaja, "Laita vastustaja päälle.");
135
136        //Pelaaja 1
137        Keyboard.Listen(Key.A, ButtonState.Down, LaitaNopeus, "Pelaaja 1: Liikuta mailaa ylöspän.", maila1, nopeusYlös);
138        Keyboard.Listen(Key.A, ButtonState.Released, LaitaNopeus, null, maila1, Vector.Zero);
139        Keyboard.Listen(Key.Z, ButtonState.Down, LaitaNopeus, "Pelaaja 1: Liikuta mailaa alaspäin.", maila1, nopeusAlas);
140        Keyboard.Listen(Key.Z, ButtonState.Released, LaitaNopeus, null, maila1, Vector.Zero);
141        //Pelaaja 2 tai Botti
142        if (vastustaja == false)
143        {
144            Keyboard.Listen(Key.Up, ButtonState.Down, LaitaNopeus, "Pelaaja 2: Liikuta mailaa ylöspäin.", maila2, nopeusYlös);
145            Keyboard.Listen(Key.Up, ButtonState.Released, LaitaNopeus, null, maila2, Vector.Zero);
146            Keyboard.Listen(Key.Down, ButtonState.Down, LaitaNopeus, "Pelaaja 2: Liikuta mailaa alaspäin.", maila2, nopeusAlas);
147            Keyboard.Listen(Key.Down, ButtonState.Released, LaitaNopeus, null, maila2, Vector.Zero);
148        }
149    }
150
151    void LaitaVastustaja()
152    {
153        if (vastustaja)
154        {
155            vastustaja = false;
156            LaitaNopeus(maila2, Vector.Zero);
157        } else {
158            vastustaja = true;
159        }
160    }
161
162    void LaitaNopeus(PhysicsObject maila, Vector nopeus)
163    {
164        if ((nopeus.Y < 0) && (maila.Y < Level.Bottom))
165        {
166            maila.Velocity = Vector.Zero;
167            return;
168        }
169        if ((nopeus.Y > 0) && (maila.Y > Level.Top))
170        {
171            maila.Velocity = Vector.Zero;
172            return;
173        }
174
175        maila.Velocity = nopeus;
176    }
177
178    //Piste laskurit
179    void LisääLaskurit()
180    {
181        pelaaja1Pisteet = LuoPisteLaskuri(Screen.Left + 50, Screen.Top - 50);
182        pelaaja2Pisteet = LuoPisteLaskuri(Screen.Right - 50, Screen.Top - 50);
183    }
184    IntMeter LuoPisteLaskuri(double x, double y)
185    {
186        IntMeter laskuri = new IntMeter(0);
187        laskuri.MaxValue = 10;
188
189        Label näyttö = new Label();
190        näyttö.BindTo(laskuri);
191        näyttö.X = x;
192        näyttö.Y = y;
193        näyttö.TextColor = Color.Cyan;
194        Add(näyttö);
195
196        return laskuri;
197    }
198
199    protected override void Update(Time time)
200    {
201        if (vastustaja == true)
202        {
203            if (löyjä == true)
204            {
205                if (maila2.Y < -10)
206                {
207                    LaitaNopeus(maila2, nopeusYlös);
208                }
209                else if (maila2.Y > 10)
210                {
211                    LaitaNopeus(maila2, nopeusAlas);
212                }
213                else
214                {
215                    LaitaNopeus(maila2, Vector.Zero);
216                }
217            }
218            else
219            {
220                if ((pallo.Y > (maila2.Y + 75)))
221                {
222                    LaitaNopeus(maila2, nopeusYlös);
223                }
224                else if ((pallo.Y < (maila2.Y - 75)))
225                {
226                    LaitaNopeus(maila2, nopeusAlas);
227                }
228                else
229                {
230                    LaitaNopeus(maila2, Vector.Zero);
231                }
232            }
233        }
234        base.Update(time);
235    }
236}
Note: See TracBrowser for help on using the repository browser.