source: 2014/26/NikoK/WarTrain/WarTrain/WarTrain/WarTrain/WarTrain.cs @ 5137

Revision 5137, 16.2 KB checked in by nivikinn, 8 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9/*
10Ase1    Vihreä      1.00x   ->    1.00 x 20hp / 1s    ->    20.00hp / 1s    (10.00hp / osuma)
11Ase1    Keltainen   1.25x   ->    1.25 x 20hp / 1s    ->    25.00hp / 1s    (12.50hp / osuma)
12Ase1    Punainen    1.50x   ->    1.50 x 20hp / 1s    ->    30.00hp / 1s    (15.00hp / osuma)
13
14Ase2    Vihreä      1.00x   ->    1.00 x 25hp / 1s    ->    25.00hp / 1s    (25.00hp / osuma)
15Ase2    Keltainen   1.25x   ->    1.25 x 25hp / 1s    ->    31.25hp / 1s    (31.25hp / osuma)
16Ase2    Punainen    1.50x   ->    1.50 x 25hp / 1s    ->    37.50hp / 1s    (37.50hp / osuma)
17
18Ase3    Vihreä      1.00x   ->    1.00 x 30hp / 1s    ->    30.00hp / 1s    (60.00hp / osuma)
19Ase3    Keltainen   1.25x   ->    1.25 x 30hp / 1s    ->    37.50hp / 1s    (75.00hp / osuma)
20Ase3    Punainen    1.50x   ->    1.50 x 30hp / 1s    ->    45.00hp / 1s    (90.00hp / osuma)
21
22 *
23
24Sotilas Vihreä      0.50x   ->    0.50 x 20hp / 1s    ->    10.00hp / 1s    (5.00hp / osuma)
25Sotilas Keltainen   0.75x   ->    0.75 x 20hp / 1s    ->    15.00hp / 1s    (7.50hp / osuma)
26Sotilas Punainen    1.00x   ->    1.00 x 20hp / 1s    ->    20.00hp / 1s    (10.0hp / osuma)
27                                             
28Tankki  Vihreä      0.50x   ->    0.50 x 25hp / 1s    ->    12.50hp / 1s    (12.50hp / osuma)
29Tankki  Keltainen   0.75x   ->    0.75 x 25hp / 1s    ->    18.75hp / 1s    (18.75hp / osuma)
30Tankki  Punainen    1.00x   ->    1.00 x 25hp / 1s    ->    25.00hp / 1s    (25.00hp / osuma)
31                                             
32Tykki   Vihreä      0.50x   ->    0.50 x 30hp / 1s    ->    15.0hp / 1s     (30.00hp / osuma)
33Tykki   Keltainen   0.75x   ->    0.75 x 30hp / 1s    ->    22.5hp / 1s     (45.00hp / osuma)
34Tykki   Punainen    1.00x   ->    1.00 x 30hp / 1s    ->    30.0hp / 1s     (60.00hp / osuma)
35*/
36
37public class WarTrain : PhysicsGame
38{
39    EasyHighScore topLista = new EasyHighScore();
40
41    SoundEffect Pam1 = LoadSoundEffect("Pam1");
42    SoundEffect Pam2 = LoadSoundEffect("Pam2");
43    SoundEffect Pam3 = LoadSoundEffect("Pam3");
44    SoundEffect JunaTuhoutuuAani = LoadSoundEffect("JunaveturiTuhoutuu");
45    SoundEffect VaunuTuhoutuuAani = LoadSoundEffect("JunavaunuTuhoutuu");
46    Image alueKuva = LoadImage("Alue");
47    Image raideKuva = LoadImage("Junarata");
48    Image sotilasKuva = LoadImage("Sotilas");
49    Image sotilasKuollutKuva = LoadImage("SotilasK");
50    Image sotilasKuvaKeltainen;
51    Image sotilasKuvaVihrea;
52    Image sotilasKuvaPunainen;
53    Image tankkiKuva = LoadImage("Tankki");
54    Image tankkiKuollutKuva = LoadImage("TankkiK");
55    Image tankkiKuvaKeltainen;
56    Image tankkiKuvaVihrea;
57    Image tankkiKuvaPunainen;
58    Image tykkiKuva = LoadImage("Tykki");
59    Image tykkiKuollutKuva = LoadImage("TykkiK");
60    Image tykkiKuvaKeltainen;
61    Image tykkiKuvaVihrea;
62    Image tykkiKuvaPunainen;
63    Image panosKuva1 = LoadImage("Panos1");
64    Image panosKuva2 = LoadImage("Panos2");
65    Image panosKuva3 = LoadImage("Panos3");
66    Image aseKuva1 = LoadImage("Ase1");
67    Image aseKuva2 = LoadImage("Ase2");
68    Image aseKuva3 = LoadImage("Ase3");
69
70    Image[] taustakuvaKuvat = new Image[2];
71    GameObject[] taustakuvat = new GameObject[2];
72    Image[] junarataKuvat = new Image[2];
73    GameObject[] kiskot = new GameObject[2];
74    int ylempiTaustakuva = 1;
75
76    public static WarTrain Peli;
77
78    Juna juna;
79    Timer vihollisAjastin;
80
81    IntMeter aikaPelinAlusta = new IntMeter(0);
82    Timer peliAikaAjastin;
83    int moneskoAlue = 1;
84    int VihollisiaAlueella = 5;
85
86    public override void Begin()
87    {
88        //    ParhaatTulokset = DataStorage.TryLoad<ScoreList>(ParhaatTulokset, "ParhaatTulokset.txt");
89        Peli = this;
90        SetWindowSize(680, 760);
91        LuoValikko();
92    }
93
94
95
96    void LuoValikko()
97    {
98        ClearAll();
99
100        MediaPlayer.Play("Musa");
101        MediaPlayer.IsRepeating = true;
102        MediaPlayer.Volume = 1;
103
104        Mouse.IsCursorVisible = false;
105        MultiSelectWindow Valikko = new MultiSelectWindow("EpicWarTrain", "Uusi peli", "Parhaat tulokset", "Lopeta peli");
106        Level.Background.CreateGradient(Color.DarkGray, Color.DarkJungleGreen);
107        Valikko.SetButtonColor(Color.DarkJungleGreen);
108        Valikko.SetButtonTextColor(Color.White);
109        Valikko.SelectionColor = Color.JungleGreen;
110        Valikko.ItemSelected += PainettiinValikonNappia;
111        Valikko.DefaultCancel = 3;
112        Add(Valikko);
113        //Pistelaskuri.Reset();
114    }
115
116    void PainettiinValikonNappia(int NappiValinta)
117    {
118        switch (NappiValinta)
119        {
120            case 0:
121                LuoKentta("ykkonen");
122                break;
123            case 1:
124                break;
125            case 2:
126                Exit();
127                break;
128        }
129    }
130
131    //HighScoreWindow TulosIkkuna = new HighScoreWindow(
132    //    "Parhaat tulokset:",
133    //    ParhaatTulokset);
134    //TulosIkkuna.Closed += TallennaPisteet;
135    //
136    //void TallennaPisteet(Window sender)
137    //{
138    //    DataStorage.Save<ScoreList>(ParhaatTulokset, "ParhaatTulokset.txt");
139    //}
140
141    IntMeter Pistelaskuri;
142
143    void LuoPisteLaskuri()
144    {
145        Pistelaskuri = new IntMeter(0);
146        Label PisteNaytto = new Label();
147        PisteNaytto.X = Screen.Left + 100;
148        PisteNaytto.Y = Screen.Top - 100;
149        PisteNaytto.Color = Color.White;
150        PisteNaytto.BindTo(Pistelaskuri);
151        //Add(PisteNaytto);
152    }
153
154    void LuoKentta(string kentta)
155    {
156        ClearAll();
157        Spawnaus.MapLength = 100;
158        Spawnaus.Initialize();
159        MediaPlayer.Play("Musa2");
160        MediaPlayer.Volume = 0.2;
161        Level.Background.CreateGradient(Color.DarkGray, Color.DarkJungleGreen);
162
163        for (int i = 0; i < taustakuvaKuvat.Length; i++)
164        {
165            taustakuvaKuvat[i] = alueKuva;
166            taustakuvat[i] = new GameObject(taustakuvaKuvat[i]);
167            taustakuvat[i].Size = new Vector(Screen.Width + 25, Screen.Height + 25);
168            Add(taustakuvat[i], -3);
169
170            junarataKuvat[i] = raideKuva;
171            kiskot[i] = new GameObject(junarataKuvat[i]);
172            kiskot[i].Size = new Vector(kiskot[i].Width * 2, Screen.Height + 25);
173            Add(kiskot[i], -2);
174        }
175
176        taustakuvat[0].Position = Vector.Zero;
177        taustakuvat[1].Position = taustakuvat[0].Position + new Vector(0.0, taustakuvat[0].Height);
178
179        kiskot[0].Position = Vector.Zero;
180        kiskot[1].Position = kiskot[0].Position + new Vector(0.0, kiskot[0].Height);
181
182        sotilasKuvaPunainen = VaihdaVari(sotilasKuva, Color.Gold, Color.DarkRed);
183        sotilasKuvaKeltainen = sotilasKuva;
184        sotilasKuvaVihrea = VaihdaVari(sotilasKuva, Color.Gold, Color.ForestGreen);
185        tankkiKuvaPunainen = VaihdaVari(tankkiKuva, Color.Gold, Color.DarkRed);
186        tankkiKuvaKeltainen = tankkiKuva;
187        tankkiKuvaVihrea = VaihdaVari(tankkiKuva, Color.Gold, Color.ForestGreen);
188        tykkiKuvaPunainen = VaihdaVari(tykkiKuva, Color.Gold, Color.DarkRed);
189        tykkiKuvaKeltainen = tykkiKuva;
190        tykkiKuvaVihrea = VaihdaVari(tykkiKuva, Color.Gold, Color.ForestGreen);
191
192        //Layers[-3].RelativeTransition = new Vector(0.5, 0.5);
193        LuoJuna();
194        Camera.Follow(juna.Veturi);
195        Camera.FollowOffset = new Vector(0.0, Screen.Top - juna.Veturi.Height);
196
197        for (int i = 0; i < 1; i++)
198        {
199            Vaunu v = new Vaunu(LoadImage("Junavaunu"), 100);
200            juna.LisaaVaunu(v);
201        }
202        Ase kk = new Ase(aseKuva1.Width, aseKuva1.Height, 12.50);
203        kk.FireRate = 2;
204        kk.InfiniteAmmo = true;
205        kk.Image = aseKuva1;
206        kk.Size *= 2;
207        juna.Vaunut[0].LisaaAse(kk, new Vector(0.0, juna.Vaunut[0].Height / 3));
208
209        Ase pieniTykki = new Ase(aseKuva2.Width, aseKuva2.Height, 31.25);
210        pieniTykki.FireRate = 1;
211        pieniTykki.InfiniteAmmo = true;
212        pieniTykki.Image = aseKuva2;
213        pieniTykki.Size *= 2;
214        juna.Vaunut[0].LisaaAse(pieniTykki, new Vector(0.0, kk.Position.Y - juna.Vaunut[0].Height / 3));
215
216        Ase isoTykki = new Ase(aseKuva3.Width, aseKuva3.Height, 75.00);
217        isoTykki.FireRate = 0.5;
218        isoTykki.InfiniteAmmo = true;
219        isoTykki.Image = aseKuva3;
220        isoTykki.Size *= 2;
221        juna.Vaunut[0].LisaaAse(isoTykki, new Vector(0.0, pieniTykki.Position.Y - juna.Vaunut[0].Height / 3));
222
223        AsetaOhjaimet();
224
225        peliAikaAjastin = new Timer();
226        peliAikaAjastin.Interval = 1.0;
227        peliAikaAjastin.Timeout += delegate { aikaPelinAlusta.Value++; };
228        peliAikaAjastin.Start();
229        SmoothTextures = false;
230    }
231    protected override void Update(Time time)
232    {
233        if (taustakuvat == null || taustakuvat[0] == null)
234        {
235            base.Update(time);
236            return;
237        }
238
239        if (taustakuvat[ylempiTaustakuva].Position.Y <= Camera.ScreenToWorld(Screen.Center).Y)
240        {
241            int toinenTaustakuva;
242            if (ylempiTaustakuva == 0)
243                toinenTaustakuva = 1;
244            else toinenTaustakuva = 0;
245            taustakuvat[toinenTaustakuva].Position = new Vector(0.0, taustakuvat[ylempiTaustakuva].Position.Y + taustakuvat[ylempiTaustakuva].Height);
246            kiskot[toinenTaustakuva].Position = new Vector(0.0, kiskot[ylempiTaustakuva].Position.Y + kiskot[ylempiTaustakuva].Height);
247            moneskoAlue++;
248            SpawnaaVihollisia(taustakuvat[toinenTaustakuva].Position);
249            ylempiTaustakuva = toinenTaustakuva;
250        }
251
252        base.Update(time);
253    }
254
255    void SpawnaaVihollisia(Vector keskipiste)
256    {
257        EnemyLevel soldierLevel = Spawnaus.GetEnemyLevelAt(moneskoAlue, EnemyType.Soldier);
258        EnemyLevel tankLevel = Spawnaus.GetEnemyLevelAt(moneskoAlue, EnemyType.Tank);
259        EnemyLevel cannonLevel = Spawnaus.GetEnemyLevelAt(moneskoAlue, EnemyType.Cannon);
260        Dictionary<EnemyType, int> spawnProbabilities = Spawnaus.GetProbabilities(moneskoAlue);
261        int soldierProbs;
262        spawnProbabilities.TryGetValue(EnemyType.Soldier, out soldierProbs);
263        int tankProbs;
264        spawnProbabilities.TryGetValue(EnemyType.Tank, out tankProbs);
265        int cannonProbs;
266        spawnProbabilities.TryGetValue(EnemyType.Cannon, out cannonProbs);
267
268
269        for (int i = 0; i < VihollisiaAlueella; i++)
270        {
271            int vihuTyyppi = RandomGen.NextIntWithProbabilities((double)soldierProbs / 100.0, (double)tankProbs / 100.0, (double)cannonProbs / 100.0); // 0 sotilas, 1 tankki, 2 tykki
272
273            Vector paikka = RandomGen.NextVector(Screen.Left + 70, Camera.ScreenToWorld(new Vector(0.0, Screen.Top)).Y, Screen.Right - 70, Camera.ScreenToWorld(new Vector(0.0, Screen.Top)).Y + Screen.Height);
274
275            switch (vihuTyyppi)
276            {
277                case 0:
278                    LuoVihollinen(EnemyType.Soldier, soldierLevel, paikka);
279                    break;
280                case 1:
281                    LuoVihollinen(EnemyType.Tank, tankLevel, paikka);
282                    break;
283                case 2:
284                    LuoVihollinen(EnemyType.Cannon, cannonLevel, paikka);
285                    break;
286                default:
287                    // mitään ei voi spawnata
288                    break;
289            }
290        }
291    }
292
293    void LuoVihollinen(EnemyType type, EnemyLevel level, Vector paikka)
294    {
295        switch (type)
296        {
297            case EnemyType.Soldier:
298                LuoSotilas(level, paikka);
299                break;
300            case EnemyType.Tank:
301                LuoTankki(level, paikka);
302                break;
303            case EnemyType.Cannon:
304                LuoTykki(level, paikka);
305                break;
306            default:
307                break;
308        }
309    }
310
311    void LuoSotilas(EnemyLevel level, Vector paikka)
312    {
313        switch (level)
314        {
315            case EnemyLevel.Green:
316                Vihollinen vihrea = new Vihollinen(16, 16, 10.0, 5.00, 0.5);
317                vihrea.Image = sotilasKuvaVihrea;
318                vihrea.Position = paikka;
319                vihrea.Ase.AmmuksenKuva = panosKuva1;
320                Add(vihrea);
321                break;
322            case EnemyLevel.Yellow:
323                Vihollinen keltainen = new Vihollinen(16, 16, 12.5, 7.50, 0.5);
324                keltainen.Image = sotilasKuvaKeltainen;
325                keltainen.Position = paikka;
326                keltainen.Ase.AmmuksenKuva = panosKuva1;
327                Add(keltainen);
328                break;
329            case EnemyLevel.Red:
330                Vihollinen punainen = new Vihollinen(16, 16, 15.0, 10.00, 0.5);
331                punainen.Image = sotilasKuvaPunainen;
332                punainen.Position = paikka;
333                punainen.Ase.AmmuksenKuva = panosKuva1;
334                Add(punainen);
335                break;
336            default:
337                break;
338        }
339    }
340
341    void LuoTankki(EnemyLevel level, Vector paikka)
342    {
343        switch (level)
344        {
345            case EnemyLevel.Green:
346                Vihollinen vihrea = new Vihollinen(48, 32, 25.0, 12.5, 1.0);
347                vihrea.Image = tankkiKuvaVihrea;
348                vihrea.Position = paikka;
349                vihrea.Ase.AmmuksenKuva = panosKuva2;
350                Add(vihrea);
351                break;
352            case EnemyLevel.Yellow:
353                Vihollinen keltainen = new Vihollinen(48, 32, 31.25, 18.75, 1.0);
354                keltainen.Image = tankkiKuvaKeltainen;
355                keltainen.Position = paikka;
356                keltainen.Ase.AmmuksenKuva = panosKuva2;
357                Add(keltainen);
358                break;
359            case EnemyLevel.Red:
360                Vihollinen punainen = new Vihollinen(48, 32, 37.5, 25, 1.0);
361                punainen.Image = tankkiKuvaPunainen;
362                punainen.Position = paikka;
363                punainen.Ase.AmmuksenKuva = panosKuva2;
364                Add(punainen);
365                break;
366            default:
367                break;
368        }
369
370    }
371
372    void LuoTykki(EnemyLevel level, Vector paikka)
373    {
374        switch (level)
375        {
376            case EnemyLevel.Green:
377                Vihollinen vihrea = new Vihollinen(48, 32, 60.0, 30.0, 2.0);
378                vihrea.Image = tykkiKuvaVihrea;
379                vihrea.Position = paikka;
380                vihrea.Ase.AmmuksenKuva = panosKuva3;
381                Add(vihrea);
382                break;
383            case EnemyLevel.Yellow:
384                Vihollinen keltainen = new Vihollinen(48, 32, 75.0, 45.0, 2.0);
385                keltainen.Image = tykkiKuvaKeltainen;
386                keltainen.Position = paikka;
387                keltainen.Ase.AmmuksenKuva = panosKuva3;
388                Add(keltainen);
389                break;
390            case EnemyLevel.Red:
391                Vihollinen punainen = new Vihollinen(48, 32, 90.0, 60.0, 2.0);
392                punainen.Image = tykkiKuvaPunainen;
393                punainen.Position = paikka;
394                punainen.Ase.AmmuksenKuva = panosKuva3;
395                Add(punainen);
396                break;
397            default:
398                break;
399        }
400    }
401
402    Image VaihdaVari(Image kuva, Color vaihdettava, Color miksiVaihdetaan)
403    {
404        Image k = kuva.Clone();
405        k.ReplaceColor(vaihdettava, miksiVaihdetaan);
406        return k;
407    }
408
409    void LuoJuna()
410    {
411        juna = new Juna(500, LoadImage("Junaveturi"));
412    }
413
414    void JunaTuhoutui()
415    {
416        juna.Veturi.Destroy();
417        JunaTuhoutuuAani.Play();
418        VaunuTuhoutuuAani.Play();
419        //topLista.EnterAndShow(PisteLaskuri.value);
420        //top_lista.HighScoreWindow.Closed += LuoValikko;
421    }
422
423
424    void AsetaOhjaimet()
425    {
426        Keyboard.Listen(Key.W, ButtonState.Down, juna.Liiku, null, 5000.0);
427        Keyboard.Listen(Key.S, ButtonState.Down, juna.Liiku, null, -10000.0);
428        Keyboard.Listen(Key.Up, ButtonState.Down, juna.Liiku, null, 5000.0);
429        Keyboard.Listen(Key.Down, ButtonState.Down, juna.Liiku, null, -10000.0);
430        Keyboard.Listen(Key.R, ButtonState.Pressed, delegate { MessageDisplay.Add(Mouse.PositionOnWorld.ToString()); }, null);
431    }
432}
Note: See TracBrowser for help on using the repository browser.