source: 2017/31/JouniP/Avaruuspeli/Avaruuspeli/Avaruuspeli/Avaruuspeli.cs @ 9450

Revision 9450, 7.5 KB checked in by nupeohje, 23 months ago (diff)

viimeisin versio Avaruuspelistä. Taustamusaa ja ääniefektejä lisätty.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9/// <summary>
10/// Lisenssi: CC0
11/// </summary>
12public class Avaruuspeli : PhysicsGame
13{
14    Image olionKuva = LoadImage("raketti");
15    Image vihollisenKuva = LoadImage("hirvio");
16    Image taustakuva = LoadImage("sinertava_tausta");
17    SoundEffect tormaysaani = LoadSoundEffect("osuma");
18    SoundEffect kerailyaani = LoadSoundEffect("kolikko");
19
20    PhysicsObject jouninAlus;
21    DoubleMeter alaspainLaskuri;
22    Timer aikaLaskuri;
23
24    public override void Begin()
25    {
26        Alkuvalikko();
27    }
28
29    void Alkuvalikko()
30    {
31        MediaPlayer.Play("awesomeness");
32        Level.Background.Color = Color.Black;
33        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko",
34"Aloita peli", "Parhaat pisteet", "Tekijät", "Lopeta");
35        Add(alkuValikko);
36
37        alkuValikko.AddItemHandler(0, AloitaPeli);
38        alkuValikko.AddItemHandler(1, ParhaatPisteet);
39        alkuValikko.AddItemHandler(2, Tekijatiedot);
40        alkuValikko.AddItemHandler(3, Exit);
41
42        alkuValikko.DefaultCancel = 3; // Oletuksena lopetetaan peli ESC-napilla
43        alkuValikko.Color = Color.AshGray;
44        alkuValikko.SetButtonColor(Color.Black);
45        alkuValikko.Image = taustakuva;
46
47    }
48    void Tekijatiedot()
49    {
50        MessageWindow ikkuna = new MessageWindow("Tekijätiedot:  Jouni\nNuorten peliohjelmointikurssi");
51        Add(ikkuna);
52        ikkuna.Closed += delegate {
53            Alkuvalikko();
54        };
55    }
56    void ParhaatPisteet()
57    {
58
59    }
60
61    void Taukovalikko()
62    {
63        IsPaused = true;
64
65
66        MultiSelectWindow taukovalikko = new MultiSelectWindow("Pelin taukovalikko",
67"Jatka peliä", "Aloita peli alusta", "Lopeta");
68        Add(taukovalikko);
69
70        taukovalikko.AddItemHandler(0, JatkaPelia);
71        taukovalikko.AddItemHandler(1, AloitaPeli);
72        taukovalikko.AddItemHandler(2, Exit);
73
74        taukovalikko.DefaultCancel = 0; // Oletuksena jatketaan peliä taas ESC-napilla!
75        taukovalikko.Color = Color.AshGray;
76        taukovalikko.SetButtonColor(Color.Black);
77        taukovalikko.Image = taustakuva;
78    }
79
80    void JatkaPelia()
81    {
82        IsPaused = false;
83    }
84
85    void AloitaPeli()
86    {
87        ClearAll();
88        IsPaused = false;
89
90        LisaaAlus();
91        LisaaVihollinen();
92        TeeKentta();
93        LuoAikaLaskuri();
94
95        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Taukovalikko, "Lopeta peli");
96
97        Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaPelaajaa, null, new Vector(-1000, 0));
98        Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaPelaajaa, null, new Vector(1000, 0));
99        Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, 1000));
100        Keyboard.Listen(Key.Down, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, -1000));
101
102        Camera.Zoom(2.0);
103        Camera.Follow(jouninAlus);
104    }
105    void LiikutaPelaajaa(Vector vektori)
106    {
107        jouninAlus.Push(vektori);
108    }
109
110    void TeeKentta()
111    {
112        // Tehdään kolikoita kerättäväksi:
113        //LisaaKolikkoRuudulle(200.0, 100.0);
114        //LisaaKolikkoRuudulle(-200.0, -100.0);
115        //LisaaKolikkoRuudulle(135.3, 68.0);
116
117        for (int i = 0; i < 75; i++)
118        {
119            double satunnainenXkoordinaatti = RandomGen.NextDouble(Level.Left, Level.Right);
120            double satunnainenYkoordinaatti = RandomGen.NextDouble(Level.Bottom, Level.Top);
121            LisaaKolikkoRuudulle(satunnainenXkoordinaatti, satunnainenYkoordinaatti);
122        }
123
124
125
126
127
128        // Muutetaan taustakuvaa sopivammaksi:
129        Level.Background.Color = Color.Black;
130        Level.Background.CreateStars();
131        Level.CreateBorders();
132
133        //Level.Background.Image = taustakuva; // tällä saa erillisen kuvan, joka on ladattu ylempänä Beginin yläpuolella muuttujaan
134
135    }
136
137    void LisaaAlus()
138    {
139        jouninAlus = new PhysicsObject(50.0, 70.0);
140        jouninAlus.Image = olionKuva;
141        Add(jouninAlus);
142        AddCollisionHandler(jouninAlus, "raha", KeraaRaha);
143        AddCollisionHandler(jouninAlus, "pahis", PelaajaTormasiPahikseen);
144        //AddCollisionHandler(jouninAlus, "pahis", CollisionHandler.ExplodeObject(300.0, true));
145       
146    }
147
148    void LisaaVihollinen()
149    {
150        PhysicsObject vihollinen = new PhysicsObject(100.0, 100.0);
151        vihollinen.X = 300.0;
152        vihollinen.Y = 350.0;
153        vihollinen.Tag = "pahis";
154        vihollinen.Image = vihollisenKuva;
155        Add(vihollinen);
156
157        FollowerBrain seuraajanAivot = new FollowerBrain(jouninAlus);
158        seuraajanAivot.Speed = 100;                 // Millä nopeudella kohdetta seurataan
159        seuraajanAivot.DistanceFar = 600;           // Etäisyys jolla aletaan seurata kohdetta
160        seuraajanAivot.DistanceClose = 200;         // Etäisyys jolloin ollaan lähellä kohdetta
161        seuraajanAivot.StopWhenTargetClose = false;  // Pysähdytään kun ollaan lähellä kohdetta
162        //seuraajanAivot.FarBrain = satunnaisAivot;   // Käytetään satunnaisaivoja kun ollaan kaukana
163
164        // Tapahtuma, joka tapahtuu kun ollaan lähellä kohdetta
165        seuraajanAivot.TargetClose += mitaTapahtuuKunOllaanLahella;
166
167        vihollinen.Brain = seuraajanAivot;
168    }
169
170    // Aliohjelma joka ajetaan kun olio on tarpeeksi lähellä kohdetta:
171    void mitaTapahtuuKunOllaanLahella()
172    {
173       
174    }
175
176    void LisaaKolikkoRuudulle(double xkoordinaatti, double ykoordinaatti)
177    {
178        PhysicsObject kolikko = new PhysicsObject(10.0, 10.0);
179        kolikko.Color = Color.Yellow;
180        kolikko.X = xkoordinaatti;
181        kolikko.Y = ykoordinaatti;
182        kolikko.Tag = "raha";
183        kolikko.IgnoresCollisionResponse = true;
184        Add(kolikko);
185    }
186
187    void KeraaRaha(PhysicsObject pelaaja, PhysicsObject kultaraha)
188    {
189        // Arvotaan sopiva korkeus äänelle
190        double arvottuTaajuus;
191        arvottuTaajuus = RandomGen.NextDouble(0.0, 0.5);
192        // Soitetaan ääni:
193        kerailyaani.Play(1.0, arvottuTaajuus, 0.0);
194        // Näytetään viesti ja poistetaan kerättävä raha ruudulta:
195        MessageDisplay.Add("Sait kultarahan!");
196        kultaraha.Destroy();
197    }
198
199    void PelaajaTormasiPahikseen(PhysicsObject kukaTormasi, PhysicsObject mihinTormasi)
200    {
201        tormaysaani.Play();
202        MessageDisplay.Add("Osuit viholliseen ja menetit energiaa!");
203        kukaTormasi.Destroy();
204        aikaLaskuri.Stop();
205    }
206
207
208    void LuoAikaLaskuri()
209    {
210        alaspainLaskuri = new DoubleMeter(15);
211
212        aikaLaskuri = new Timer();
213        aikaLaskuri.Interval = 0.1;
214        aikaLaskuri.Timeout += LaskeAlaspain;
215        aikaLaskuri.Start();
216
217        Label aikaNaytto = new Label();
218        aikaNaytto.TextColor = Color.White;
219        aikaNaytto.DecimalPlaces = 1;
220        aikaNaytto.BindTo(alaspainLaskuri);
221        aikaNaytto.X = Screen.Left+300.0;
222        aikaNaytto.Y = Screen.Top-100.0;
223        Add(aikaNaytto);
224    }
225
226    void LaskeAlaspain()
227    {
228        alaspainLaskuri.Value -= 0.1;
229
230        if (alaspainLaskuri.Value <= 0)
231        {
232            MessageDisplay.Add("Aika loppui...");
233            aikaLaskuri.Stop();
234            IsPaused = true; // TODO Esc-napilla voi silti jatkaa peliä! Pitää korjata niin, ettei voi!
235        }
236    }
237
238
239}
Note: See TracBrowser for help on using the repository browser.