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 GeneerinenAvaruuslentely : PhysicsGame |
---|
10 | { |
---|
11 | Image aluskuva = LoadImage("alus"); |
---|
12 | Image asteroidikuva = LoadImage("asteroidi"); |
---|
13 | Image tausta = LoadImage("tausta"); |
---|
14 | Image vihollinenkuva = LoadImage("vihollinen"); |
---|
15 | PhysicsObject alus; |
---|
16 | PhysicsObject asteroidi; |
---|
17 | PhysicsObject vihollinen; |
---|
18 | IntMeter pisteLaskuri; |
---|
19 | |
---|
20 | |
---|
21 | |
---|
22 | public override void Begin() |
---|
23 | { |
---|
24 | // TODO: Kirjoita ohjelmakoodisi tähän |
---|
25 | //IsFullScreen = true; |
---|
26 | SetWindowSize(1920, 1080, true); |
---|
27 | LuoKentta(); |
---|
28 | AsteroidiAjastin(); |
---|
29 | VihollisAjastin(); |
---|
30 | AsetaOhjaimet(); |
---|
31 | LuoPisteLaskuri(); |
---|
32 | |
---|
33 | |
---|
34 | if (alus.Y > Level.Top) |
---|
35 | { |
---|
36 | alus.Velocity = Vector.Zero; |
---|
37 | return; |
---|
38 | } |
---|
39 | } |
---|
40 | |
---|
41 | void LuoPisteLaskuri() |
---|
42 | { |
---|
43 | pisteLaskuri = new IntMeter(0); |
---|
44 | |
---|
45 | Timer pisteTimer = new Timer(); |
---|
46 | pisteTimer.Interval = 2; |
---|
47 | pisteTimer.Timeout += delegate { pisteLaskuri.Value++; }; |
---|
48 | pisteTimer.Start(); |
---|
49 | |
---|
50 | Label pisteNaytto = new Label(); |
---|
51 | pisteNaytto.X = Screen.Right - 100; |
---|
52 | pisteNaytto.Y = Screen.Top - 100; |
---|
53 | pisteNaytto.TextColor = Color.White; |
---|
54 | //pisteNaytto.Color = Color.White; |
---|
55 | pisteNaytto.Title = "Pisteet"; |
---|
56 | |
---|
57 | |
---|
58 | pisteNaytto.BindTo(pisteLaskuri); |
---|
59 | Add(pisteNaytto); |
---|
60 | |
---|
61 | } |
---|
62 | |
---|
63 | |
---|
64 | void LuoKentta() |
---|
65 | { |
---|
66 | alus = new PhysicsObject(100, 100); |
---|
67 | alus.Shape = Shape.Rectangle; |
---|
68 | alus.X = 0; |
---|
69 | alus.Y = 0; |
---|
70 | alus.Image = aluskuva; |
---|
71 | alus.AngularDamping = 0.5; |
---|
72 | alus.LinearDamping = 0.95; |
---|
73 | |
---|
74 | Level.Background.Image = tausta; |
---|
75 | |
---|
76 | Add(alus); |
---|
77 | |
---|
78 | AddCollisionHandler(alus, "vihollinen", kuolema); |
---|
79 | |
---|
80 | |
---|
81 | |
---|
82 | |
---|
83 | } |
---|
84 | |
---|
85 | |
---|
86 | |
---|
87 | void AsetaOhjaimet() |
---|
88 | { |
---|
89 | PhoneBackButton.Listen(ConfirmExit, "Lopeta peli"); |
---|
90 | Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli"); |
---|
91 | Keyboard.Listen(Key.A, ButtonState.Down, KaannaAlusta, null, 10.0); |
---|
92 | Keyboard.Listen(Key.D, ButtonState.Down, KaannaAlusta, null, -10.0); |
---|
93 | Keyboard.Listen(Key.W, ButtonState.Down, TyonnaAlusta, null); |
---|
94 | Keyboard.Listen(Key.S, ButtonState.Down, VedaAlusta, null); |
---|
95 | Keyboard.Listen(Key.RightControl, ButtonState.Pressed, Ammu, null); |
---|
96 | } |
---|
97 | |
---|
98 | void KaannaAlusta(double kulma) |
---|
99 | { |
---|
100 | alus.AngularVelocity = kulma; |
---|
101 | } |
---|
102 | |
---|
103 | void TyonnaAlusta() |
---|
104 | { |
---|
105 | Vector pelaajanSuunta = Vector.FromLengthAndAngle(2500.0, alus.Angle); |
---|
106 | alus.Push(pelaajanSuunta); |
---|
107 | |
---|
108 | } |
---|
109 | |
---|
110 | void VedaAlusta() |
---|
111 | { |
---|
112 | Vector pelaajanSuunta = Vector.FromLengthAndAngle(2500.0, alus.Angle); |
---|
113 | alus.Push(pelaajanSuunta - pelaajanSuunta - pelaajanSuunta); |
---|
114 | |
---|
115 | } |
---|
116 | |
---|
117 | void kuolema(PhysicsObject alus, PhysicsObject vihollinen) |
---|
118 | { |
---|
119 | alus.Destroy(); |
---|
120 | pisteLaskuri.Reset(); |
---|
121 | } |
---|
122 | |
---|
123 | void LisaaAsteroidi() |
---|
124 | { |
---|
125 | //Vector kentanPiste = Level.GetRandomPosition(); |
---|
126 | //RandomGen.NextVector( |
---|
127 | |
---|
128 | Vector kentanPiste = Vector.FromLengthAndAngle(Level.Width + 200, RandomGen.NextAngle()); |
---|
129 | asteroidi = new PhysicsObject(50, 50); |
---|
130 | asteroidi.Position = kentanPiste; |
---|
131 | asteroidi.Shape = Shape.Circle; |
---|
132 | asteroidi.Color = Color.Black; |
---|
133 | asteroidi.Image = asteroidikuva; |
---|
134 | asteroidi.Tag = "vihollinen"; |
---|
135 | Add(asteroidi); |
---|
136 | Angle asteroidikulma = (Vector.Zero - asteroidi.Position).Angle; |
---|
137 | Vector asteroidivector = Vector.FromLengthAndAngle(500, RandomGen.NextAngle(asteroidikulma -Angle.FromDegrees(50), (asteroidikulma +Angle.FromDegrees(50)))); |
---|
138 | asteroidi.Hit(asteroidivector); |
---|
139 | } |
---|
140 | |
---|
141 | void AsteroidiAjastin() |
---|
142 | { |
---|
143 | Timer ajastin = new Timer(); |
---|
144 | ajastin.Interval = 0.5; |
---|
145 | ajastin.Timeout += LisaaAsteroidi; |
---|
146 | ajastin.Start(); |
---|
147 | } |
---|
148 | |
---|
149 | void VihollisAjastin() |
---|
150 | { |
---|
151 | Timer ajastin = new Timer(); |
---|
152 | ajastin.Interval = 1.5; |
---|
153 | ajastin.Timeout += LisaaVihollinen; |
---|
154 | ajastin.Start(); |
---|
155 | } |
---|
156 | |
---|
157 | void LisaaVihollinen() |
---|
158 | { |
---|
159 | Vector kentanPiste = Vector.FromLengthAndAngle(Level.Width + 200, RandomGen.NextAngle()); |
---|
160 | vihollinen = new PhysicsObject(150, 150); |
---|
161 | vihollinen.Position = kentanPiste; |
---|
162 | vihollinen.Shape = Shape.Circle; |
---|
163 | vihollinen.Color = Color.Black; |
---|
164 | vihollinen.Image = vihollinenkuva; |
---|
165 | vihollinen.Tag = "vihollinen"; |
---|
166 | Add(vihollinen); |
---|
167 | Angle vihollinenkulma = (Vector.Zero - vihollinen.Position).Angle; |
---|
168 | Vector vihollinenvector = Vector.FromLengthAndAngle(500, RandomGen.NextAngle(vihollinenkulma - Angle.FromDegrees(50), (vihollinenkulma + Angle.FromDegrees(50)))); |
---|
169 | vihollinen.Hit(vihollinenvector); |
---|
170 | |
---|
171 | } |
---|
172 | |
---|
173 | void Ammu() |
---|
174 | { |
---|
175 | PhysicsObject ammus = new PhysicsObject(10, 10); |
---|
176 | |
---|
177 | Vector pelaajanSuunta = Vector.FromLengthAndAngle(2500.0, alus.Angle); |
---|
178 | |
---|
179 | |
---|
180 | ammus.Position = alus.Position + Vector.FromLengthAndAngle(80.0, alus.Angle); |
---|
181 | ammus.Shape = Shape.Circle; |
---|
182 | ammus.Color = Color.Yellow; |
---|
183 | ammus.Hit(pelaajanSuunta); |
---|
184 | |
---|
185 | Add(ammus, -1); |
---|
186 | |
---|
187 | |
---|
188 | ammus.CanRotate = false; |
---|
189 | ammus.IgnoresCollisionResponse = true; |
---|
190 | AddCollisionHandler(ammus, "vihollinen", vihollisenKuolema); |
---|
191 | |
---|
192 | Timer poistumisAjastin = new Timer(); |
---|
193 | poistumisAjastin.Interval = 1; |
---|
194 | poistumisAjastin.Timeout += delegate { ammusPoistuu(ammus); }; |
---|
195 | poistumisAjastin.Start(); |
---|
196 | |
---|
197 | } |
---|
198 | |
---|
199 | void ammusPoistuu(PhysicsObject ammus) |
---|
200 | { |
---|
201 | if (ammus.X > Level.Right) |
---|
202 | { |
---|
203 | ammus.Destroy(); |
---|
204 | } |
---|
205 | |
---|
206 | else if (ammus.Y > Level.Top) |
---|
207 | { |
---|
208 | ammus.Destroy(); |
---|
209 | } |
---|
210 | } |
---|
211 | |
---|
212 | void vihollisenKuolema(PhysicsObject ammus, PhysicsObject vihollinen) |
---|
213 | { |
---|
214 | vihollinen.Destroy(); |
---|
215 | ammus.Destroy(); |
---|
216 | |
---|
217 | pisteLaskuri.Value += 10; |
---|
218 | |
---|
219 | } |
---|
220 | } |
---|