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

Revision 8791, 7.3 KB checked in by npo17_21, 2 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 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    bool lohkoOnJoOsunutPainikkeeseen = false;
29
30    bool onkoPelaajallaMiekka = false;
31
32    public override void Begin()
33    {
34        SmoothTextures = false;
35        // TODO: Kirjoita ohjelmakoodisi tähän
36        LuoKentta();
37        Paika();
38
39        Camera.Follow(link);
40
41        Camera.Zoom(1.3);
42
43        Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaLink, null, new Vector(-500, 0));
44        Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaLink, null, new Vector(500, 0));
45        Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaLink, null, new Vector(0, 500));
46        Keyboard.Listen(Key.Down, ButtonState.Down, LiikutaLink, null, new Vector(0, -500));
47        Keyboard.Listen(Key.A, ButtonState.Pressed, LyoMiekalla, null, Direction.Left);
48        Keyboard.Listen(Key.D, ButtonState.Pressed, LyoMiekalla, null, Direction.Right);
49        Keyboard.Listen(Key.W, ButtonState.Pressed, LyoMiekalla, null, Direction.Up);
50        Keyboard.Listen(Key.S, ButtonState.Pressed, LyoMiekalla, null, Direction.Down);
51        {
52            Keyboard.Listen(Key.Left, ButtonState.Released, PysaytaLink, null);
53            Keyboard.Listen(Key.Right, ButtonState.Released, PysaytaLink, null);
54            Keyboard.Listen(Key.Up, ButtonState.Released, PysaytaLink, null);
55            Keyboard.Listen(Key.Down, ButtonState.Released, PysaytaLink, null);
56        } 
57       
58
59        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
60        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
61    }
62    void LiikutaLink(Vector vektori)
63    {
64        if (vektori.X < 0)
65        {
66            link.Image = linkVasen;
67        }
68        else if (vektori.X > 0)
69        {
70            link.Image = linkOikea;
71        }
72        else if (vektori.Y > 0)
73        {
74            link.Image = linkYlos;
75        }
76        else
77        {
78            link.Image = linkKuva;
79        }
80
81        link.Velocity = vektori;
82    }
83
84    void Paika()
85    {
86        Level.Background.Image = LoadImage("aloitus"); Level.Background.FitToLevel();
87    }
88    void LuoKentta()
89    {
90        //1. Luetaan kuva uuteen ColorTileMappiin, kuvan nimen perässä ei .png-päätettä.
91        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("aloitus");
92
93        //2. Kerrotaan mitä aliohjelmaa kutsutaan, kun tietyn värinen pikseli tulee vastaan kuvatiedostossa.
94
95        //ruudut.SetTileMethod(Color.Green, LuoPelaaja);
96        ruudut.SetTileMethod(Color.FromHexCode("28FFA5"), LuoTaso);
97        ruudut.SetTileMethod(Color.FromHexCode("2857FF"), LuoLohko);
98        ruudut.SetTileMethod(Color.FromHexCode("51A2FF"), LuoPainike);
99       
100
101        LuoPelaaja(Vector.Zero, 100, 100);
102
103        //3. Execute luo kentän
104        //   Parametreina leveys ja korkeus
105        ruudut.Execute(20, 20);
106    }
107
108    void LuoPelaaja(Vector paikka, double leveys, double korkeus)
109    {
110        link = new PlatformCharacter(leveys, korkeus);
111        link.Position = paikka;
112        link.Image = linkKuva;
113        //AddCollisionHandler(link, "tahti", TormaaTahteen);
114        Add(link);
115        AddCollisionHandler(link, "mieka", Keraa);
116    }
117    void Keraa(PhysicsObject link, PhysicsObject mieka)
118    {
119        mieka.Destroy();
120        onkoPelaajallaMiekka = true;
121    }
122
123    void LuoTaso(Vector paikka, double leveys, double korkeus)
124    {
125        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
126        taso.Position = paikka;
127        taso.Color = Color.Green;
128        taso.CollisionIgnoreGroup = 1;
129        Add(taso);
130    }
131   
132    void LuoLohko(Vector paikka, double leveys, double korkeus)
133    {
134        PhysicsObject lohko = new PhysicsObject(leveys*5.0, korkeus*5.0);
135        lohko.CanRotate = false;
136        lohko.Mass = 100.0;
137        lohko.Position = paikka;
138        lohko.Color = Color.Green;
139
140        // TODO:
141        // tee tähän AddCollisionHandler, joka määrää että:
142        // kun tämä lohko törmää mihin tahansa olioon, jonka täginä on "painike",
143        // niin mennään johonkin tiettyyn aliohjelmaan
144
145        AddCollisionHandler(lohko, "painike", LohkoOsuu);
146
147        Add(lohko);
148    }
149
150    void LuoPainike(Vector paikka, double leveys, double korkeus)
151    {
152        PhysicsObject painike = PhysicsObject.CreateStaticObject(leveys * 5.0, korkeus * 5.0);
153        painike.CanRotate = false;
154        painike.Position = paikka;
155        painike.Color = Color.Brown;
156        Add(painike);
157        painike.Tag = "painike";
158    }
159
160    void PysaytaLink()
161    {
162        LiikutaLink(Vector.Zero);
163    }
164    void LohkoOsuu(PhysicsObject lohko, PhysicsObject painike)
165    {
166        if (lohkoOnJoOsunutPainikkeeseen == false)
167        {
168            KutsuHirvio(lohko.X+300.0,lohko.Y);
169            KutsuHirvio(lohko.X+400.0,lohko.Y);
170            KutsuMieka(lohko.X+350.0,lohko.Y+400);
171        }
172        lohkoOnJoOsunutPainikkeeseen = true;
173    }
174    void KutsuHirvio(double x, double y)
175    {
176        PhysicsObject hirvio = new PhysicsObject(100.0, 100.0);
177        hirvio.Tag = "vihollinen";
178        Add(hirvio);
179        hirvio.X = x;
180        hirvio.Y = y;
181        hirvio.Image = hirviökuva; 
182    }
183    void KutsuMieka(double x, double y)
184    {
185        PhysicsObject mieka = new PhysicsObject(100.0, 100.0);
186        mieka.Tag = "mieka";
187        Add(mieka);
188        mieka.X = x;
189        mieka.Y = y;
190        mieka.Image = miekakuva;
191    }
192    void LyoMiekalla(Direction suunta)
193    {
194        // jos ei ole miekkaa, poistutaan aliohjelmasta:
195        if (onkoPelaajallaMiekka == false) return;
196
197
198        Vector tarkastelusuunta = Vector.Zero;
199        if (suunta == Direction.Left)
200        {
201            link.Image = linkLyoVasemmalle;
202            tarkastelusuunta = new Vector(-150.0, 0.0);
203        }
204        else if (suunta == Direction.Right)
205        {
206            link.Image = linkLyoOikealle;
207            tarkastelusuunta = new Vector(150.0, 0.0);
208        }
209        else if (suunta == Direction.Up)
210        {
211            link.Image = linkLyoYlos;
212            tarkastelusuunta = new Vector(0.0, 150.0);
213        }
214        else
215        {
216            link.Image = linkLyoAlas;
217            tarkastelusuunta = new Vector(0.0, -150.0);
218        }
219
220
221        List<GameObject> lista = GetObjectsBetween(link.Position + tarkastelusuunta, link.Position);
222        if (lista.Count > 0)
223        {
224            foreach(GameObject olio in lista)
225            {
226                if (olio.Tag.Equals("vihollinen"))
227                {
228                    olio.Destroy();
229                }
230            }
231        }
232        Timer.SingleShot(1.0, delegate
233        {
234            link.Image = linkKuva;
235        });
236    }   
237
238
239}
Note: See TracBrowser for help on using the repository browser.