source: 2016/24/IlariJ/ShootIO/ShootIO/ShootIO/ShootIO.cs @ 7289

Revision 7289, 6.1 KB checked in by koannak, 4 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
9public class ShootIO : PhysicsGame
10{
11    Image zompi1 = LoadImage("zompi1");
12    Image zompi2 = LoadImage("zompi2");
13    Image zompi3 = LoadImage("zompi3");
14    Image taustaKuva = LoadImage("tausta");
15    AssaultRifle pyssy;
16    private double liikkumisnopeus = 100;
17    Image tankinKuva = LoadImage("tankki");
18    Tankki pelaaja;
19    DoubleMeter elamaLaskuri;
20    public override void Begin()
21    {
22        LuoKentta();
23        LuoPelaaja();
24        LisaaOhjaimet();
25        LuoElamaLaskuri();
26        Mouse.ListenMovement(0.1, Tahtaa, "Tähtää aseella");
27        Camera.Follow(pelaaja);
28        Camera.Zoom(4);
29        // TODO: Kirjoita ohjelmakoodisi tähän
30
31        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
32        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
33    }
34    void LuoKentta()
35    {
36        //1. Luetaan kuva uuteen ColorTileMappiin, kuvan nimen perässä ei .png-päätettä.
37        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("mappi");
38
39        //2. Kerrotaan mitä aliohjelmaa kutsutaan, kun tietyn värinen pikseli tulee vastaan kuvatiedostossa.
40
41        ruudut.SetTileMethod(Color.Black, LuoEste);
42        ruudut.SetTileMethod(Color.Red, LuoPommi);
43        ruudut.SetTileMethod(Color.FromHexCode("0026FF"), LuoVihu, zompi1);
44        ruudut.SetTileMethod(Color.FromHexCode("FFD800"), LuoVihu, zompi2);
45        ruudut.SetTileMethod(Color.FromHexCode("FF6A00"), LuoVihu, zompi3);
46
47        //3. Execute luo kentän
48        //   Parametreina leveys ja korkeus
49        ruudut.Execute(20, 20);
50
51        Level.Background.Image = taustaKuva;
52        Level.Background.FitToLevel();
53    }
54
55    void LuoPelaaja()
56    {
57        pelaaja = new Tankki(10, 10);
58        pelaaja.Position = new Vector(0,0);
59        AddCollisionHandler(pelaaja, "pommi", TormaaPommiin);
60        Add(pelaaja);
61        pelaaja.Image = tankinKuva;
62        pelaaja.IgnoresExplosions = false;
63        pelaaja.CanRotate = false;
64
65        LuoAse();
66
67    }
68
69    void LuoEste(Vector paikka, double leveys, double korkeus)
70    {
71        PhysicsObject este = PhysicsObject.CreateStaticObject(leveys, korkeus);
72        este.Position = paikka;
73        este.Image = LoadImage("este");
74        este.CollisionIgnoreGroup = 1;
75        Add(este);
76    }
77
78    void LuoPommi(Vector paikka, double leveys, double korkeus)
79    {
80        PhysicsObject pommi = PhysicsObject.CreateStaticObject(11, 11);
81        pommi.IgnoresCollisionResponse = true;
82        pommi.Position = paikka;
83        pommi.Image = LoadImage("pommi");
84        pommi.Tag = "pommi";
85        Add(pommi, 1);
86    }
87
88    void LisaaOhjaimet()
89    {
90        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, null, new Vector(-liikkumisnopeus, 0));
91        Keyboard.Listen(Key.A, ButtonState.Released, Liikuta, null, Vector.Zero);
92        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, null, new Vector(liikkumisnopeus, 0));
93        Keyboard.Listen(Key.D, ButtonState.Released, Liikuta, null, Vector.Zero);
94        Keyboard.Listen(Key.S, ButtonState.Down, Liikuta, null, new Vector(0, -liikkumisnopeus));
95        Keyboard.Listen(Key.S, ButtonState.Released, Liikuta, null, Vector.Zero);
96        Keyboard.Listen(Key.W, ButtonState.Down, Liikuta, null, new Vector(0, liikkumisnopeus));
97        Keyboard.Listen(Key.W, ButtonState.Released, Liikuta, null, Vector.Zero);
98        Mouse.Listen(MouseButton.Left, ButtonState.Down, AmmuAseella, "Ammu", pyssy);
99
100    }
101
102    void Liikuta(Vector speed)
103    {
104        pelaaja.Velocity = speed;
105    }
106
107    void TormaaPommiin(PhysicsObject pelaaja, PhysicsObject pommi)
108    {
109        Explosion rajahdys = new Explosion(50);
110        rajahdys.Position = pommi.Position;
111        Add(rajahdys);
112        pommi.Destroy();
113        this.pelaaja.ElamaLaskuri.Value -=2;
114        elamaLaskuri.Value -=2;
115        rajahdys.Speed = 100.0;
116        rajahdys.Force = 100;
117    }
118
119    void LuoElamaLaskuri()
120    {
121        elamaLaskuri = new DoubleMeter(10);
122        elamaLaskuri.MaxValue = 10;
123        elamaLaskuri.LowerLimit += ElamaLoppui;
124
125        ProgressBar elamaPalkki = new ProgressBar(150, 20);
126        elamaPalkki.X = Screen.Left + 150;
127        elamaPalkki.Y = Screen.Top - 20;
128        elamaPalkki.BindTo(elamaLaskuri);
129        Add(elamaPalkki);
130    }
131
132    void ElamaLoppui()
133    {
134        MessageDisplay.Add("Elämät loppuivat, voi voi.");
135    }
136
137    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
138    {
139        //ammus.Destroy();
140    }
141
142    void AmmuAseella(AssaultRifle ase)
143    {
144        PhysicsObject ammus = pyssy.Shoot();
145
146        if (ammus != null)
147        {
148            ammus.Size *= 0.5;
149            //ammus.Image = ...
150            ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
151        }
152    }
153
154    void LuoAse()
155    {
156        pyssy = new AssaultRifle(20, 5);
157        //pyssy.ProjectileCollision = AmmusOsui;
158
159        //Ammusten määrä aluksi:
160        pyssy.Ammo.Value = 1000;
161        //Mitä tapahtuu kun ammus osuu johonkin?
162        pyssy.ProjectileCollision = AmmusOsui;
163        pyssy.IsVisible = false;
164        pelaaja.Add(pyssy);
165    }
166
167    void Tahtaa(AnalogState hiirenLiike)
168    {
169        Vector suuntaPelaaja = (Mouse.PositionOnWorld - pelaaja.AbsolutePosition).Normalize();
170        Mouse.IsCursorVisible = true;
171        pelaaja.Angle = suuntaPelaaja.Angle;
172    }
173
174    void LuoVihu(Vector paikka, double leveys, double korkeus, Image vihuKuva)
175
176    {
177        PhysicsObject Vihu = new PhysicsObject(10, 12);
178        Vihu.Shape = Shape.Rectangle;
179        Add(Vihu);
180        Vihu.Image = vihuKuva;
181        Vihu.Position = paikka;
182    }
183
184
185}
186
187class Tankki : PhysicsObject
188{
189    private IntMeter elamaLaskuri = new IntMeter(10, 0, 20);
190    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
191
192    public Tankki(double leveys, double korkeus)
193        : base(leveys, korkeus)
194    {
195        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
196    }
197
198}
Note: See TracBrowser for help on using the repository browser.