1 | using System; |
---|
2 | using System.Collections.Generic; |
---|
3 | using Jypeli; |
---|
4 | using Jypeli.Assets; |
---|
5 | using Jypeli.Controls; |
---|
6 | using Jypeli.Effects; |
---|
7 | using Jypeli.Widgets; |
---|
8 | |
---|
9 | public 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 | } |
---|