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

Revision 2380, 10.7 KB checked in by janiemit, 9 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(10, 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 = 10;
45    BarGauge pelaajaElamaPalkki;
46    DoubleMeter pelaajanElamat;
47    Image peliloppui = LoadImage("gameover");
48    int kentanLeveys = 400;
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        Timer.SingleShot(3, Begin);
154        ajastintenpysaytys();
155    }
156
157    void latausajastin_Trigger(Timer sender)
158    {
159        ladattu = true;
160    }
161
162    void aseta_näppäimet()
163    {
164        Mouse.Listen(MouseButton.Left, ButtonState.Down, ampuu, null);
165    }
166
167
168    protected override void Update(Time time)
169    {
170        if (pyssy != null)
171        {
172            pyssy.Angle = (Mouse.PositionOnWorld - pelaaja.Position).Angle;
173        }
174
175        base.Update(time);
176    }
177
178    void ampuu()
179    {
180        if (!ladattu) return;
181        PhysicsObject ammus = new PhysicsObject(5, 5);
182        ammus.Velocity = (Mouse.PositionOnWorld - pelaaja.Position).Normalize() * 500;
183
184        ammus.Tag = "ammus";
185        ammus.Destroyed += new Action(delegate { ammus_Destroyed(ammus); });
186        Add(ammus);
187        ammus.Position = pelaaja.Position + (Mouse.PositionOnWorld - pelaaja.Position).Normalize() * ((pyssy.Width / 2) - 14);
188
189        AddCollisionHandler(ammus, KasitteleAmmuksenTormays);
190        ammus.Shape = Shape.Circle;
191        ammus.Color = Color.Black;
192        ladattu = false;
193    }
194
195    void ammus_Destroyed(PhysicsObject ammus)
196    {
197       
198        rajahdys.AddEffect(ammus.Position, 1000);
199        rajahdys.MaxScale = 8;
200        rajahdys.MinScale=4;
201        //rajahdys.
202
203
204    }
205
206    void KasitteleAmmuksenTormays(PhysicsObject ammus, PhysicsObject kohde)
207    {
208        if (kohde != pelaaja && kohde.Tag.ToString() != "ammus") ammus.Destroy();
209        if (kohde is vihulainen)
210        {
211            vihulainen vihu = kohde as vihulainen;
212            vihu.Color = Color.Red;
213            vihu.Elamat -= 1;
214            if (vihu.Elamat <= 0) { vihu.Destroy(); vihollisia--; }
215        }
216    }
217    void KasitteleVihollisenTormays(PhysicsObject vihollinen, PhysicsObject kohde)
218    {
219        if (kohde == alareuna)
220        {
221            vihollinen.Destroy();
222            vihollisia--;
223            pelaajanElamat.Value--;
224        }
225    }
226
227    void NopeutaVihollistenLuontia(Timer sender)
228    {
229        montakoVihollistaLuodaan += 1;
230        MessageDisplay.Add("aalto numero " + montakoVihollistaLuodaan);
231    }
232
233    void TeeVihollisia(Timer sender)
234    {
235        if (vihollisia < montakoVihollistaRuudullaEnintaan)
236        {
237            vihollisia+=montakoVihollistaLuodaan;
238            for (int i = 0; i < montakoVihollistaLuodaan; i++)
239            {
240                montakoVihollistaLuotu++; // montakoVihollistaLuotu = montakoVihollistaLuotu + 1;
241                vihulainen vihollinen = new vihulainen(50, 50);
242                vihollinen.Shape = Shape.Triangle;
243                vihollinen.Velocity = new Vector(0, 300);
244                vihollinen.X = RandomGen.NextDouble(Level.Left + 10, Level.Right - 10);
245                vihollinen.Y = Level.Top - 35;
246                vihollinen.Tag = "vihollinen";
247                vihollinen.Color = Color.Green;
248                vihollinen.CollisionIgnoreGroup = 1;
249                //vihollinen.Image = LoadImage("vihollinen");
250                vihollinen.Angle = Angle.StraightAngle;
251                vihollinen.CanRotate = false;
252                AddCollisionHandler(vihollinen, KasitteleVihollisenTormays);
253                Add(vihollinen);
254            }
255        }
256    }
257    void aloitusruudunnappulat()
258    {
259        Mouse.IsCursorVisible = true;
260        luonappi("Aloita peli", new Vector(0, 0), new Action(Start_game), Color.Aqua);
261        korkeusnappi = luonappi("korkeus normi",new Vector(0,70),new Action(muutaKorkeutta),Color.Blue);
262        leveysnappi = luonappi("leveys normi", new Vector(0, -70), new Action(muutaLeveytta), Color.Red);
263        näytäPistelistaNappi = luonappi("pisteet", new Vector(170, 0), new Action(näytäPistelista), Color.Green);
264    }
265    PushButton luonappi(string Teksti, Vector paikka, Action action, Color väri)
266    {
267        PushButton nappi = new PushButton(Teksti);
268        nappi.Position = paikka;
269        nappi.Clicked += action;
270        nappi.Color = väri;
271        Add(nappi);
272        return nappi;
273    }
274    void ajastintenpysaytys()
275    {
276        latausajastin.Stop();
277        vihollistenLuontiAjastin.Stop();
278        vihollistenLuomisenNopeutus.Stop();
279    }
280    void muutaKorkeutta()
281    {
282        vaikeus++;
283        vaikeus = vaikeus % 3;
284
285        switch (vaikeus)
286        {
287            case 0: Level.Height = kentanKorkeus;
288                korkeusnappi.Text = "korkeus=normi";
289                break;
290            case 1: Level.Height = kentanKorkeus * 2;
291                korkeusnappi.Text = "korkeus=*2";
292                break;
293            case 2: Level.Height = kentanKorkeus / 2;
294                korkeusnappi.Text = "korkeus=/2";
295                break;
296            default:
297                break;
298        }
299        //Level.Height = Level.Height * 2;
300        //Level.Height = Level.Height / 2;
301    }
302    void muutaLeveytta()
303    {
304        vaikeus++;
305        vaikeus = vaikeus % 3;
306
307        switch (vaikeus)
308        {
309            case 0: Level.Width = kentanLeveys;
310                leveysnappi.Text = "leveys=normi";
311                break;
312            case 1: Level.Width = kentanLeveys * 2;
313                leveysnappi.Text = "leveys=*2";
314                break;
315            case 2: Level.Width = kentanLeveys / 2;
316                leveysnappi.Text = "leveys=/2";
317                break;
318            default:
319                break;
320        }
321        //Level.Height = Level.Height * 2;
322        //Level.Height = Level.Height / 2;
323       
324    }
325     //Level.Width = Level.Width * 2;
326       // Level.Width = kentanLeveys;
327    void näytäPistelista()
328    {
329        HighScoreWindow topIkkuna = new HighScoreWindow("Neon Wars",
330                             "Parhaat pisteet",
331                               topLista);
332        topIkkuna.Closed += TallennaPisteet;
333        Add(topIkkuna);
334
335    }
336    void TallennaPisteet(Window sender)
337    {
338        DataStorage.Save<ScoreList>(topLista, "pisteet.xml");
339
340    }
341} 
342
343//
344//        HighScoreWindow topIkkuna = new HighScoreWindow("Neon Wars",
345//                               "Parhaat pisteet",
346//                               topLista);
347//        topIkkuna.Closed += TallennaPisteet;
348//        Add(topIkkuna);
Note: See TracBrowser for help on using the repository browser.