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

Revision 7882, 8.6 KB checked in by anvinurm, 3 years ago (diff)

aseet ja hitpointsit

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
28    AssaultRifle pelaajan1Ase;
29
30    SoundEffect maaliAani = LoadSoundEffect("maali");
31
32    public override void Begin()
33    {
34        IsMouseVisible = true;
35        LuoKentta();
36        LisaaNappaimet();
37
38        Camera.Follow(pelaaja1);
39        Camera.ZoomFactor = 1.2;
40        Camera.StayInLevel = true;
41    }
42
43    void LuoKentta()
44    {
45        TileMap kentta = TileMap.FromLevelAsset("kentta1");
46        kentta.SetTileMethod('#', LisaaTaso);
47        kentta.SetTileMethod('*', LisaaTahti);
48        kentta.SetTileMethod('N', LisaaPelaaja);
49        kentta.SetTileMethod('L', LisaaLaskeutuminen);
50        kentta.SetTileMethod('R', LisaaSahkoansaTykkiVaaka);
51        kentta.SetTileMethod('S', LisaaSahkoansaTykkiPysty);
52        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
53        Level.CreateBorders();
54        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
55        Level.Background.Image = LoadImage("kiviseina");
56    }
57
58    void LisaaTaso(Vector paikka, double leveys, double korkeus)
59    {
60        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
61        taso.Position = paikka;
62        taso.Image = kovaKuutio;
63        Add(taso);
64    }
65
66    void LisaaTahti(Vector paikka, double leveys, double korkeus)
67    {
68        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
69        tahti.IgnoresCollisionResponse = true;
70        tahti.Position = paikka;
71        tahti.Image = tahtiKuva;
72        tahti.Tag = "tahti";
73        Add(tahti);
74    }
75
76    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
77    {
78        pelaaja1 = new PhysicsObject(leveys*0.9, korkeus*0.9);
79        pelaaja1.Position = paikka;
80        pelaaja1.Mass = 4.0;
81        pelaaja1.Image = pelaajanKuva;
82        AddCollisionHandler(pelaaja1, "SahkoansaSahko", TuhoaPelaaja);
83        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
84        AddCollisionHandler(pelaaja1, "Laskeutuminen", TormaaLaskeutumiseen);
85        Add(pelaaja1);
86        pelaaja1.LinearDamping = 0.9;
87        pelaaja1.CanRotate = false;
88
89        pelaajan1Ase = new AssaultRifle(30, 10);
90        pelaajan1Ase.Power.MaxValue = 50;
91        pelaajan1Ase.FireRate = 1;
92        pelaajan1Ase.ProjectileCollision = AmmusOsui;
93        pelaaja1.Add(pelaajan1Ase);
94
95       
96    }
97
98    void LisaaLaskeutuminen(Vector paikka, double leveys, double korkeus)
99    {
100        PhysicsObject Laskeutuminen = PhysicsObject.CreateStaticObject(leveys, korkeus);
101        Laskeutuminen.IgnoresCollisionResponse = true;
102        Laskeutuminen.Position = paikka;
103        Laskeutuminen.Image = LaskeutuminenKuva;
104        Laskeutuminen.Tag = "Laskeutuminen";
105        Add(Laskeutuminen);
106    }
107
108    void LisaaSahkoansaTykkiPysty(Vector paikka, double leveys, double korkeus)
109    {
110        PhysicsObject sahko = LisaaSahkoansaSahko(new Vector(paikka.X, paikka.Y-korkeus), leveys/2, korkeus, Angle.FromDegrees(0));
111        LisaaSahkoansaTykki(paikka, leveys, korkeus, sahko, Angle.FromDegrees(180));
112        LisaaSahkoansaTykki(new Vector(paikka.X, paikka.Y-korkeus*2), leveys, korkeus, sahko, Angle.FromDegrees(0));
113    }
114
115    void LisaaSahkoansaTykkiVaaka(Vector paikka, double leveys, double korkeus)
116    {
117        PhysicsObject sahko = LisaaSahkoansaSahko(new Vector(paikka.X + leveys, paikka.Y), leveys/2, korkeus, Angle.FromDegrees(-90));
118        LisaaSahkoansaTykki(paikka,leveys,korkeus,sahko, Angle.FromDegrees(-90));
119        LisaaSahkoansaTykki(new Vector(paikka.X + leveys*2, paikka.Y), leveys, korkeus, sahko, Angle.FromDegrees(90));
120    }
121
122    void LisaaSahkoansaTykki(Vector paikka, double leveys, double korkeus, PhysicsObject sahko, Angle kaanna)
123    {
124        SahkoansaTykki Sahkoansa = new SahkoansaTykki(leveys, korkeus, sahko);
125        Sahkoansa.Position = paikka;
126        Sahkoansa.Image = SahkoansaTykkiKuva;
127        Sahkoansa.Tag = "SahkoansaTykki";
128        Add(Sahkoansa);
129        Sahkoansa.RotateImage = true;
130        Sahkoansa.Angle = kaanna;
131
132        Label pisteNaytto = new Label();
133        pisteNaytto.TextColor = Color.Black;
134        pisteNaytto.Color = Color.White;
135        pisteNaytto.BindTo(Sahkoansa.ElamaLaskuri);
136        Sahkoansa.Add(pisteNaytto);
137    }
138
139
140
141    PhysicsObject LisaaSahkoansaSahko(Vector paikka, double leveys, double korkeus,Angle kaanna)
142    {
143        PhysicsObject SahkoansaSahko = PhysicsObject.CreateStaticObject(leveys, korkeus);
144        SahkoansaSahko.Position = paikka;
145        SahkoansaSahko.Image = SahkoansaSahkoKuva;
146        SahkoansaSahko.Tag = "SahkoansaSahko";
147        Add(SahkoansaSahko);
148        SahkoansaSahko.RotateImage = true;
149        SahkoansaSahko.Angle = kaanna;
150        return SahkoansaSahko;
151    }
152    void LisaaNappaimet()
153    {
154        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
155        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
156
157        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, new Vector(-nopeus, 0));
158        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, new Vector(nopeus, 0));
159        Keyboard.Listen(Key.Up, ButtonState.Down, Liikuta, "Pelaaja liikkuu ylöspäin", pelaaja1, new Vector(0, nopeus));
160        Keyboard.Listen(Key.Down, ButtonState.Down, Liikuta, "pelaaja liikkuu alaspäin", pelaaja1, new Vector(0, -nopeus));
161        Mouse.Listen(MouseButton.Left, ButtonState.Down, AmmuAseella, "Ammu", pelaajan1Ase);
162        Mouse.ListenMovement(0.1, Tahtaa, "Tähtää aseella");
163
164
165        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
166       
167
168
169
170        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
171    }
172
173    void Liikuta(PhysicsObject hahmo, Vector nopeus)
174    {
175        hahmo.Push(nopeus);
176    }
177
178
179
180    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
181    {
182        maaliAani.Play();
183        MessageDisplay.Add("Keräsit tähden!");
184        tahti.Destroy();
185    }
186
187    void TormaaLaskeutumiseen(PhysicsObject hahmo, PhysicsObject Laskeutuminen)
188    {
189    MessageDisplay.Add("Läpäisit tason");
190
191    }
192
193
194    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
195    {
196        ammus.Destroy();
197        if(kohde.Tag.ToString() == "SahkoansaTykki")
198        {
199            ((SahkoansaTykki)kohde).ElamaLaskuri.Value -= 10;
200        }
201    }
202
203    void Tahtaa(AnalogState hiirenLiike)
204    {
205        Vector suunta = (Mouse.PositionOnWorld - pelaajan1Ase.AbsolutePosition).Normalize();
206        pelaajan1Ase.Angle = suunta.Angle;
207    }
208    void AmmuAseella(AssaultRifle ase)
209    {
210        PhysicsObject ammus = ase.Shoot();
211
212        if (ammus != null)
213        {
214            ammus.Size *= 1;
215            //ammus.Image = ...
216            ammus.MaximumLifetime = TimeSpan.FromSeconds(20.0);
217        }
218    }
219
220    void TuhoaPelaaja(PhysicsObject pelaaja, PhysicsObject kohde)
221    {
222        pelaaja.Destroy();
223        Explosion rajahdys = new Explosion(500);
224        rajahdys.Position = pelaaja.Position;
225        Add(rajahdys);
226        Mouse.Disable(MouseButton.Left);
227        Timer.SingleShot(2, Havisit);
228    }
229
230    void Havisit()
231    {
232        ClearAll();
233        Level.Background.Color = Color.Black;
234        MultiSelectWindow alkuValikko = new MultiSelectWindow("Hävisit pelin","Aloita alusta", "Lopeta");
235        Add(alkuValikko);
236        alkuValikko.AddItemHandler(0, Begin);
237        alkuValikko.AddItemHandler(1, Exit);
238    }
239}
240   
241
242
243class SahkoansaTykki : PhysicsObject
244{
245    private IntMeter elamaLaskuri = new IntMeter(50, 0, 50);
246
247    private PhysicsObject sahko;
248    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
249
250    public SahkoansaTykki(double leveys, double korkeus, PhysicsObject sahko)
251        : base(leveys, korkeus)
252    {
253        MakeStatic();
254        this.sahko = sahko;
255        elamaLaskuri.LowerLimit += delegate { this.sahko.Destroy(); this.Destroy(); };
256    }
257
258
259
260
261}
Note: See TracBrowser for help on using the repository browser.