source: 2013/27/JuhanaR/Korispeli/Korispeli/Korispeli/Korispeli.cs @ 4413

Revision 4413, 8.1 KB checked in by juronnbe, 7 years ago (diff)

Talletus.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Korispeli : PhysicsGame
10{
11    const double nopeus = 200;
12    const double hyppyNopeus = 750;
13    const int RUUDUN_KOKO = 40;
14    List<Pelaaja> pelaajat = new List<Pelaaja>();
15    int vuorossaOlevaPelaaja = 0;
16    PhysicsObject kori;
17
18    PlatformCharacter pelaaja1;
19
20    Image pelaajanKuva = LoadImage("pelaaja1");
21    Image vastustajanKuva = LoadImage("Vastustaja");
22    Image tuomarinKuva = LoadImage("Tuomari");
23    Image korinKuva = LoadImage("tahti");
24    Image koripallonKuva = LoadImage("Koripallo");
25    Image koripallokorinKuva = LoadImage("Koripallokori");
26
27    SoundEffect maaliAani = LoadSoundEffect("maali");
28
29    bool VoikoHeittaa = true;
30
31    DoubleMeter heittovoima;
32
33    void LuoVoimamittari()
34    {
35        heittovoima = new DoubleMeter(70, 0, 100);
36        heittovoima.MaxValue = 10;
37        heittovoima.UpperLimit += delegate { heittovoima.Value = 0; };
38
39        ProgressBar heittoPalkki = new ProgressBar(150, 20);
40        heittoPalkki.X = Screen.Left + 150;
41        heittoPalkki.Y = 0;
42        heittoPalkki.Angle = Angle.RightAngle;
43        heittoPalkki.BindTo(heittovoima);
44        Add(heittoPalkki);
45    }
46    public override void Begin()
47    {
48        Gravity = new Vector(0, -1000);
49        for (int i = 0; i < 4; i++)
50        {
51            Pelaaja pelaaja = new Pelaaja();
52            pelaaja.Pisteet.UpperLimit += VaihdaKenttaa;
53            pelaajat.Add(pelaaja);
54
55        }
56        Mouse.IsCursorVisible = true;
57
58       
59
60        LuoKentta();
61        LuoNaytot();
62        LisaaNappaimet();
63        LuoVoimamittari();
64        Camera.ZoomToLevel();
65       
66    }
67
68    void VaihdaKenttaa()
69    {
70        ClearAll();
71        pelaajat.Clear();
72        vuorossaOlevaPelaaja = 0;
73        Begin();
74
75    }
76
77
78    void VaihdaPelaajaaVuorossa()
79    {
80        if (vuorossaOlevaPelaaja + 1 >= pelaajat.Count)
81            vuorossaOlevaPelaaja = 0;
82        else vuorossaOlevaPelaaja++;
83        MessageDisplay.Add("Pelaajan " + (vuorossaOlevaPelaaja + 1) + " vuoro");
84        pelaaja1.Position = new Vector( -200, 0);
85    }
86
87
88    void LuoNaytot()
89    {
90        Label ylareuna = new Label("Pisteet");
91        ylareuna.Position = new Vector(Screen.Right -50, Screen.Top -50);
92        int i =1 ;
93        foreach (var item in pelaajat)
94        {
95            Label pisteet = new Label(100, 50);
96            pisteet.BindTo(item.Pisteet);
97            ylareuna.Add(pisteet);
98            pisteet.Position += new Vector(0, -i++ * 20); 
99        }
100        Add(ylareuna);
101    }
102
103
104    void LuoKentta()
105    {
106        TileMap kentta = TileMap.FromLevelAsset("kentta1");
107        kentta.SetTileMethod('V', LisaaVastustaja);
108        kentta.SetTileMethod('#', LisaaTaso);
109        kentta.SetTileMethod('K', LisaaKori);
110        kentta.SetTileMethod('N', LisaaPelaaja);
111        kentta.SetTileMethod('T', LisaaTuomari);
112        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
113
114        PhysicsObject ylaReuna = Level.CreateTopBorder();
115        ylaReuna.Tag = "reuna";
116        Level.CreateHorizontalBorders(0, false, Color.Red);
117
118        Level.Background.Image = LoadImage("Koripallokenttä");
119        Level.Background.FitToLevel();       
120    }
121
122    void LisaaTuomari(Vector paikka, double leveys, double korkeus)
123    {
124        PhysicsObject Tuomari = PhysicsObject.CreateStaticObject(leveys*1.2, 1.5*korkeus);
125      Tuomari.IgnoresCollisionResponse = true;
126      Tuomari.Position = paikka;
127      Tuomari.Y += 10;
128      Tuomari.Image = tuomarinKuva;
129      Add(Tuomari);
130    }
131
132    void LisaaTaso(Vector paikka, double leveys, double korkeus)
133    {
134        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
135        taso.Position = paikka;
136        taso.Color = Color.Green;
137        Add(taso);
138    }
139
140    void LisaaKori(Vector paikka, double leveys, double korkeus)
141    {
142        kori = PhysicsObject.CreateStaticObject(leveys*1.2, korkeus*1.2);
143        kori.IgnoresCollisionResponse = true;
144        kori.Position = paikka;
145        kori.Image = koripallokorinKuva;
146        kori.Tag = "kori";
147        Add(kori);
148    }
149
150    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
151    {
152        pelaaja1 = new PlatformCharacter(leveys, korkeus*1.5);
153        pelaaja1.Position = paikka;
154        pelaaja1.Mass = 4.0;
155        pelaaja1.Image = pelaajanKuva;
156        pelaaja1.CollisionIgnoreGroup = 1;
157        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
158        Add(pelaaja1);
159    }
160
161    void LisaaVastustaja(Vector paikka, double leveys, double korkeus)
162    {
163        PlatformCharacter Vastustaja = new PlatformCharacter(leveys, korkeus*2);
164        Vastustaja.Position = paikka;
165        Vastustaja.Mass = 1000.0;
166        Vastustaja.Image = vastustajanKuva;
167        Add(Vastustaja);
168        Timer hyppyAjastin = new Timer();
169        hyppyAjastin.Start();
170        hyppyAjastin.Interval = 2;
171        hyppyAjastin.Timeout += delegate { if (Vastustaja != null) Vastustaja.Jump((kori.Y -Level.Bottom) * 4); };
172    }
173
174    PhysicsObject LisaaPallo()
175    {
176        PhysicsObject Pallo = new PhysicsObject (20,20);
177        Pallo.Shape = Shape.Circle;
178        Pallo.Image = koripallonKuva;
179        Pallo.Position = pelaaja1.Position;
180        Pallo.CollisionIgnoreGroup = 1;
181        Add(Pallo);
182        return Pallo;
183    }
184
185
186
187    void LisaaNappaimet()
188    {
189        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
190        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
191
192        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
193        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
194        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
195
196        Mouse.Listen(MouseButton.Left, ButtonState.Released, HeitaPallo, "");
197
198        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
199
200        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
201        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
202        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
203
204        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
205    }
206
207    void HeitaPallo()
208    {
209        if (!VoikoHeittaa)
210            return;
211        VoikoHeittaa = false;
212       PhysicsObject pallo =  LisaaPallo();
213       
214        Vector suunta = (Mouse.PositionOnWorld - pallo.Position).Normalize();
215        pallo.Hit(suunta * 1500);
216
217        AddCollisionHandler(pallo, PalloOsuu);
218    }
219
220    void PalloOsuu(PhysicsObject pallo, PhysicsObject kohde)
221    {
222        if ("reuna".Equals(kohde.Tag)) return;
223        pallo.Destroy();
224        if (kohde.Tag.Equals("kori"))
225            pelaajat[vuorossaOlevaPelaaja].Pisteet.Value++;
226        pallo.Destroyed += delegate { VaihdaPelaajaaVuorossa(); };
227
228        Timer.SingleShot(1.0, delegate { VoikoHeittaa = true; });
229
230    }
231
232
233    void Liikuta(PlatformCharacter hahmo, double nopeus)
234    {
235        if (hahmo.Position.X >= 200 && nopeus > 0)
236        {
237            hahmo.Velocity = new Vector(0, hahmo.Velocity.Y);
238            return;
239        }
240            hahmo.Walk(nopeus);
241    }
242
243    void Hyppaa(PlatformCharacter hahmo, double nopeus)
244    {
245        hahmo.Jump(nopeus);
246    }
247
248    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
249    {
250        maaliAani.Play();
251        MessageDisplay.Add("Heitit korin!");
252        pelaajat[vuorossaOlevaPelaaja].Pisteet.Value++;
253        VaihdaPelaajaaVuorossa();
254        //tahti.Destroy();
255    }
256}
257
258public class Pelaaja
259{
260    IntMeter pisteet;
261    public IntMeter Pisteet { get { return pisteet; } }
262
263    public Pelaaja()
264    {
265        pisteet = new IntMeter(0, 0, 10);
266    }
267
268}
Note: See TracBrowser for help on using the repository browser.