source: 2017/31/MirkaH/TimantitOvatIkuisia/TimantitOvatIkuisia/TimantitOvatIkuisia/TimantitOvatIkuisia.cs @ 9395

Revision 9395, 9.1 KB checked in by npo17_79, 23 months ago (diff)

Kaikki toiminnot toimivat hyvin. Koodaus ok.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class TimantitOvatIkuisia : PhysicsGame
10{
11
12        EasyHighScore topLista = new EasyHighScore();
13
14
15            // const double nopeus = 200;
16            // const double hyppyNopeus = 750;
17            Vector nopeusYlös = new Vector(0.0, 500.0);
18    Vector nopeusAlas = new Vector(0.0, -500.0);
19
20    const int RUUDUN_KOKO = 50;
21
22    PhysicsObject pelaaja1;
23    IntMeter pisteLaskuri;
24
25    Image taustaKuva = LoadImage("meri");
26    Image sukeltajaoikea = LoadImage("sukeltaja1");
27    Image tahtiKuva = LoadImage("timantti");
28    Image vihollinenKuva = LoadImage("ammunta");
29    Image tasonkuva = LoadImage("kivet2");
30    Image sukeltajavasen = LoadImage("sukeltajavasen");
31    SoundEffect maaliAani = LoadSoundEffect("maali");
32
33    public override void Begin()
34    {
35
36        // Gravity = new Vector(0, -1000);
37
38        AlkuValikko();
39
40       // Mouse.IsCursorVisible = true;
41
42    }
43
44    void LuoKentta()
45    {
46        TileMap kentta = TileMap.FromLevelAsset("kentta1");
47        kentta.SetTileMethod('#', LisaaTaso);
48        kentta.SetTileMethod('*', LisaaAarre);
49        kentta.SetTileMethod('N', LisaaPelaaja);
50        kentta.SetTileMethod('V', LisaaVihollinen);
51        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
52        Level.CreateBorders();
53        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
54        Level.Background.Image = taustaKuva;
55       
56
57        for (int i = 0; i < 50; i++)
58        {
59            double xpaikka = RandomGen.NextDouble(Level.Left, Level.Right);
60            double ypaikka = RandomGen.NextDouble(Level.Top, Level.Bottom);
61            Vector paikka = new Vector(xpaikka, ypaikka);
62            LisaaAarre(paikka, RUUDUN_KOKO, RUUDUN_KOKO);
63        }
64    }
65
66    void LisaaTaso(Vector paikka, double leveys, double korkeus)
67    {
68        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
69        taso.Position = paikka;
70        taso.Color = Color.Black;
71        taso.Restitution = 0.4;
72        taso.Image = tasonkuva;
73        Add(taso);
74    }
75    //void LisaaAarre(double leveys, double korkeus,double x, double y )
76    //{
77    //    PhysicsObject aarre = PhysicsObject.CreateStaticObject(leveys, korkeus);
78    //    aarre.IgnoresCollisionResponse = true;
79    //    aarre.X = x;
80    //    aarre.Y = y;
81    //    aarre.Image = tahtiKuva;
82    //    aarre.Tag = "tahti";
83    //    Add(aarre);
84    //}
85    void LisaaAarre(Vector paikka, double leveys, double korkeus)
86    {
87        PhysicsObject aarre = PhysicsObject.CreateStaticObject(leveys, korkeus);
88        aarre.IgnoresCollisionResponse = true;
89        aarre.Position = paikka;
90        aarre.Image = tahtiKuva;
91        aarre.Tag = "tahti";
92        Add(aarre);
93    }
94   
95        void LisaaVihollinen(Vector paikka, double leveys, double korkeus)
96    {
97            PhysicsObject vihollinen = new PhysicsObject(40.0, 20.0);
98        vihollinen.Position = paikka;
99
100           // vihollinen.Tag = "pahis";
101            vihollinen.Image = vihollinenKuva;
102            Add(vihollinen);
103
104           
105        vihollinen.Tag = "vihollinen";
106        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja");
107        seuraajanAivot.Speed = 50;                 // Millä nopeudella kohdetta seurataan
108        seuraajanAivot.DistanceFar = 600;           // Etäisyys jolla aletaan seurata kohdetta
109        seuraajanAivot.DistanceClose = 200;         // Etäisyys jolloin ollaan lähellä kohdetta
110        seuraajanAivot.StopWhenTargetClose = false;  // Pysähdytään kun ollaan lähellä kohdetta
111                                                     //seuraajanAivot.FarBrain = satunnaisAivot;   // Käytetään satunnaisaivoja kun ollaan kaukana
112
113        vihollinen.Brain = seuraajanAivot;
114    }
115
116
117
118    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
119    {
120        pelaaja1 = new PhysicsObject(leveys * 3, korkeus * 1);
121        pelaaja1.Position = paikka;
122        pelaaja1.Tag = "pelaaja";
123        // pelaaja1.Mass = 4.0;
124        pelaaja1.Image = sukeltajaoikea;
125        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
126        AddCollisionHandler(pelaaja1, "vihollinen", PelaajaKuoli);
127        Add(pelaaja1);
128        pelaaja1.CanRotate = false;
129 
130    }
131
132    void LisaaNappaimet()
133    {
134        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
135        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
136
137        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, new Vector(-200, 0));
138        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, new Vector(200, 0));
139        Keyboard.Listen(Key.Up, ButtonState.Down, Liikuta, "Pelaaja ylös", pelaaja1, nopeusYlös);
140        Keyboard.Listen(Key.Down, ButtonState.Down, Liikuta, "Pelaaja alas", pelaaja1, nopeusAlas);
141
142        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
143
144        ///ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
145        //ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
146        //ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
147
148        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
149    }
150
151    void Liikuta(PhysicsObject hahmo, Vector nopeus)
152    {
153        hahmo.Push(nopeus);
154        if (pelaaja1.Velocity.X < 0) pelaaja1.Image = sukeltajavasen;
155        else pelaaja1.Image = sukeltajaoikea; 
156       
157    }
158
159
160
161    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
162    {
163        maaliAani.Play();
164        MessageDisplay.Add("Keräsit timantin!");
165        tahti.Destroy();
166        pisteLaskuri.Value += 1;
167
168    }
169
170    void AlkuValikko()
171    {
172        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko","Aloita peli", "Parhaat pisteet","Tekijätiedot", "Lopeta");
173        Level.Background.Color = Color.Blue;
174 
175        alkuValikko.AddItemHandler(0, AloitaPeli);
176        alkuValikko.AddItemHandler(1, ParhaatPisteet);
177        alkuValikko.AddItemHandler(2, Tekijätiedot);
178        alkuValikko.AddItemHandler(3, Exit);
179
180        alkuValikko.DefaultCancel = 3;
181        alkuValikko.Color = Color.Red;
182        alkuValikko.SetButtonColor(Color.Blue);
183        //alkuValikko.Image=taustaKuva;
184
185        Add(alkuValikko);
186}
187
188       
189    void LuoPistelaskuri()
190    {
191        pisteLaskuri = new IntMeter(0);
192
193        Label pisteNaytto = new Label();
194        pisteNaytto.X = Screen.Left + 100;
195        pisteNaytto.Y = Screen.Top - 100;
196        pisteNaytto.TextColor = Color.Black;
197        pisteNaytto.Color = Color.White;
198
199        pisteNaytto.BindTo(pisteLaskuri);
200        Add(pisteNaytto);
201    }
202    DoubleMeter alaspainLaskuri;
203
204       
205    Timer aikaLaskuri;
206
207    void LuoAikaLaskuri()
208    {
209        alaspainLaskuri = new DoubleMeter(60);
210
211        aikaLaskuri = new Timer();
212        aikaLaskuri.Interval = 0.1;
213        aikaLaskuri.Timeout += LaskeAlaspain;
214        aikaLaskuri.Start();
215
216        Label aikaNaytto = new Label();
217        aikaNaytto.TextColor = Color.White;
218        aikaNaytto.DecimalPlaces = 1;
219        aikaNaytto.BindTo(alaspainLaskuri);
220        aikaNaytto.X = Screen.Right - 300.0;
221        aikaNaytto.Y = Screen.Bottom + 100.0;
222        Add(aikaNaytto);
223
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
235            PelaajaKuoli();
236
237            //pelaaja1.Destroy();
238            //ClearAll();
239
240            //Label pisteNaytto = new Label();
241            //pisteNaytto.TextColor = Color.White;
242
243            //pisteNaytto.Text = "Sait pisteitä " + pisteLaskuri.Value;
244       
245            //Add(pisteNaytto);
246
247            // täydennä mitä tapahtuu, kun aika loppuu
248        }
249    }
250    void AloitaPeli()
251
252    {
253        LuoKentta();
254        LisaaNappaimet();
255        LuoAikaLaskuri();
256        LuoPistelaskuri();
257       
258
259        Camera.Follow(pelaaja1);
260        Camera.ZoomFactor = 1.2;
261        Camera.StayInLevel = true;
262        // Camera.ZoomToLevel();
263    }
264    void ParhaatPisteet()
265    {
266        topLista.Show();
267        topLista.HighScoreWindow.Closed += AloitaPeli;
268
269    }
270   
271
272        void Tekijätiedot()
273    {
274        MessageWindow ikkuna = new MessageWindow("Mirka Havinga");
275        Add(ikkuna);
276        ikkuna.Closed += delegate 
277        {
278            AlkuValikko();
279        };
280
281
282    }
283
284    void PelaajaKuoli(PhysicsObject tormaaja = null, PhysicsObject kohde = null)
285    {
286        pelaaja1.Destroy();
287        topLista.EnterAndShow(pisteLaskuri.Value);
288
289        topLista.HighScoreWindow.Closed += AloitaPeli;
290    }
291
292
293
294    void AloitaPeli(Window sender)
295    {
296        ClearAll();
297        AlkuValikko();
298       // topLista.Show();
299    }
300
301}
Note: See TracBrowser for help on using the repository browser.