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

Revision 7862, 7.2 KB checked in by anvinurm, 3 years ago (diff)

Sähköansojen alku ja aseiden alku.

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    const double nopeus = 2000;
12
13    const int RUUDUN_KOKO = 40;
14
15    PhysicsObject pelaaja1;
16
17    Image pelaajanKuva = LoadImage("Hahmo");
18    Image tahtiKuva = LoadImage("tahti");
19    Image kovaKuutio = LoadImage("kovaKuutio");
20    Image LaskeutuminenKuva = LoadImage("Laskeutuminen");
21    Image SahkoansaKuva = LoadImage("Sähköansa");
22    Image SahkoansaTykkiKuva = LoadImage("SahkoansaTykki");
23    Image SahkoansaSahkoKuva = LoadImage("SahkoansaSahko");
24    AssaultRifle pelaajan1Ase;
25
26    SoundEffect maaliAani = LoadSoundEffect("maali");
27
28    public override void Begin()
29    {
30
31        LuoKentta();
32        LisaaNappaimet();
33
34        Camera.Follow(pelaaja1);
35        Camera.ZoomFactor = 1.2;
36        Camera.StayInLevel = true;
37    }
38
39    void LuoKentta()
40    {
41        TileMap kentta = TileMap.FromLevelAsset("kentta1");
42        kentta.SetTileMethod('#', LisaaTaso);
43        kentta.SetTileMethod('*', LisaaTahti);
44        kentta.SetTileMethod('N', LisaaPelaaja);
45        kentta.SetTileMethod('L', LisaaLaskeutuminen);
46        kentta.SetTileMethod('R', LisaaSahkoansaTykkiVaaka);
47        kentta.SetTileMethod('S', LisaaSahkoansaTykkiPysty);
48        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
49        Level.CreateBorders();
50        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
51        Level.Background.Image = LoadImage("kiviseina");
52    }
53
54    void LisaaTaso(Vector paikka, double leveys, double korkeus)
55    {
56        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
57        taso.Position = paikka;
58        taso.Image = kovaKuutio;
59        Add(taso);
60    }
61
62    void LisaaTahti(Vector paikka, double leveys, double korkeus)
63    {
64        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
65        tahti.IgnoresCollisionResponse = true;
66        tahti.Position = paikka;
67        tahti.Image = tahtiKuva;
68        tahti.Tag = "tahti";
69        Add(tahti);
70    }
71
72    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
73    {
74        pelaaja1 = new PhysicsObject(leveys*0.9, korkeus*0.9);
75        pelaaja1.Position = paikka;
76        pelaaja1.Mass = 4.0;
77        pelaaja1.Image = pelaajanKuva;
78        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
79        AddCollisionHandler(pelaaja1, "Laskeutuminen", TormaaLaskeutumiseen);
80        Add(pelaaja1);
81        pelaaja1.LinearDamping = 0.9;
82        pelaaja1.CanRotate = false;
83
84        pelaajan1Ase = new AssaultRifle(30, 10);
85        pelaajan1Ase = new AssaultRifle(30, 10);
86        pelaajan1Ase.ProjectileCollision = AmmusOsui;
87        pelaaja1.Add(pelaajan1Ase);
88    }
89
90    void LisaaLaskeutuminen(Vector paikka, double leveys, double korkeus)
91    {
92        PhysicsObject Laskeutuminen = PhysicsObject.CreateStaticObject(leveys, korkeus);
93        Laskeutuminen.IgnoresCollisionResponse = true;
94        Laskeutuminen.Position = paikka;
95        Laskeutuminen.Image = LaskeutuminenKuva;
96        Laskeutuminen.Tag = "Laskeutuminen";
97        Add(Laskeutuminen);
98    }
99
100    void LisaaSahkoansaTykkiPysty(Vector paikka, double leveys, double korkeus)
101    {
102        PhysicsObject sahko = LisaaSahkoansaSahko(new Vector(paikka.X, paikka.Y-korkeus), leveys/2, korkeus, Angle.FromDegrees(0));
103        LisaaSahkoansaTykki(paikka, leveys, korkeus, sahko, Angle.FromDegrees(180));
104        LisaaSahkoansaTykki(new Vector(paikka.X, paikka.Y-korkeus*2), leveys, korkeus, sahko, Angle.FromDegrees(0));
105    }
106
107    void LisaaSahkoansaTykkiVaaka(Vector paikka, double leveys, double korkeus)
108    {
109        PhysicsObject sahko = LisaaSahkoansaSahko(new Vector(paikka.X + leveys, paikka.Y), leveys/2, korkeus, Angle.FromDegrees(-90));
110        LisaaSahkoansaTykki(paikka,leveys,korkeus,sahko, Angle.FromDegrees(-90));
111        LisaaSahkoansaTykki(new Vector(paikka.X + leveys*2, paikka.Y), leveys, korkeus, sahko, Angle.FromDegrees(90));
112    }
113
114    void LisaaSahkoansaTykki(Vector paikka, double leveys, double korkeus, PhysicsObject sahko, Angle kaanna)
115    {
116        SahkoansaTykki Sahkoansa = new SahkoansaTykki(leveys, korkeus, sahko);
117        Sahkoansa.Position = paikka;
118        Sahkoansa.Image = SahkoansaTykkiKuva;
119        Sahkoansa.Tag = "SahkoansaTykki";
120        Add(Sahkoansa);
121        Sahkoansa.RotateImage = true;
122        Sahkoansa.Angle = kaanna;
123    }
124
125
126
127    PhysicsObject LisaaSahkoansaSahko(Vector paikka, double leveys, double korkeus,Angle kaanna)
128    {
129        PhysicsObject SahkoansaSahko = PhysicsObject.CreateStaticObject(leveys, korkeus);
130        SahkoansaSahko.Position = paikka;
131        SahkoansaSahko.Image = SahkoansaSahkoKuva;
132        SahkoansaSahko.Tag = "SahkoansaSahko";
133        Add(SahkoansaSahko);
134        SahkoansaSahko.RotateImage = true;
135        SahkoansaSahko.Angle = kaanna;
136        return SahkoansaSahko;
137    }
138    void LisaaNappaimet()
139    {
140        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
141        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
142
143        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, new Vector(-nopeus, 0));
144        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, new Vector(nopeus, 0));
145        Keyboard.Listen(Key.Up, ButtonState.Down, Liikuta, "Pelaaja liikkuu ylöspäin", pelaaja1, new Vector(0, nopeus));
146        Keyboard.Listen(Key.Down, ButtonState.Down, Liikuta, "pelaaja liikkuu alaspäin", pelaaja1, new Vector(0, -nopeus));
147        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", pelaajan1Ase);
148
149        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
150
151
152
153        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
154    }
155
156    void Liikuta(PhysicsObject hahmo, Vector nopeus)
157    {
158        hahmo.Push(nopeus);
159    }
160
161
162
163    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
164    {
165        maaliAani.Play();
166        MessageDisplay.Add("Keräsit tähden!");
167        tahti.Destroy();
168    }
169
170    void TormaaLaskeutumiseen(PhysicsObject hahmo, PhysicsObject Laskeutuminen)
171    {
172    MessageDisplay.Add("Läpäisit tason");
173
174    }
175
176}
177
178class SahkoansaTykki : PhysicsObject
179{
180    private IntMeter elamaLaskuri = new IntMeter(50, 0, 50);
181
182    private PhysicsObject sahko;
183    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
184
185    public SahkoansaTykki(double leveys, double korkeus, PhysicsObject sahko)
186        : base(leveys, korkeus)
187    {
188        MakeStatic();
189        this.sahko = sahko;
190        elamaLaskuri.LowerLimit += delegate { this.sahko.Destroy(); this.Destroy(); };
191    }
192
193    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
194    {
195        ammus.Destroy();
196    }
197
198    void AmmuAseella(AssaultRifle ase)
199    {
200        PhysicsObject ammus = ase.Shoot();
201
202        if (ammus != null)
203        {
204            ammus.Size *= 3;
205            ammus.Image = ...
206            ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
207        }
208    }
209
210}
Note: See TracBrowser for help on using the repository browser.