source: 2011/26/JaniN/neon wars/neon wars/neon wars/Peli.cs @ 2420

Revision 2420, 11.4 KB checked in by janiemit, 8 years ago (diff)

Talletus.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8using Physics2DDotNet.Joints;
9using Physics2DDotNet.Ignorers;
10
11class Pelaaja : PhysicsObject
12{
13    public int Elamat = 10;
14
15    public Pelaaja(double leveys, double korkeus)
16        : base(leveys, korkeus)
17    {
18    }
19}
20class vihulainen : PhysicsObject
21{
22    public int Elamat = 2;
23
24    public vihulainen(double leveys, double korkeus)
25        : base(leveys, korkeus)
26    {
27    }
28}
29public class Peli : PhysicsGame
30{
31    ScoreList topLista = new ScoreList(20, false, 0);
32    Pelaaja pelaaja;
33    PushButton korkeusnappi;
34    PushButton leveysnappi;
35    PushButton näytäPistelistaNappi;
36    PushButton exitNappi;
37    GameObject pyssy;
38    int montakoVihollistaLuotu = 0;
39    int montakoVihollistaLuodaan = 1;
40    PhysicsObject alareuna;
41    //int pisteet = 0;
42    bool ladattu = true;
43    //Label pistelaskuri;
44    int vihollisia;
45    int montakoVihollistaRuudullaEnintaan = 100000000;
46    BarGauge pelaajaElamaPalkki;
47    DoubleMeter pelaajanElamat;
48    Image peliloppui = LoadImage("gameover");
49    int kentanLeveys = 800;
50    int kentanKorkeus = 800;
51    //int pMaxMaara = 200;
52    ExplosionSystem rajahdys = new ExplosionSystem(LoadImage("rajahdys"), 1000);
53    Timer latausajastin = new Timer();
54    Timer vihollistenLuontiAjastin = new Timer();
55    Timer vihollistenLuomisenNopeutus = new Timer();
56    bool ksiitti = false;
57
58    int vaikeus = 0;
59
60    public override void Begin()
61    {
62        ClearAll();
63        Keyboard.Listen(Key.Enter, ButtonState.Released, Start_game, null);
64        aloitusruudunnappulat();
65        if (DataStorage.Exists("pisteet.xml"))
66            topLista = DataStorage.Load<ScoreList>(topLista, "pisteet.xml");
67
68
69
70    }
71
72    void Start_game()
73    {
74        ClearAll();
75        rajahdys = new ExplosionSystem(LoadImage("rajahdys"), 1000);
76
77        aseta_näppäimet();
78        Mouse.IsCursorVisible = true;
79        Camera.ZoomToLevel();
80
81        latausajastin.Interval = 0.03;
82        latausajastin.Trigger += new Timer.TriggerHandler(latausajastin_Trigger);
83        latausajastin.Start();
84
85        vihollisia = 0;
86        montakoVihollistaLuodaan = 1;
87        montakoVihollistaRuudullaEnintaan = 10;
88        montakoVihollistaLuotu = 0;
89
90        Level.BackgroundColor = Color.DarkCyan;
91
92        vihollistenLuontiAjastin.Interval = 1;
93        vihollistenLuontiAjastin.Trigger += TeeVihollisia;
94        vihollistenLuontiAjastin.Start();
95
96        vihollistenLuomisenNopeutus = new Timer();
97        vihollistenLuomisenNopeutus.Interval = 5; // Kuinka monen sekunnin välein vihuja tulee lisää
98        vihollistenLuomisenNopeutus.Trigger += NopeutaVihollistenLuontia;
99        vihollistenLuomisenNopeutus.Tag = vihollistenLuontiAjastin;
100        vihollistenLuomisenNopeutus.Start();
101
102        pelaaja = new Pelaaja(50.0, 50.0);
103        pelaaja.X = 0;
104        pelaaja.Color = Color.Blue;
105        pelaaja.CollisionIgnoreGroup = 1;
106        pelaaja.Shape = Shape.Triangle;
107        pelaaja.Y = Level.Bottom + 100;
108        Add(pelaaja);
109
110        pelaajanElamat = new DoubleMeter(pelaaja.Elamat);
111        pelaajanElamat.LowerLimit += PeliLoppui;
112
113        pelaajaElamaPalkki = new BarGauge(20, Screen.Width / 3);
114        //pelaajaElamaPalkki.X = Screen.Left + Screen.Width / 4;
115        pelaajaElamaPalkki.Y = Screen.Bottom + 40;
116        pelaajaElamaPalkki.Angle = -Angle.FromDegrees(90);
117        pelaajaElamaPalkki.Color = Color.Red;
118        pelaajaElamaPalkki.BarColor = Color.Green;
119
120        pelaajaElamaPalkki.BorderColor = Color.Purple;
121        pelaajanElamat.MaxValue = 10;
122        pelaajanElamat.Value = 10;
123        pelaajaElamaPalkki.BindTo(pelaajanElamat);
124
125        Add(pelaajaElamaPalkki);
126
127        pyssy = new GameObject(100, 5);
128        pyssy.Color = Color.Black;
129        pelaaja.Add(pyssy);
130
131        pyssy.Image = LoadImage("Untitled");
132        Level.CreateBorders();
133
134        alareuna = Level.CreateBottomBorder();
135
136        SoundEffect rajahdysAani = LoadSoundEffect("rajahdys");
137
138
139
140        //pistelaskuri = new Label(pisteet.ToString());
141        //pistelaskuri.Position = new Vector(Screen.Right - 40, Screen.Top - 10);
142        //Add(pistelaskuri);
143
144        if (RandomGen.NextBool())
145            MediaPlayer.Play("Castlevania X(Saturn)");
146        else
147            MediaPlayer.Play("Super Castlevania IV(SNES)");
148        Add(rajahdys);
149    }
150
151    void PeliLoppui(double arvo)
152    {
153        ClearAll();
154        Level.Background.Image = peliloppui;
155        ajastintenpysaytys();
156        näytäPistelista();
157
158        //Timer.SingleShot(20, Begin);
159    }
160
161    void latausajastin_Trigger(Timer sender)
162    {
163        ladattu = true;
164    }
165
166    void aseta_näppäimet()
167    {
168        Mouse.Listen(MouseButton.Left, ButtonState.Down, ampuu, null);
169        Keyboard.Listen(Key.Q, ButtonState.Pressed, KsiittiNappi, null);
170        Keyboard.Listen(Key.Escape, ButtonState.Pressed,exitGame, null);
171    }
172
173
174    protected override void Update(Time time)
175    {
176        if (pyssy != null)
177        {
178            pyssy.Angle = (Mouse.PositionOnWorld - pelaaja.Position).Angle;
179        }
180
181        base.Update(time);
182    }
183
184    void ampuu()
185    {
186        if (!ladattu) return;
187        PhysicsObject ammus = new PhysicsObject(5, 5);
188        ammus.Velocity = (Mouse.PositionOnWorld - pelaaja.Position).Normalize() * 500;
189
190        ammus.Tag = "ammus";
191        ammus.Destroyed += new Action(delegate { ammus_Destroyed(ammus); });
192        Add(ammus);
193        ammus.Position = pelaaja.Position + (Mouse.PositionOnWorld - pelaaja.Position).Normalize() * ((pyssy.Width / 2) - 14);
194
195        AddCollisionHandler(ammus, KasitteleAmmuksenTormays);
196        ammus.Shape = Shape.Circle;
197        ammus.Color = Color.Black;
198        ladattu = false;
199    }
200
201    void ammus_Destroyed(PhysicsObject ammus)
202    {
203
204        rajahdys.AddEffect(ammus.Position, 1000);
205        rajahdys.MaxScale = 8;
206        rajahdys.MinScale = 4;
207        //rajahdys.
208
209
210    }
211
212    void KasitteleAmmuksenTormays(PhysicsObject ammus, PhysicsObject kohde)
213    {
214        if (kohde != pelaaja && kohde.Tag.ToString() != "ammus") ammus.Destroy();
215        if (kohde is vihulainen)
216        {
217            vihulainen vihu = kohde as vihulainen;
218            vihu.Color = Color.Red;
219            vihu.Elamat -= 1;
220            if (vihu.Elamat <= 0) { vihu.Destroy(); vihollisia--; }
221        }
222    }
223    void KasitteleVihollisenTormays(PhysicsObject vihollinen, PhysicsObject kohde)
224    {
225        if (kohde == alareuna)
226        {
227            vihollinen.Destroy();
228            vihollisia--;
229            if(!ksiitti) pelaajanElamat.Value--;
230        }
231    }
232
233    void NopeutaVihollistenLuontia(Timer sender)
234    {
235        montakoVihollistaLuodaan += 1;
236        MessageDisplay.Add("aalto numero " + montakoVihollistaLuodaan);
237    }
238
239    void TeeVihollisia(Timer sender)
240    {
241        if (vihollisia < montakoVihollistaRuudullaEnintaan)
242        {
243            vihollisia += montakoVihollistaLuodaan;
244            for (int i = 0; i < montakoVihollistaLuodaan; i++)
245            {
246                montakoVihollistaLuotu++; // montakoVihollistaLuotu = montakoVihollistaLuotu + 1;
247                vihulainen vihollinen = new vihulainen(50, 50);
248                vihollinen.Shape = Shape.Triangle;
249                vihollinen.Velocity = new Vector(0, 300);
250                vihollinen.X = RandomGen.NextDouble(Level.Left + 10, Level.Right - 10);
251                vihollinen.Y = Level.Top - 35;
252                vihollinen.Tag = "vihollinen";
253                vihollinen.Color = Color.Green;
254                vihollinen.CollisionIgnoreGroup = 1;
255                //vihollinen.Image = LoadImage("vihollinen");
256                vihollinen.Angle = Angle.StraightAngle;
257                vihollinen.CanRotate = false;
258                AddCollisionHandler(vihollinen, KasitteleVihollisenTormays);
259                Add(vihollinen);
260            }
261        }
262    }
263    void aloitusruudunnappulat()
264    {
265        Mouse.IsCursorVisible = true;
266        luonappi("Aloita peli", new Vector(0, 0), new Action(Start_game), Color.Aqua, Color.White);
267        korkeusnappi = luonappi("korkeus normi", new Vector(0, 70), new Action(muutaKorkeutta), Color.Blue, Color.White);
268        leveysnappi = luonappi("leveys normi", new Vector(0, -70), new Action(muutaLeveytta), Color.Red, Color.White);
269        näytäPistelistaNappi = luonappi("pisteet", new Vector(170, 0), new Action(näytäPisteet), Color.Green, Color.White);
270        exitNappi = luonappi("exit game", new Vector(-170, 0), new Action(exitGame), Color.Black, Color.White);
271    }
272    PushButton luonappi(string Teksti, Vector paikka, Action action, Color väri, Color tekstinväri)
273    {
274        PushButton nappi = new PushButton(Teksti);
275        nappi.Position = paikka;
276        nappi.Clicked += action;
277        nappi.Color = väri;
278        nappi.TextColor =tekstinväri;
279        Add(nappi);
280        return nappi;
281    }
282    void ajastintenpysaytys()
283    {
284        latausajastin.Stop();
285        vihollistenLuontiAjastin.Stop();
286        vihollistenLuomisenNopeutus.Stop();
287    }
288    void muutaKorkeutta()
289    {
290        vaikeus++;
291        vaikeus = vaikeus % 3;
292
293        switch (vaikeus)
294        {
295            case 0: Level.Height = kentanKorkeus;
296                korkeusnappi.Text = "korkeus=normi";
297                break;
298            case 1: Level.Height = kentanKorkeus * 2;
299                korkeusnappi.Text = "korkeus=*2";
300                break;
301            case 2: Level.Height = kentanKorkeus / 2;
302                korkeusnappi.Text = "korkeus=/2";
303                break;
304            default:
305                break;
306        }
307        //Level.Height = Level.Height * 2;
308        //Level.Height = Level.Height / 2;
309    }
310    void muutaLeveytta()
311    {
312        vaikeus++;
313        vaikeus = vaikeus % 3;
314
315        switch (vaikeus)
316        {
317            case 0: Level.Width = kentanLeveys;
318                leveysnappi.Text = "leveys=normi";
319                break;
320            case 1: Level.Width = kentanLeveys * 2;
321                leveysnappi.Text = "leveys=*2";
322                break;
323            case 2: Level.Width = kentanLeveys / 2;
324                leveysnappi.Text = "leveys=/2";
325                break;
326            default:
327                break;
328        }
329        //Level.Height = Level.Height * 2;
330        //Level.Height = Level.Height / 2;
331
332    }
333    //Level.Width = Level.Width * 2;
334    // Level.Width = kentanLeveys;
335    void näytäPistelista()
336    {
337        HighScoreWindow topIkkuna = new HighScoreWindow("Neon Wars",
338                             "Parhaat pisteet",
339                             "Onneksi olkoon, pääsit listalle pisteillä %p! Syötä nimesi:",
340
341                               topLista, montakoVihollistaLuodaan);
342        topIkkuna.Closed += TallennaPisteet;
343        Add(topIkkuna);
344
345    }
346    void TallennaPisteet(Window sender)
347    {
348        DataStorage.Save<ScoreList>(topLista, "pisteet.xml");
349
350    }
351
352    void KsiittiNappi()
353    {
354        ksiitti = !ksiitti;
355    }
356
357    void näytäPisteet()
358    {
359        HighScoreWindow topIkkuna = new HighScoreWindow("Neon Wars",
360                              "Parhaat pisteet",
361                              topLista);
362        topIkkuna.Closed += TallennaPisteet;
363        Add(topIkkuna);
364    }
365    void exitGame()
366    {
367        Exit();
368    }
369   
370}
Note: See TracBrowser for help on using the repository browser.