source: 2016/27/AnttiN/SalainenTehtävä/SalainenTehtävä/SalainenTehtävä/SalainenTehtävä.cs @ 7911

Revision 7911, 10.6 KB checked in by anvinurm, 5 years ago (diff)

Tykkki ei toimi

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class SalainenTehtävä : PhysicsGame
10{
11
12   
13    const double nopeus = 2000;
14
15    const int RUUDUN_KOKO = 40;
16
17    PhysicsObject pelaaja1;
18
19    Image pelaajanKuva = LoadImage("Hahmo");
20    Image tahtiKuva = LoadImage("tahti");
21    Image kovaKuutio = LoadImage("kovaKuutio");
22    Image LaskeutuminenKuva = LoadImage("Laskeutuminen");
23    Image SahkoansaKuva = LoadImage("Sähköansa");
24    Image SahkoansaTykkiKuva = LoadImage("SahkoansaTykki");
25    Image SahkoansaSahkoKuva = LoadImage("SahkoansaSahko");
26    Image RajahdysKuva = LoadImage("Rajahdys");
27    Image TykkiKuva = LoadImage("Tykki");
28
29    AssaultRifle pelaajan1Ase;
30
31    SoundEffect maaliAani = LoadSoundEffect("maali");
32
33    public override void Begin()
34    {
35        IsMouseVisible = true;
36        LuoKentta();
37        LisaaNappaimet();
38
39        Camera.Follow(pelaaja1);
40        Camera.ZoomFactor = 1.2;
41        Camera.StayInLevel = true;
42    }
43
44    void LuoKentta()
45    {
46        TileMap kentta = TileMap.FromLevelAsset("kentta1");
47        kentta.SetTileMethod('#', LisaaTaso);
48        kentta.SetTileMethod('*', LisaaTahti);
49        kentta.SetTileMethod('N', LisaaPelaaja);
50        kentta.SetTileMethod('L', LisaaLaskeutuminen);
51        kentta.SetTileMethod('R', LisaaSahkoansaTykkiVaaka);
52        kentta.SetTileMethod('S', LisaaSahkoansaTykkiPysty);
53        kentta.SetTileMethod('T', LisaaTykki);
54        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
55        Level.CreateBorders();
56        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
57        Level.Background.Image = LoadImage("kiviseina");
58    }
59
60    void LisaaTaso(Vector paikka, double leveys, double korkeus)
61    {
62        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
63        taso.Position = paikka;
64        taso.Image = kovaKuutio;
65        Add(taso);
66    }
67
68    void LisaaTahti(Vector paikka, double leveys, double korkeus)
69    {
70        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
71        tahti.IgnoresCollisionResponse = true;
72        tahti.Position = paikka;
73        tahti.Image = tahtiKuva;
74        tahti.Tag = "tahti";
75        Add(tahti);
76    }
77
78    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
79    {
80        pelaaja1 = new PhysicsObject(leveys*0.9, korkeus*0.9);
81        pelaaja1.Position = paikka;
82        pelaaja1.Mass = 4.0;
83        pelaaja1.Image = pelaajanKuva;
84        AddCollisionHandler(pelaaja1, "SahkoansaSahko", TuhoaPelaaja);
85        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
86        AddCollisionHandler(pelaaja1, "Laskeutuminen", TormaaLaskeutumiseen);
87        Add(pelaaja1);
88        pelaaja1.LinearDamping = 0.9;
89        pelaaja1.CanRotate = false;
90
91        pelaajan1Ase = new AssaultRifle(30, 10);
92        pelaajan1Ase.Power.MaxValue = 50;
93        pelaajan1Ase.FireRate = 1;
94        pelaajan1Ase.ProjectileCollision = AmmusOsui;
95        pelaaja1.Add(pelaajan1Ase);
96
97       
98    }
99
100    void LisaaLaskeutuminen(Vector paikka, double leveys, double korkeus)
101    {
102        PhysicsObject Laskeutuminen = PhysicsObject.CreateStaticObject(leveys, korkeus);
103        Laskeutuminen.IgnoresCollisionResponse = true;
104        Laskeutuminen.Position = paikka;
105        Laskeutuminen.Image = LaskeutuminenKuva;
106        Laskeutuminen.Tag = "Laskeutuminen";
107        Add(Laskeutuminen);
108    }
109
110    void LisaaSahkoansaTykkiPysty(Vector paikka, double leveys, double korkeus)
111    {
112        PhysicsObject sahko = LisaaSahkoansaSahko(new Vector(paikka.X, paikka.Y-korkeus), leveys/2, korkeus, Angle.FromDegrees(0));
113        LisaaSahkoansaTykki(paikka, leveys, korkeus, sahko, Angle.FromDegrees(180));
114        LisaaSahkoansaTykki(new Vector(paikka.X, paikka.Y-korkeus*2), leveys, korkeus, sahko, Angle.FromDegrees(0));
115    }
116
117    void LisaaSahkoansaTykkiVaaka(Vector paikka, double leveys, double korkeus)
118    {
119        PhysicsObject sahko = LisaaSahkoansaSahko(new Vector(paikka.X + leveys, paikka.Y), leveys/2, korkeus, Angle.FromDegrees(-90));
120        LisaaSahkoansaTykki(paikka,leveys,korkeus,sahko, Angle.FromDegrees(-90));
121        LisaaSahkoansaTykki(new Vector(paikka.X + leveys*2, paikka.Y), leveys, korkeus, sahko, Angle.FromDegrees(90));
122    }
123
124    void LisaaSahkoansaTykki(Vector paikka, double leveys, double korkeus, PhysicsObject sahko, Angle kaanna)
125    {
126        SahkoansaTykki Sahkoansa = new SahkoansaTykki(leveys, korkeus, sahko);
127        Sahkoansa.Position = paikka;
128        Sahkoansa.Image = SahkoansaTykkiKuva;
129        Sahkoansa.Tag = "SahkoansaTykki";
130        Add(Sahkoansa);
131        Sahkoansa.RotateImage = true;
132        Sahkoansa.Angle = kaanna;
133
134        Label pisteNaytto = new Label();
135        //pisteNaytto.Position = Camera.WorldToScreen(paikka);
136        pisteNaytto.TextColor = Color.Red;
137        pisteNaytto.BindTo(Sahkoansa.ElamaLaskuri);
138        Sahkoansa.Add(pisteNaytto);
139    }
140
141
142
143    PhysicsObject LisaaSahkoansaSahko(Vector paikka, double leveys, double korkeus,Angle kaanna)
144    {
145        PhysicsObject SahkoansaSahko = PhysicsObject.CreateStaticObject(leveys, korkeus);
146        SahkoansaSahko.Position = paikka;
147        SahkoansaSahko.Image = SahkoansaSahkoKuva;
148        SahkoansaSahko.Tag = "SahkoansaSahko";
149        Add(SahkoansaSahko);
150        SahkoansaSahko.RotateImage = true;
151        SahkoansaSahko.Angle = kaanna;
152        return SahkoansaSahko;
153    }
154
155    void LisaaTykki(Vector paikka, double leveys, double korkeus)
156    {
157        Tykki tykki = new Tykki(leveys, korkeus);
158        tykki.Position = paikka;
159        tykki.Image = TykkiKuva;
160        tykki.Tag = "Tykkki";
161        Add(tykki);
162
163        Label pisteNaytto = new Label();
164        //pisteNaytto.Position = Camera.WorldToScreen(paikka);
165        pisteNaytto.TextColor = Color.Red;
166        pisteNaytto.BindTo(tykki.ElamaLaskuri);
167        tykki.Add(pisteNaytto);
168
169    }
170
171    void LisaaNappaimet()
172    {
173        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
174        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
175
176        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, new Vector(-nopeus, 0));
177        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja1, new Vector(nopeus, 0));
178        Keyboard.Listen(Key.Up, ButtonState.Down, Liikuta, "Pelaaja liikkuu ylöspäin", pelaaja1, new Vector(0, nopeus));
179        Keyboard.Listen(Key.Down, ButtonState.Down, Liikuta, "pelaaja liikkuu alaspäin", pelaaja1, new Vector(0, -nopeus));
180        Mouse.Listen(MouseButton.Left, ButtonState.Down, AmmuAseella, "Ammu", pelaajan1Ase);
181        Mouse.ListenMovement(0.1, Tahtaa, "Tähtää aseella");
182
183
184        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
185        ControllerOne.Listen(Button.DPadUp, ButtonState.Down, Liikuta, "Pelaaja liikkuu ylöspäin", pelaaja1, new Vector(0, nopeus));
186        ControllerOne.Listen(Button.DPadDown, ButtonState.Down, Liikuta, "pelaaja liikkuu alaspäin", pelaaja1, new Vector(0, -nopeus));
187        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, new Vector(-nopeus, 0));
188        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja1, new Vector(nopeus, 0));
189        ControllerOne.Listen(Button.A, ButtonState.Down, AmmuAseella, "Ammu", pelaajan1Ase);
190        ControllerOne.ListenAnalog(AnalogControl.RightStick, 0.1, Tahtaa2, "Liikuta pelaajaa tattia pyörittämällä.");
191
192        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
193    }
194
195    void Tahtaa2(AnalogState tatinTila)
196    {
197        pelaajan1Ase.Angle = tatinTila.StateVector.Angle;
198    }
199
200    void Liikuta(PhysicsObject hahmo, Vector nopeus)
201    {
202        hahmo.Push(nopeus);
203    }
204
205
206
207    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
208    {
209        maaliAani.Play();
210        MessageDisplay.Add("Keräsit tähden!");
211        tahti.Destroy();
212    }
213
214    void TormaaLaskeutumiseen(PhysicsObject hahmo, PhysicsObject Laskeutuminen)
215    {
216    MessageDisplay.Add("Läpäisit tason");
217
218    }
219
220
221    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
222    {
223        ammus.Destroy();
224        if(kohde.Tag.ToString() == "SahkoansaTykki")
225        {
226            ((SahkoansaTykki)kohde).ElamaLaskuri.Value -= 10;
227        }
228       
229    }
230
231    void AmmusOsui2(PhysicsObject ammus, PhysicsObject kohde)
232    {
233        ammus.Destroy();
234        if (kohde.Tag.ToString() == "Tykki")
235        {
236            ((Tykki)kohde).ElamaLaskuri.Value -= 10;
237
238        }
239
240    }
241
242    void Tahtaa(AnalogState hiirenLiike)
243    {
244        Vector suunta = (Mouse.PositionOnWorld - pelaajan1Ase.AbsolutePosition).Normalize();
245        pelaajan1Ase.Angle = suunta.Angle;
246    }
247    void AmmuAseella(AssaultRifle ase)
248    {
249        PhysicsObject ammus = ase.Shoot();
250
251        if (ammus != null)
252        {
253            ammus.Size *= 1;
254            //ammus.Image = ...
255            ammus.MaximumLifetime = TimeSpan.FromSeconds(20.0);
256        }
257    }
258
259    void TuhoaPelaaja(PhysicsObject pelaaja, PhysicsObject kohde)
260    {
261        pelaaja.Destroy();
262        Explosion rajahdys = new Explosion(500);
263        rajahdys.Position = pelaaja.Position;
264        Add(rajahdys);
265        Mouse.Disable(MouseButton.Left);
266        Timer.SingleShot(2, Havisit);
267    }
268
269    void Havisit()
270    {
271        ClearAll();
272        Level.Background.Color = Color.Black;
273        MultiSelectWindow alkuValikko = new MultiSelectWindow("Hävisit pelin","Aloita alusta", "Lopeta");
274        Add(alkuValikko);
275        alkuValikko.AddItemHandler(0, Begin);
276        alkuValikko.AddItemHandler(1, Exit);
277    }
278}
279   
280
281
282class SahkoansaTykki : PhysicsObject
283{
284    private IntMeter elamaLaskuri = new IntMeter(50, 0, 50);
285
286    private PhysicsObject sahko;
287    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
288
289    public SahkoansaTykki(double leveys, double korkeus, PhysicsObject sahko)
290        : base(leveys, korkeus)
291    {
292        MakeStatic();
293        this.sahko = sahko;
294        elamaLaskuri.LowerLimit += delegate { this.sahko.Destroy(); this.Destroy(); };
295    }
296
297
298
299
300}
301
302class Tykki : PhysicsObject
303{
304    private IntMeter elamaLaskuri = new IntMeter(20, 0, 20);
305    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
306
307    public Tykki(double leveys, double korkeus)
308        : base(leveys, korkeus)
309    {
310        MakeStatic();
311        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
312    }
313}
Note: See TracBrowser for help on using the repository browser.