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

Revision 9375, 6.0 KB checked in by nupeohje, 23 months ago (diff)

Alkuvalikko tehty

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
18    PhysicsObject jouninAlus;
19    DoubleMeter alaspainLaskuri;
20    Timer aikaLaskuri;
21
22    public override void Begin()
23    {
24        Alkuvalikko();
25    }
26
27    void Alkuvalikko()
28    {
29        Level.Background.Color = Color.Black;
30        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko",
31"Aloita peli", "Parhaat pisteet", "Lopeta");
32        Add(alkuValikko);
33
34        alkuValikko.AddItemHandler(0, AloitaPeli);
35        alkuValikko.AddItemHandler(1, ParhaatPisteet);
36        alkuValikko.AddItemHandler(2, Exit);
37
38        alkuValikko.DefaultCancel = 2; // Oletuksena lopetetaan peli ESC-napilla
39        alkuValikko.Color = Color.AshGray;
40        alkuValikko.SetButtonColor(Color.Black);
41        alkuValikko.Image = taustakuva;
42
43    }
44    void ParhaatPisteet()
45    {
46
47    }
48
49    void AloitaPeli()
50    {
51        LisaaAlus();
52        LisaaVihollinen();
53        TeeKentta();
54        LuoAikaLaskuri();
55
56        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
57
58        Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaPelaajaa, null, new Vector(-1000, 0));
59        Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaPelaajaa, null, new Vector(1000, 0));
60        Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, 1000));
61        Keyboard.Listen(Key.Down, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, -1000));
62
63        Camera.Zoom(2.0);
64        Camera.Follow(jouninAlus);
65    }
66    void LiikutaPelaajaa(Vector vektori)
67    {
68        jouninAlus.Push(vektori);
69    }
70
71    void TeeKentta()
72    {
73        // Tehdään kolikoita kerättäväksi:
74        //LisaaKolikkoRuudulle(200.0, 100.0);
75        //LisaaKolikkoRuudulle(-200.0, -100.0);
76        //LisaaKolikkoRuudulle(135.3, 68.0);
77
78        for (int i = 0; i < 75; i++)
79        {
80            double satunnainenXkoordinaatti = RandomGen.NextDouble(Level.Left, Level.Right);
81            double satunnainenYkoordinaatti = RandomGen.NextDouble(Level.Bottom, Level.Top);
82            LisaaKolikkoRuudulle(satunnainenXkoordinaatti, satunnainenYkoordinaatti);
83        }
84
85
86
87
88
89        // Muutetaan taustakuvaa sopivammaksi:
90        Level.Background.Color = Color.Black;
91        Level.Background.CreateStars();
92        Level.CreateBorders();
93
94        //Level.Background.Image = taustakuva; // tällä saa erillisen kuvan, joka on ladattu ylempänä Beginin yläpuolella muuttujaan
95
96    }
97
98    void LisaaAlus()
99    {
100        jouninAlus = new PhysicsObject(50.0, 70.0);
101        jouninAlus.Image = olionKuva;
102        Add(jouninAlus);
103        AddCollisionHandler(jouninAlus, "raha", KeraaRaha);
104        AddCollisionHandler(jouninAlus, "pahis", PelaajaTormasiPahikseen);
105        //AddCollisionHandler(jouninAlus, "pahis", CollisionHandler.ExplodeObject(300.0, true));
106       
107    }
108
109    void LisaaVihollinen()
110    {
111        PhysicsObject vihollinen = new PhysicsObject(100.0, 100.0);
112        vihollinen.X = 300.0;
113        vihollinen.Y = 350.0;
114        vihollinen.Tag = "pahis";
115        vihollinen.Image = vihollisenKuva;
116        Add(vihollinen);
117
118        FollowerBrain seuraajanAivot = new FollowerBrain(jouninAlus);
119        seuraajanAivot.Speed = 100;                 // Millä nopeudella kohdetta seurataan
120        seuraajanAivot.DistanceFar = 600;           // Etäisyys jolla aletaan seurata kohdetta
121        seuraajanAivot.DistanceClose = 200;         // Etäisyys jolloin ollaan lähellä kohdetta
122        seuraajanAivot.StopWhenTargetClose = false;  // Pysähdytään kun ollaan lähellä kohdetta
123        //seuraajanAivot.FarBrain = satunnaisAivot;   // Käytetään satunnaisaivoja kun ollaan kaukana
124
125        // Tapahtuma, joka tapahtuu kun ollaan lähellä kohdetta
126        seuraajanAivot.TargetClose += mitaTapahtuuKunOllaanLahella;
127
128        vihollinen.Brain = seuraajanAivot;
129    }
130
131    // Aliohjelma joka ajetaan kun olio on tarpeeksi lähellä kohdetta:
132    void mitaTapahtuuKunOllaanLahella()
133    {
134       
135    }
136
137    void LisaaKolikkoRuudulle(double xkoordinaatti, double ykoordinaatti)
138    {
139        PhysicsObject kolikko = new PhysicsObject(10.0, 10.0);
140        kolikko.Color = Color.Yellow;
141        kolikko.X = xkoordinaatti;
142        kolikko.Y = ykoordinaatti;
143        kolikko.Tag = "raha";
144        kolikko.IgnoresCollisionResponse = true;
145        Add(kolikko);
146    }
147
148    void KeraaRaha(PhysicsObject pelaaja, PhysicsObject kultaraha)
149    {
150        MessageDisplay.Add("Sait kultarahan!");
151        kultaraha.Destroy();
152    }
153
154    void PelaajaTormasiPahikseen(PhysicsObject kukaTormasi, PhysicsObject mihinTormasi)
155    {
156        MessageDisplay.Add("Osuit viholliseen ja menetit energiaa!");
157        kukaTormasi.Destroy();
158        aikaLaskuri.Stop();
159    }
160
161
162    void LuoAikaLaskuri()
163    {
164        alaspainLaskuri = new DoubleMeter(15);
165
166        aikaLaskuri = new Timer();
167        aikaLaskuri.Interval = 0.1;
168        aikaLaskuri.Timeout += LaskeAlaspain;
169        aikaLaskuri.Start();
170
171        Label aikaNaytto = new Label();
172        aikaNaytto.TextColor = Color.White;
173        aikaNaytto.DecimalPlaces = 1;
174        aikaNaytto.BindTo(alaspainLaskuri);
175        aikaNaytto.X = Screen.Left+300.0;
176        aikaNaytto.Y = Screen.Top-100.0;
177        Add(aikaNaytto);
178    }
179
180    void LaskeAlaspain()
181    {
182        alaspainLaskuri.Value -= 0.1;
183
184        if (alaspainLaskuri.Value <= 0)
185        {
186            MessageDisplay.Add("Aika loppui...");
187            aikaLaskuri.Stop();
188            IsPaused = true; // TODO Esc-napilla voi silti jatkaa peliä! Pitää korjata niin, ettei voi!
189        }
190    }
191
192
193}
Note: See TracBrowser for help on using the repository browser.