source: 2015/23/ToukoA/FatalShot/FatalShot/FatalShot/FatalShot.cs @ 5856

Revision 5856, 5.7 KB checked in by toolala, 8 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 FatalShot : PhysicsGame
10{
11    Hyvis pelaaja1;
12    Image pelaajanKuva = LoadImage ("pelaajav1");
13    Image poliisiAmpuuKuva = LoadImage ("pelaajav1");
14        Image poliisinKuva = LoadImage ("pelaajav1");
15    Vector nopeusYlos = new Vector(0, 400);
16    Vector nopeusAlas = new Vector(0, -400);
17    Vector nopeusOikea = new Vector(400, 0);
18    Vector nopeusVasen = new Vector(-400, 0);
19    AssaultRifle pelaajan1Ase;
20
21
22   // const int RUUDUN_KOKO = 40;
23
24    public override void Begin()
25    {
26
27        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
28
29        TileMap kentta = TileMap.FromLevelAsset("kentta");
30        Level.Background.Color = Color.Brown;
31        kentta.SetTileMethod('%', luoPelaaja);
32        kentta.SetTileMethod('#', lisaaTaso1);
33        kentta.SetTileMethod('&', luoPahis);
34        kentta.Execute(40, 40);
35
36        Mouse.Listen(MouseButton.Left, ButtonState.Down, Ammu, "Ammu", pelaajan1Ase);
37
38        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
39        Keyboard.Listen(Key.W, ButtonState.Down, liikutaP, "Liiku ylos", pelaaja1, nopeusYlos);
40        Keyboard.Listen(Key.S, ButtonState.Down, liikutaP, "Liiku alas", pelaaja1, nopeusAlas);
41        Keyboard.Listen(Key.W, ButtonState.Released, liikutaP, null, pelaaja1, Vector.Zero);
42        Keyboard.Listen(Key.S, ButtonState.Released, liikutaP, null, pelaaja1, Vector.Zero);
43
44        Keyboard.Listen(Key.D, ButtonState.Down, liikutaP, "Liiku oikealle", pelaaja1, nopeusOikea);
45        Keyboard.Listen(Key.D, ButtonState.Released, liikutaP, null, pelaaja1, Vector.Zero);
46
47        Keyboard.Listen(Key.A, ButtonState.Down, liikutaP, "Liiku vasemmalle", pelaaja1, nopeusVasen);
48        Keyboard.Listen(Key.A, ButtonState.Released, liikutaP, null, pelaaja1, Vector.Zero);
49
50        Keyboard.Listen(Key.R, ButtonState.Pressed, aloitaAlusta, "Aloita alusta");
51
52        Mouse.ListenMovement(0.1, Tahtaa, "Tähtää");
53        Camera.ZoomFactor = 1.2;
54        Mouse.IsCursorVisible = true;
55        Camera.Follow(pelaaja1);
56    }
57
58    void aloitaAlusta()
59    {
60        ClearAll();
61        Begin();
62    }
63
64    void Ammu(AssaultRifle ase)
65    {
66        PhysicsObject ammus = ase.Shoot();
67
68        if (ammus != null)
69        {
70            ase.Power.DefaultValue = 350;
71            ase.FireRate = 4;
72            ammus.Size *= 0.45;
73            ammus.MaximumLifetime = TimeSpan.FromSeconds(4);
74        }
75
76    }
77
78    void lisaaTaso1(Vector paikka, double leveys, double korkeus)
79    {
80        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
81        taso.Position = paikka;
82        taso.Color = Color.Cyan;
83        Add(taso);
84    }
85
86    void luoPelaaja(Vector paikka, double leveys, double korkeus)
87    {
88        pelaaja1 = new Hyvis(leveys * 0.5, korkeus * 0.5);
89        pelaaja1.Position = paikka;
90        pelaaja1.Image = pelaajanKuva;
91        pelaaja1.Shape = Shape.Circle;
92        pelaaja1.CanRotate = false;
93        pelaaja1.Tag = "hyva";
94
95        pelaajan1Ase = new AssaultRifle(30, 10);
96        pelaajan1Ase.Ammo.Value = 100;
97        pelaajan1Ase.ProjectileCollision = AmmusOsui;
98
99        pelaaja1.Add(pelaajan1Ase);
100        pelaaja1.Ase = pelaajan1Ase;
101
102        Add(pelaaja1);
103    }
104
105    void luoPahis(Vector paikka, double leveys, double korkeus)
106    {
107        Pahis pahis = new Pahis(leveys * 0.5, korkeus * 0.5);
108        pahis.Position = paikka;
109        pahis.Image = pelaajanKuva;
110        pahis.Shape = Shape.Circle;
111
112        FollowerBrain seuraajaAivot = new FollowerBrain(pelaaja1);
113
114        AssaultRifle pahisAse = new AssaultRifle(30, 10);
115        pahisAse.Ammo.Value = 100;
116        pahisAse.ProjectileCollision = AmmusOsui;
117        pahisAse.InfiniteAmmo = true;
118        pahis.Ase = pahisAse;
119        pahis.Tag = "paha";
120        pahis.Add(pahisAse);
121
122        pahis.Brain = seuraajaAivot;
123        seuraajaAivot.Active = true;
124        seuraajaAivot.Speed = 400;
125        seuraajaAivot.DistanceClose = 450;
126        seuraajaAivot.DistanceFar = 5000;
127        seuraajaAivot.TargetClose += delegate { pahisAmpuu(pahisAse, pahis); };
128        seuraajaAivot.StopWhenTargetClose = true;
129
130        Add(pahis);
131
132    }
133
134    void pahisAmpuu(AssaultRifle ase, Pahis pahis)
135    {
136        Vector suunta = (pelaaja1.Position - pahis.Position).Normalize();
137        pahis.Angle = suunta.Angle;
138
139        PhysicsObject ammus = ase.Shoot();
140
141        if (ammus != null)
142        {
143            ase.Power.DefaultValue = 350;
144            ase.FireRate = 8;
145            ammus.Size *= 0.45;
146            ammus.MaximumLifetime = TimeSpan.FromSeconds(4);
147        }
148    }
149
150    void Tahtaa(AnalogState hiirenLiike)
151    {
152        Vector suunta = (Mouse.PositionOnWorld - pelaajan1Ase.AbsolutePosition).Normalize();
153        pelaajan1Ase.Angle = suunta.Angle;
154    }
155
156    void AmmusOsui( PhysicsObject ammus, PhysicsObject kohde)
157    {
158        ammus.Destroy();
159        if (kohde.Tag.Equals("paha"))
160        {
161            (kohde as Pahis).Ase.Destroy();
162        }
163
164        if (kohde.Tag.Equals("hyva"))
165        {
166            (kohde as Hyvis).Ase.Destroy();
167        }
168
169        kohde.Destroy();
170    }
171
172    void liikutaP(PhysicsObject pelaaja1, Vector nopeus)
173    {
174        if ((nopeus.Y < 0) && (pelaaja1.Bottom < Level.Bottom))
175        {
176            pelaaja1.Velocity = Vector.Zero;
177            return;
178        }
179
180        if ((nopeus.Y > 0) && (pelaaja1.Top > Level.Top))
181        {
182            pelaaja1.Velocity = Vector.Zero;
183            return;
184        }
185        pelaaja1.Velocity = nopeus;
186    }
187}
Note: See TracBrowser for help on using the repository browser.