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 Ufot : PhysicsGame |
---|
10 | { |
---|
11 | |
---|
12 | PeliHahmo vartalo; |
---|
13 | Image tahtainKuva = LoadImage("tahtain"); |
---|
14 | DoubleMeter voimaMittari; |
---|
15 | PhysicsObject pää; |
---|
16 | Image ukko = LoadImage("ukko"); |
---|
17 | ExplosionSystem rajahdys; |
---|
18 | PhysicsObject olio; |
---|
19 | Image olioKuva = LoadImage("olio"); |
---|
20 | Image taustakuva = LoadImage("background"); |
---|
21 | Cannon tykki; |
---|
22 | GameObject tahtain; |
---|
23 | |
---|
24 | |
---|
25 | public override void Begin() |
---|
26 | { |
---|
27 | voimaMittari = new DoubleMeter(10); |
---|
28 | voimaMittari.MaxValue = 10; |
---|
29 | voimaMittari.LowerLimit += delegate { tuhoaPelaaja(); }; |
---|
30 | ProgressBar voimaPalkki = new ProgressBar(200, 10); |
---|
31 | voimaPalkki.BindTo(voimaMittari); |
---|
32 | Add(voimaPalkki); |
---|
33 | voimaPalkki.X = Screen.Right - 150; |
---|
34 | voimaPalkki.Y = Screen.Top - 100; |
---|
35 | voimaPalkki.Angle = Angle.RightAngle; |
---|
36 | voimaPalkki.BarColor = Color.Green; |
---|
37 | voimaPalkki.BorderColor = Color.Yellow; |
---|
38 | voimaPalkki.Angle = Angle.FromDegrees(0); |
---|
39 | |
---|
40 | Level.CreateBorders(false); |
---|
41 | Level.BackgroundColor = Color.LightGray; |
---|
42 | Level.Background.Image = taustakuva; |
---|
43 | |
---|
44 | rajahdys = new ExplosionSystem(LoadImage("rajahdys"), 500); |
---|
45 | rajahdys.MaxVelocity = 10; |
---|
46 | rajahdys.MinVelocity = 5; |
---|
47 | rajahdys.BlendMode = BlendMode.Additive; |
---|
48 | Add(rajahdys); |
---|
49 | |
---|
50 | vartalo = new PeliHahmo(75, 150); |
---|
51 | vartalo.Mass = 9; |
---|
52 | PlasmaCannon ase = new PlasmaCannon(30, 20); |
---|
53 | vartalo.Add(ase); |
---|
54 | ase.IsVisible = false; |
---|
55 | |
---|
56 | ase.X = 10; |
---|
57 | Mouse.Listen(MouseButton.Left, ButtonState.Pressed, AmmuAseella, "Ammu", ase); |
---|
58 | Mouse.IsCursorVisible = false; |
---|
59 | |
---|
60 | vartalo.X = -0.0; |
---|
61 | vartalo.Y = -450.0; |
---|
62 | vartalo.Color = Color.Beige; |
---|
63 | vartalo.Shape = Shape.Ellipse; |
---|
64 | Gravity = new Vector(0.0, 0.0); |
---|
65 | vartalo.Restitution = 1.0; |
---|
66 | Add(vartalo); |
---|
67 | vartalo.CollisionIgnoreGroup = 0; |
---|
68 | //vartalo.Image = ukko; |
---|
69 | vartalo.LeftWalkingAnimation = Image.Mirror(ukko); |
---|
70 | vartalo.RightWalkingAnimation = ukko; |
---|
71 | vartalo.Move(new Vector(1000, 0)); |
---|
72 | |
---|
73 | olio = new PhysicsObject(300, 120); |
---|
74 | olio.Color = Color.Gray; |
---|
75 | olio.CanRotate = false; |
---|
76 | olio.Shape = Shape.Circle; |
---|
77 | olio.X = 0.0; |
---|
78 | olio.Y = 285; |
---|
79 | Add(olio); |
---|
80 | AddCollisionHandler(vartalo, "kuula", VahennaElamaa); |
---|
81 | olio.IgnoresCollisionResponse = false; |
---|
82 | tykki = new Cannon(20, 5); |
---|
83 | tykki.IsVisible = false; |
---|
84 | olio.Add(tykki); |
---|
85 | // laserPyssy.ProjectileCollision = LaserSadeOsuu; |
---|
86 | olio.Image = olioKuva; |
---|
87 | Vector suunta = (vartalo.Position - olio.Position).Normalize(); |
---|
88 | tykki.Angle = suunta.Angle; |
---|
89 | PathFollowerBrain polkuAivot = new PathFollowerBrain(); |
---|
90 | List<Vector> polku = new List<Vector>(); |
---|
91 | polku.Add(new Vector(-50, 280)); |
---|
92 | polku.Add(new Vector(-20, 90)); |
---|
93 | polku.Add(new Vector(-120, -0)); |
---|
94 | |
---|
95 | polkuAivot.Path = polku; |
---|
96 | polkuAivot.Loop = true; |
---|
97 | polkuAivot.Speed = 100; |
---|
98 | olio.Brain = polkuAivot; |
---|
99 | |
---|
100 | |
---|
101 | Timer vihuAmpuuAjastin = new Timer(); |
---|
102 | vihuAmpuuAjastin.Interval = 2.0; |
---|
103 | vihuAmpuuAjastin.Timeout += new Action(vihuAmpuu); |
---|
104 | vihuAmpuuAjastin.Start(); |
---|
105 | |
---|
106 | tahtain = new GameObject(40, 40, Shape.Circle); |
---|
107 | tahtain.Color = Color.Red; |
---|
108 | Add(tahtain); |
---|
109 | tahtain.Image = tahtainKuva; |
---|
110 | |
---|
111 | |
---|
112 | Keyboard.Listen(Key.A, ButtonState.Down, LiikutaPelaajaa, null, -1000.0); |
---|
113 | Keyboard.Listen(Key.S, ButtonState.Down, LiikutaPelaajaa, null, 1000.0); |
---|
114 | Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet"); |
---|
115 | Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli"); |
---|
116 | Mouse.ListenMovement(0.1, Tahtays, null, ase); |
---|
117 | |
---|
118 | } |
---|
119 | |
---|
120 | void vihuAmpuu() |
---|
121 | { |
---|
122 | Vector suunta = (vartalo.Position - olio.Position).Normalize(); |
---|
123 | tykki.Angle = suunta.Angle; |
---|
124 | PhysicsObject kuula = tykki.Shoot(); |
---|
125 | if (kuula != null) |
---|
126 | { |
---|
127 | kuula.Tag = "kuula"; |
---|
128 | kuula.Hit((vartalo.Position - olio.Position) * 40); |
---|
129 | kuula.Size *= 2; |
---|
130 | AddCollisionHandler(kuula, KuulaTormaa); |
---|
131 | |
---|
132 | } |
---|
133 | } |
---|
134 | |
---|
135 | void tuhoaPelaaja() |
---|
136 | { |
---|
137 | vartalo.Destroy(); |
---|
138 | } |
---|
139 | |
---|
140 | void Tahtays(AnalogState hiirenTila, PlasmaCannon ase) |
---|
141 | { |
---|
142 | Vector erotus = Mouse.PositionOnWorld - vartalo.Position; |
---|
143 | ase.Angle = erotus.Angle; |
---|
144 | tahtain.Position = Mouse.PositionOnWorld; |
---|
145 | } |
---|
146 | |
---|
147 | void AmmuAseella(PlasmaCannon ase) |
---|
148 | { |
---|
149 | PhysicsObject ammus = ase.Shoot(); |
---|
150 | ase.IsVisible = false; |
---|
151 | if (ammus != null) |
---|
152 | { |
---|
153 | ammus.Size *= 2; |
---|
154 | ammus.Color = Color.Black; |
---|
155 | ammus.Shape = Shape.Circle; |
---|
156 | AddCollisionHandler(ammus, AmmusTormaa); |
---|
157 | } |
---|
158 | } |
---|
159 | |
---|
160 | void AmmusTormaa(PhysicsObject tormaaja, PhysicsObject kohde) |
---|
161 | { |
---|
162 | rajahdys.AddEffect(tormaaja.Position, 48); |
---|
163 | tormaaja.Destroy(); |
---|
164 | |
---|
165 | } |
---|
166 | |
---|
167 | class PeliHahmo : PlatformCharacter |
---|
168 | { |
---|
169 | public int Elamat = 3; |
---|
170 | |
---|
171 | public PeliHahmo(double leveys, double korkeus) |
---|
172 | : base(leveys, korkeus) |
---|
173 | { |
---|
174 | } |
---|
175 | } |
---|
176 | |
---|
177 | void VahennaVoimia() |
---|
178 | { |
---|
179 | voimaMittari.Value--; |
---|
180 | } |
---|
181 | |
---|
182 | void VoimaLoppui(double mittarinArvo) |
---|
183 | { |
---|
184 | MessageDisplay.Add("Voimat loppuivat!"); |
---|
185 | } |
---|
186 | |
---|
187 | IntMeter pisteLaskuri; |
---|
188 | |
---|
189 | void LuoLaskuri() |
---|
190 | { |
---|
191 | pisteLaskuri = new IntMeter(0); |
---|
192 | |
---|
193 | Label pisteNaytto = new Label(); |
---|
194 | pisteNaytto.X = Screen.Left + 100; |
---|
195 | pisteNaytto.Y = Screen.Top - 100; |
---|
196 | pisteNaytto.TextColor = Color.Black; |
---|
197 | pisteNaytto.Color = Color.White; |
---|
198 | Add(pisteNaytto); |
---|
199 | |
---|
200 | pisteNaytto.BindTo(pisteLaskuri); |
---|
201 | Add(pisteNaytto); |
---|
202 | |
---|
203 | pisteNaytto.BindTo(pisteLaskuri); |
---|
204 | Add(pisteNaytto); |
---|
205 | |
---|
206 | Label pisteTeksti = new Label("Elämät: "); |
---|
207 | pisteTeksti.X = Screen.Left + 50; |
---|
208 | pisteTeksti.Y = Screen.Top - 100; |
---|
209 | pisteTeksti.TextColor = Color.Red; |
---|
210 | pisteTeksti.Color = Color.Black; |
---|
211 | Add(pisteTeksti); |
---|
212 | |
---|
213 | } |
---|
214 | |
---|
215 | void LiikutaPelaajaa(double nopeus) |
---|
216 | { |
---|
217 | vartalo.Walk(nopeus); |
---|
218 | } |
---|
219 | |
---|
220 | void VahennaElamaa(PhysicsObject vartalo, PhysicsObject olio) |
---|
221 | { |
---|
222 | voimaMittari.Value--; |
---|
223 | |
---|
224 | if (voimaMittari.Value <= 0) |
---|
225 | vartalo.Destroy(); |
---|
226 | } |
---|
227 | |
---|
228 | void KuulaTormaa(PhysicsObject tormaaja, PhysicsObject kohde) |
---|
229 | { |
---|
230 | if (kohde == vartalo) |
---|
231 | voimaMittari.Value--; |
---|
232 | tormaaja.Destroy(); |
---|
233 | } |
---|
234 | } |
---|