source: 2014/24/AakeR/UkkeliTappelu/UkkeliTappelu/UkkeliTappelu/UkkeliTappelu.cs @ 4946

Revision 4946, 8.2 KB checked in by aaruuttu, 8 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9
10class Ukkeli : PhysicsObject
11{
12    public bool saaHypätä = true;
13    public int suunta = 0;
14
15    public Ukkeli(double leveys, double korkeus)
16        : base(leveys, korkeus)
17    {
18        CanRotate = false;
19    }
20
21    public void Hyppää()
22    {
23        if (saaHypätä)
24        {
25            Hit(new Vector(0, 2000));
26            saaHypätä = false;
27        }
28    }
29
30    public void Liiku(int liikkumisSuunta)
31    {
32        suunta = liikkumisSuunta;
33        Push(new Vector(suunta*3000, 0));
34    }
35}
36
37
38public class UkkeliTappelu : PhysicsGame
39{
40    const double nopeus = 200;
41    const double hyppyNopeus = 750;
42    const int RUUDUN_KOKO = 40;
43
44    Ukkeli pelaaja1;
45    Ukkeli pelaaja2;
46    Ukkeli pelaaja3;
47    Ukkeli pelaaja4;
48
49    Image pelaajan1Kuva = LoadImage("Ukkeli1");
50    Image pelaajan2Kuva = LoadImage("Ukkeli2");
51    Image pelaajan3Kuva = LoadImage("Ukkeli3");
52    Image pelaajan4Kuva = LoadImage("Ukkeli4");
53    Image tahtiKuva = LoadImage("tahti");
54    Image laavaKuva = LoadImage("Lava");
55    Image nyrkkiKuvaoikea = LoadImage("Nyrkki");
56    Image nyrkkiKuvavasen = LoadImage("Nyrkki2");
57
58    SoundEffect hyppyAani = LoadSoundEffect("Jump");
59    SoundEffect laskeutumisAani = LoadSoundEffect("Laskeutuminen");
60    SoundEffect lyontiAani = LoadSoundEffect("Punch");
61
62    public override void Begin()
63    {
64        Gravity = new Vector(0, -1000);
65
66        LuoKentta();
67        LisaaNappaimet();
68
69        //Camera.Follow(pelaaja1, pelaaja2, pelaaja3, pelaaja4);
70        //Camera.ZoomFactor = 1.5;
71        Camera.ZoomToLevel();
72        //Camera.StayInLevel = true;
73        //Camera.Velocity = new Vector(0, 5);
74    }
75
76    void LuoKentta()
77    {
78        TileMap kentta = TileMap.FromLevelAsset("kentta1");
79        kentta.SetTileMethod('#', LisaaTaso);
80        kentta.SetTileMethod('2', LisaaPelaaja2);
81        kentta.SetTileMethod('1', LisaaPelaaja1);
82        kentta.SetTileMethod('3', LisaaPelaaja3);
83        kentta.SetTileMethod('4', LisaaPelaaja4);
84        kentta.Optimize('#');
85        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
86        Level.CreateBorders();
87        Level.Background.CreateGradient(Color.Orange, Color.DarkRed );
88        PhysicsObject Laava = PhysicsObject.CreateStaticObject(Level.Width, 800);
89        Add(Laava);
90        Laava.Image = laavaKuva;
91        Laava.Top = Level.Bottom + 10;
92        Laava.Velocity = new Vector(0, 5);
93        Laava.Tag = "laava";
94    }
95
96    void LisaaTaso(Vector paikka, double leveys, double korkeus)
97    {
98        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
99        taso.Position = paikka;
100        taso.Color = Color.Gray;
101        Add(taso);
102        taso.Tag = "Seina";
103    }
104
105    void LisaaTahti(Vector paikka, double leveys, double korkeus)
106    {
107        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
108        tahti.IgnoresCollisionResponse = true;
109        tahti.Position = paikka;
110        tahti.Image = tahtiKuva;
111        tahti.Tag = "tahti";
112        Add(tahti);
113    }
114
115    Ukkeli LuoPelaaja(double leveys, double korkeus, Image kuva)
116    {
117        Ukkeli pelaaja = new Ukkeli(leveys, korkeus );
118        pelaaja.Mass = 4.0;
119        pelaaja.Image = kuva;
120        pelaaja.Tag = "pelaaja";
121        AddCollisionHandler(pelaaja, "tahti", TormaaTahteen);
122        AddCollisionHandler(pelaaja, "laava", TormaaLaavaan);
123        AddCollisionHandler(pelaaja, "Seina", TormaaSeinaan);
124        Add(pelaaja); 
125        return pelaaja;
126    }
127
128    void LisaaPelaaja1(Vector paikka, double leveys, double korkeus)
129    {
130        pelaaja1 = LuoPelaaja(leveys, korkeus, pelaajan1Kuva);
131        pelaaja1.Position = paikka;
132    }
133
134    void LisaaPelaaja2(Vector paikka, double leveys, double korkeus)
135    {
136        pelaaja2 = LuoPelaaja(leveys, korkeus, pelaajan2Kuva);
137        pelaaja2.Position = paikka;
138    }
139
140    void LisaaPelaaja3(Vector paikka, double leveys, double korkeus)
141    {
142        pelaaja3 = LuoPelaaja(leveys, korkeus, pelaajan3Kuva);
143        pelaaja3.Position = paikka;
144    }
145
146    void LisaaPelaaja4(Vector paikka, double leveys, double korkeus)
147    {
148        pelaaja4 = LuoPelaaja(leveys, korkeus, pelaajan4Kuva);
149        pelaaja4.Position = paikka;
150    }
151
152
153
154    void LisaaNappaimet()
155    {
156        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
157        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
158
159        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -1);
160        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, 1);
161        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
162        Keyboard.Listen(Key.Down, ButtonState.Pressed, Lyo, "Pelaaja lyö", pelaaja1, new Ukkeli[] {pelaaja2, pelaaja3, pelaaja4});
163
164        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, -1);
165        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, 1);
166        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2, hyppyNopeus);
167        Keyboard.Listen(Key.S, ButtonState.Pressed, Lyo, "Pelaaja lyö", pelaaja2, new Ukkeli[] {pelaaja1, pelaaja3, pelaaja4});
168
169        Keyboard.Listen(Key.J, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja3, -1);
170        Keyboard.Listen(Key.L, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja3, 1);
171        Keyboard.Listen(Key.I, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja3, hyppyNopeus);
172        Keyboard.Listen(Key.K, ButtonState.Pressed, Lyo, "Pelaaja lyö", pelaaja3, new Ukkeli[] { pelaaja1, pelaaja2, pelaaja4 });
173
174        Keyboard.Listen(Key.NumPad4, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja4, -1);
175        Keyboard.Listen(Key.NumPad6, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja4, 1);
176        Keyboard.Listen(Key.NumPad8, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja4, hyppyNopeus);
177        Keyboard.Listen(Key.NumPad5, ButtonState.Pressed, Lyo, "Pelaaja lyö", pelaaja4, new Ukkeli[] { pelaaja1, pelaaja2, pelaaja3 });
178
179        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
180
181        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -1);
182        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, 1);
183        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
184
185        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
186    }
187
188    void Lyo(Ukkeli hahmo, Ukkeli[] muut)
189    {
190        if (hahmo.IsDestroyed) return;
191
192        PhysicsObject Nyrkki = PhysicsObject.CreateStaticObject(20, 30);
193        Add(Nyrkki, -1);
194        Nyrkki.Position = hahmo.Position+new Vector(hahmo.suunta, 0) * 30;
195        Nyrkki.Image = (hahmo.suunta > 0) ? nyrkkiKuvaoikea : nyrkkiKuvavasen;
196        Nyrkki.MaximumLifetime = TimeSpan.FromSeconds(0.1);
197        Nyrkki.IgnoresCollisionResponse = true;
198
199        AddCollisionHandler(Nyrkki, "pelaaja", delegate(PhysicsObject nyrkki, PhysicsObject pelaaja)
200        {
201            if (pelaaja != hahmo)
202            {
203                pelaaja.Hit((pelaaja.Position - nyrkki.Position).Normalize() * 1500);
204                //pelaaja.Velocity = (pelaaja.Position - nyrkki.Position).Normalize() * 1500;
205            }
206        });
207    }
208
209    void Liikuta(Ukkeli hahmo, int suunta)
210    {
211        hahmo.Liiku(suunta);
212    }
213
214    void Hyppaa(Ukkeli hahmo, double nopeus)
215    {
216        hahmo.Hyppää();
217    }
218
219    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
220    {
221        MessageDisplay.Add("Keräsit tähden!");
222        tahti.Destroy();
223    }
224
225    void TormaaLaavaan(PhysicsObject hahmo, PhysicsObject laava)
226    {
227        hahmo.Destroy();
228    }
229
230    void TormaaSeinaan(PhysicsObject hahmo, PhysicsObject Seina)
231    {
232        (hahmo as Ukkeli).saaHypätä = true;
233    }
234}
Note: See TracBrowser for help on using the repository browser.