source: 2017/24/AaronL/AdventureLunk/AdventureLunk/AdventureLunk/AdventureLunk.cs @ 9464

Revision 9464, 9.1 KB checked in by mianhayr, 20 months 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 AdventureLunk : PhysicsGame
10{
11    PhysicsObject link;
12    Image linkKuva = LoadImage("link");
13
14    Image linkOikea = LoadImage("link2");
15
16    Image linkVasen = LoadImage("link5");
17
18    Image linkYlos = LoadImage("link4");
19    Image linkLyoVasemmalle = LoadImage("link3");
20    Image linkLyoOikealle = LoadImage("link6");
21    Image linkLyoYlos = LoadImage("link8");
22    Image linkLyoAlas = LoadImage("link7");
23
24    Image miekakuva = LoadImage("mieka");
25
26    Image hirviökuva = LoadImage("hirvio");
27
28    Image lohkokuva = LoadImage("kivi123");
29
30    Image kivikuva = LoadImage("kivi");
31    PhysicsObject mieka;
32    List<PhysicsObject> hirviot = new List<PhysicsObject>();
33    List<AssaultRifle> aseet = new List<AssaultRifle>();
34
35
36
37    bool lohkoOnJoOsunutPainikkeeseen = false;
38
39    bool onkoPelaajallaMiekka = false;
40
41    public override void Begin()
42    {
43        SmoothTextures = false;
44        // TODO: Kirjoita ohjelmakoodisi tähän
45        LuoKentta();
46        Paika();
47
48        Camera.Follow(link);
49
50        Camera.Zoom(1.3);
51
52        Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaLink, null, new Vector(-500, 0));
53        Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaLink, null, new Vector(500, 0));
54        Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaLink, null, new Vector(0, 500));
55        Keyboard.Listen(Key.Down, ButtonState.Down, LiikutaLink, null, new Vector(0, -500));
56        Keyboard.Listen(Key.A, ButtonState.Pressed, LyoMiekalla, null, Direction.Left);
57        Keyboard.Listen(Key.D, ButtonState.Pressed, LyoMiekalla, null, Direction.Right);
58        Keyboard.Listen(Key.W, ButtonState.Pressed, LyoMiekalla, null, Direction.Up);
59        Keyboard.Listen(Key.S, ButtonState.Pressed, LyoMiekalla, null, Direction.Down);
60        {
61            Keyboard.Listen(Key.Left, ButtonState.Released, PysaytaLink, null);
62            Keyboard.Listen(Key.Right, ButtonState.Released, PysaytaLink, null);
63            Keyboard.Listen(Key.Up, ButtonState.Released, PysaytaLink, null);
64            Keyboard.Listen(Key.Down, ButtonState.Released, PysaytaLink, null);
65        } 
66       
67
68        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
69        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
70    }
71    void LiikutaLink(Vector vektori)
72    {
73        if (vektori.X < 0)
74        {
75            link.Image = linkVasen;
76        }
77        else if (vektori.X > 0)
78        {
79            link.Image = linkOikea;
80        }
81        else if (vektori.Y > 0)
82        {
83            link.Image = linkYlos;
84        }
85        else
86        {
87            link.Image = linkKuva;
88        }
89
90        link.Velocity = vektori;
91
92        List<GameObject> viholliset = GetObjectsWithTag("vihollinen");
93        foreach (GameObject go in viholliset)
94        {
95            Vector dist = go.Position - link.Position;
96            go.Angle = dist.Angle-Angle.FromDegrees(90);
97        }
98    }
99
100    void Paika()
101    {
102        Level.Background.Image = LoadImage("aloitus"); Level.Background.FitToLevel();
103    }
104    void LuoKentta()
105    {
106        //1. Luetaan kuva uuteen ColorTileMappiin, kuvan nimen perässä ei .png-päätettä.
107        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("aloitus");
108
109        //2. Kerrotaan mitä aliohjelmaa kutsutaan, kun tietyn värinen pikseli tulee vastaan kuvatiedostossa.
110
111        //ruudut.SetTileMethod(Color.Green, LuoPelaaja);
112        ruudut.SetTileMethod(Color.FromHexCode("28FFA5"), LuoTaso);
113        ruudut.SetTileMethod(Color.FromHexCode("2857FF"), LuoLohko);
114        ruudut.SetTileMethod(Color.FromHexCode("51A2FF"), LuoPainike);
115       
116
117        LuoPelaaja(Vector.Zero, 100, 100);
118
119        //3. Execute luo kentän
120        //   Parametreina leveys ja korkeus
121        ruudut.Execute(20, 20);
122    }
123
124    void LuoPelaaja(Vector paikka, double leveys, double korkeus)
125    {
126        link = new PlatformCharacter(leveys, korkeus);
127        link.Position = paikka;
128        link.Image = linkKuva;
129        //AddCollisionHandler(link, "tahti", TormaaTahteen);
130        Add(link);
131        AddCollisionHandler(link, "mieka", Keraa);
132    }
133    void Keraa(PhysicsObject link, PhysicsObject mieka)
134    {
135        mieka.Destroy();
136        onkoPelaajallaMiekka = true;
137    }
138
139    void LuoTaso(Vector paikka, double leveys, double korkeus)
140    {
141        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
142        taso.Position = paikka;
143        taso.Color = Color.Green;
144        taso.CollisionIgnoreGroup = 1;
145        Add(taso);
146    }
147   
148    void LuoLohko(Vector paikka, double leveys, double korkeus)
149    {
150        PhysicsObject lohko = new PhysicsObject(leveys*5.0, korkeus*5.0);
151        lohko.CanRotate = false;
152        lohko.Mass = 100.0;
153        lohko.Position = paikka;
154        lohko.Color = Color.Green;
155        lohko.Image = lohkokuva;
156
157        // TODO:
158        // tee tähän AddCollisionHandler, joka määrää että:
159        // kun tämä lohko törmää mihin tahansa olioon, jonka täginä on "painike",
160        // niin mennään johonkin tiettyyn aliohjelmaan
161
162        AddCollisionHandler(lohko, "painike", LohkoOsuu);
163
164        Add(lohko);
165    }
166
167    void LuoPainike(Vector paikka, double leveys, double korkeus)
168    {
169        PhysicsObject painike = PhysicsObject.CreateStaticObject(leveys * 5.0, korkeus * 5.0);
170        painike.CanRotate = false;
171        painike.Position = paikka;
172        painike.Color = Color.Brown;
173        Add(painike);
174        painike.Tag = "painike";
175    }
176
177    void PysaytaLink()
178    {
179        LiikutaLink(Vector.Zero);
180    }
181    void LohkoOsuu(PhysicsObject lohko, PhysicsObject painike)
182    {
183        lohko.Destroy();
184
185
186        if (lohkoOnJoOsunutPainikkeeseen == false)
187        {   
188            KutsuHirvio(lohko.X+300.0,lohko.Y);
189            KutsuHirvio(lohko.X+400.0,lohko.Y);
190            KutsuMieka(lohko.X+350.0,lohko.Y+400);
191        }
192        lohkoOnJoOsunutPainikkeeseen = true;
193    }
194    void KutsuHirvio(double x, double y)
195    {
196        FollowerBrain seuraajanAivot = new FollowerBrain(link);
197        seuraajanAivot.Speed = (50.0);
198        PhysicsObject hirvio = new PhysicsObject(100.0, 100.0);
199        hirvio.Tag = "vihollinen";
200        Add(hirvio);
201        hirvio.X = x;
202        hirviot.Add(hirvio);
203        hirvio.Y = y;
204        hirvio.Image = hirviökuva;
205        hirvio.Brain = seuraajanAivot;
206        AssaultRifle hirvioAse = new AssaultRifle(30, 10);
207        hirvioAse.Ammo.Value = 1000;
208        aseet.Add(hirvioAse);
209        hirvioAse.ProjectileCollision = AmmusOsui;
210        hirvio.Add(hirvioAse);
211        hirvioAse.Angle += Angle.FromDegrees(-90.0);
212        hirvioAse.IsVisible = false;
213        Timer ampumisajastin = new Timer();
214        ampumisajastin.Interval = 3;
215        ampumisajastin.Timeout += () => hirvioAmpuu(hirvioAse);
216        ampumisajastin.Start();   
217
218    }
219
220    void hirvioAmpuu(AssaultRifle hirvioAse)
221
222       
223    {
224        PhysicsObject ammus = hirvioAse.Shoot();
225        if(ammus != null)
226        {
227            ammus.Size *= 3;
228            ammus.Image = kivikuva;
229            ammus.Velocity *= 0.25;
230            ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
231        }
232       
233    }
234    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
235    {
236        kohde.Destroy();
237        ammus.Destroy();
238        int ind = hirviot.IndexOf(kohde);
239        if (ind != -1)
240            aseet[ind].Destroy();
241    }
242    void KutsuMieka(double x, double y)
243    {
244        mieka = new PhysicsObject(100.0, 100.0);
245        mieka.Tag = "mieka";
246        Add(mieka);
247        mieka.X = x;
248        mieka.Y = y;
249        mieka.IgnoresCollisionResponse = true;
250        mieka.Image = miekakuva;
251    }
252    void LyoMiekalla(Direction suunta)
253    {
254        // jos ei ole miekkaa, poistutaan aliohjelmasta:
255        if (onkoPelaajallaMiekka == false) return;
256
257
258        Vector tarkastelusuunta = Vector.Zero;
259        if (suunta == Direction.Left)
260        {
261            link.Image = linkLyoVasemmalle;
262            tarkastelusuunta = new Vector(-150.0, 0.0);
263        }
264        else if (suunta == Direction.Right)
265        {
266            link.Image = linkLyoOikealle;
267            tarkastelusuunta = new Vector(150.0, 0.0);
268        }
269        else if (suunta == Direction.Up)
270        {
271            link.Image = linkLyoYlos;
272            tarkastelusuunta = new Vector(0.0, 150.0);
273        }
274        else
275        {
276            link.Image = linkLyoAlas;
277            tarkastelusuunta = new Vector(0.0, -150.0);
278        }
279
280
281        List<GameObject> lista = GetObjectsBetween(link.Position + tarkastelusuunta, link.Position);
282        if (lista.Count > 0)
283        {
284            foreach(GameObject olio in lista)
285            {
286                if (olio.Tag.Equals("vihollinen"))
287                {
288                    olio.Destroy();
289                }
290            }
291        }
292        Timer.SingleShot(1.0, delegate
293        {
294            link.Image = linkKuva;
295        });
296    }   
297
298
299}
Note: See TracBrowser for help on using the repository browser.