source: 2012/26/TuukkaT/SpaceShooter/SpaceShooter/SpaceShooter/SpaceShooter.cs @ 3418

Revision 3418, 8.1 KB checked in by juiitamm, 8 years ago (diff)

Talletus.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9class Vihu : PhysicsObject
10{
11    public Timer ampumisAjastin;
12
13    public Vihu(double leveys, double korkeus)
14        : base(leveys, korkeus)
15    {
16        ampumisAjastin = new Timer();
17    }
18}
19
20
21public class SpaceShooter : PhysicsGame
22{
23    PhysicsObject pelaaja;
24    PhysicsObject pelaaja2;
25    List<Vihu> vihut = new List<Vihu>();
26    IntMeter pistelaskuri;
27    public override void Begin()
28
29    {
30        MultiSelectWindow valikko = new MultiSelectWindow("Tervetuloa peliin",
31        "Aloita peli", "Parhaat pisteet", "Lopeta");
32        valikko.ItemSelected += PainettiinValikonNappia;
33        Add(valikko);
34
35       
36    }
37    void PainettiinValikonNappia(int valinta)
38    {
39        switch (valinta)
40        {
41            case 0:
42                aloitapeli();
43                break;
44            case 1:
45                //ParhaatPisteet();
46                break;
47            case 2:
48                Exit();
49                break;
50        }
51    } 
52
53
54    void aloitapeli()
55
56    {
57
58        pistelaskuri = new IntMeter(0);
59
60        Label pisteNaytto = new Label();
61        pisteNaytto.X = Screen.Left + 100;
62        pisteNaytto.Y = Screen.Top - 100;
63        pisteNaytto.TextColor = Color.Black;
64        pisteNaytto.Color = Color.White;
65
66        pisteNaytto.BindTo(pistelaskuri);
67        Add(pisteNaytto);
68       
69        pelaaja = new PhysicsObject(80, 120);
70        pelaaja.Image = LoadImage("Untitled");
71        pelaaja.CollisionIgnoreGroup = 2;
72        pelaaja.Tag = "pelaaja";
73        //AddCollisionHandler(pelaaja, CollisionHandler.DestroyObject);
74        Add(pelaaja);
75
76        pelaaja2 = new PhysicsObject(80, 120);
77        pelaaja2.Image = LoadImage("Untitled");
78        pelaaja2.Image.ReplaceColor(Color.White, Color.Red);
79        pelaaja2.Image.ReplaceColor(Color.Black, Color.White);
80        pelaaja2.CollisionIgnoreGroup = 2;
81        pelaaja2.Tag = "pelaaja";
82        //AddCollisionHandler(pelaaja2, CollisionHandler.DestroyObject);
83        Add(pelaaja2);
84
85        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, null, pelaaja, new Vector(-600, 0));
86        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, null, pelaaja, new Vector(600, 0));
87        Keyboard.Listen(Key.Down, ButtonState.Down, Liikuta, null, pelaaja, new Vector(0, -600));
88        Keyboard.Listen(Key.Up, ButtonState.Down, Liikuta, null, pelaaja, new Vector(0, 600));
89
90        Keyboard.Listen(Key.Left, ButtonState.Released, Liikuta, null, pelaaja, Vector.Zero);
91        Keyboard.Listen(Key.Right, ButtonState.Released, Liikuta, null, pelaaja, Vector.Zero);
92        Keyboard.Listen(Key.Down, ButtonState.Released, Liikuta, null, pelaaja, Vector.Zero);
93        Keyboard.Listen(Key.Up, ButtonState.Released, Liikuta, null, pelaaja, Vector.Zero);
94
95        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, null, pelaaja2, new Vector(-600, 0));
96        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, null, pelaaja2, new Vector(600, 0));
97        Keyboard.Listen(Key.S, ButtonState.Down, Liikuta, null, pelaaja2, new Vector(0, -600));
98        Keyboard.Listen(Key.W, ButtonState.Down, Liikuta, null, pelaaja2, new Vector(0, 600));
99
100        Keyboard.Listen(Key.A, ButtonState.Released, Liikuta, null, pelaaja2, Vector.Zero);
101        Keyboard.Listen(Key.D, ButtonState.Released, Liikuta, null, pelaaja2, Vector.Zero);
102        Keyboard.Listen(Key.S, ButtonState.Released, Liikuta, null, pelaaja2, Vector.Zero);
103        Keyboard.Listen(Key.W, ButtonState.Released, Liikuta, null, pelaaja2, Vector.Zero);
104
105
106        Keyboard.Listen(Key.K, ButtonState.Pressed, Ammu, null, pelaaja);
107        Keyboard.Listen(Key.Space, ButtonState.Pressed, Ammu, null, pelaaja2);
108
109        LuoKentta();
110        Camera.ZoomFactor = Screen.Width / Level.Width;
111        Camera.Position = new Vector(0, -Level.Height / 2 + 1 / Camera.ZoomFactor * Screen.Height / 2);
112
113        Level.CreateBorders();
114        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
115        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
116    }
117    void Ammu(PhysicsObject pelaaja)
118    {
119        PhysicsObject ammus = new PhysicsObject(25, 25);
120        ammus.Position = pelaaja.Position;
121        ammus.MaximumLifetime = TimeSpan.FromSeconds(1.5);
122        AddCollisionHandler(ammus, CollisionHandler.DestroyBoth);
123        AddCollisionHandler<PhysicsObject, Vihu>(ammus, delegate(PhysicsObject a, Vihu v) 
124        { 
125            vihut.Remove(v); 
126            v.ampumisAjastin.Stop();
127            pistelaskuri.Value++; 
128        });
129        ammus.Shape = Shape.Diamond;
130        ammus.Color = Color.Red;
131        ammus.CollisionIgnoreGroup = 2;
132        ammus.Hit(new Vector(0, 1400));
133        Add(ammus);
134    }
135
136    void Liikuta(PhysicsObject pelaaja, Vector suunta)
137    {
138        pelaaja.Velocity = suunta;
139    }
140
141    void LuoKentta()
142    {
143        TileMap ruudut = TileMap.FromLevelAsset("kentta1");
144        ruudut.SetTileMethod('p', LuoPelaajanPaikka);
145        ruudut.SetTileMethod('v', LuoVihu);
146        ruudut.Execute(100, 100);
147        Level.Background.Image = LoadImage("Tausta");
148        Level.Background.MovesWithCamera = false;
149        // TODO: Kirjoita ohjelmakoodisi tähän
150
151    }
152
153    void LuoPelaajanPaikka(Vector paikka, double leveys, double korkeus)
154    {
155        pelaaja.Position = paikka;
156        pelaaja2.Position = paikka;
157
158    }
159
160
161    void LuoVihu(Vector paikka, double leveys, double korkeus)
162    {
163        Vihu vihu = new Vihu(leveys, korkeus);
164        vihu.Position = paikka;
165        vihu.Shape = Shape.Diamond;
166        vihu.Color = Color.HotPink;
167        vihu.CollisionIgnoreGroup = 1;
168        vihut.Add(vihu);
169
170        AddCollisionHandler(vihu, "pelaaja", pelaajaanosui);
171
172        vihu.ampumisAjastin.Interval = 2.0;
173        vihu.ampumisAjastin.Timeout += delegate
174        {
175            VihuAmpuu(vihu);
176        };           
177
178        //FollowerBrain aivot = new FollowerBrain(pelaaja);
179        //aivot.Speed = 0.00001;
180        //aivot.DistanceClose = 1000;
181        //aivot.TargetClose += delegate {
182        //    if(!ampumisAjastin.Enabled) ampumisAjastin.Start();
183        //};
184        //aivot.Active = true;
185
186        //vihu.Brain = aivot;
187        Add(vihu);
188    }
189
190    void VihuAmpuu(Vihu vihu)
191    {
192        PhysicsObject ammus = new PhysicsObject(25, 25, Shape.Diamond);
193        ammus.Color = Color.Yellow;
194        ammus.Position = vihu.Position;
195        ammus.Hit(new Vector(0, -400));
196        ammus.CollisionIgnoreGroup = 1;
197        AddCollisionHandler(ammus, CollisionHandler.DestroyObject);
198        AddCollisionHandler(ammus, pelaaja, pelaajaanosui);
199        AddCollisionHandler(ammus, pelaaja2, pelaajaanosui);
200        Add(ammus);
201    }
202
203    void pelaajaanosui(PhysicsObject ammus, PhysicsObject alus)
204    {
205        ammus.Destroy();
206        alus.Destroy();
207
208        if (pelaaja.IsDestroyed && pelaaja2.IsDestroyed)
209        {
210
211            vihut.Clear();
212            //foreach (Vihu v in vihut)
213            //{
214            //    v.ampumisAjastin = null;
215            //    v.Destroy();
216            //    vihut.Remove(v);
217            //}
218            ClearAll();
219
220            MultiSelectWindow valikko = new MultiSelectWindow("Tervetuloa peliin",
221        "Aloita peli", "Parhaat pisteet", "Lopeta");
222            valikko.ItemSelected += PainettiinValikonNappia;
223            Add(valikko);
224
225
226        }
227    }
228
229    protected override void Update(Time time)
230    {
231        base.Update(time);
232        Camera.Y += 2.5;
233        if (pelaaja != null)
234        {
235            pelaaja.Y += 2.5;
236            pelaaja2.Y += 2.5;
237        }
238        foreach (Vihu vihu in vihut)
239        {
240            if (vihu.Y < (Camera.Y - Screen.Height) )
241            {
242                vihu.Destroy();
243                vihut.Remove(vihu);
244                break;
245            }
246
247            if (Math.Abs(pelaaja.Position.Y - vihu.Position.Y) < Screen.Height)
248            {
249                if (!vihu.ampumisAjastin.Enabled) vihu.ampumisAjastin.Start();
250            }
251        }
252    }
253}
Note: See TracBrowser for help on using the repository browser.