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

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