source: 2014/24/IlariR/FysiikkaPeli1/FysiikkaPeli1/FysiikkaPeli1/FysiikkaPeli1.cs @ 5011

Revision 5011, 8.5 KB checked in by ilkarist, 5 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
9public class HarjakaisenSpaceBattle : PhysicsGame
10{
11    Image olionKuva = LoadImage("akukuva");
12    PhysicsObject hirviniemi;
13    AssaultRifle hirviniemiase;
14    Image munamieskuva = LoadImage("munamieskuva");
15    Image gigakuva = LoadImage("gigapudding");
16    Image ammuksenkuva = LoadImage("nakki");
17    Image tahtaimenkuva = LoadImage("tahtain");
18    IntMeter elamaLaskuri = new IntMeter(10, 0, 10);
19    int vihollistenKasvuLkm = 1;
20    int vihollistenAlkuLkm = 2;
21    int vihollistenLkm = 2;
22    IntMeter pisteLaskuri;
23    EasyHighScore topLista = new EasyHighScore();
24
25    string menuTeksti = "Aloitus Näyttö";
26
27    public override void Begin()
28    {
29        topLista.HighScoreWindow.Closed += AloitusNautto;
30        MediaPlayer.Play("taustamusiikki");
31        MediaPlayer.IsRepeating = true;
32        AloitusNautto(new Window());
33
34    }
35
36
37    void MuutaAmpumaNopeutta(bool arvo)
38    {
39        if (arvo) hirviniemiase.TimeBetweenUse = TimeSpan.FromMilliseconds(500);
40        else hirviniemiase.TimeBetweenUse = TimeSpan.FromMilliseconds(1);
41    }
42
43
44    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
45    {
46        ammus.Destroy();
47        if (kohde.Tag != "seinä" && !kohde.IsDestroying)
48        {
49            kohde.Destroy();
50            vihollistenLkm--;
51            pisteLaskuri.Value += 100;
52            if (vihollistenLkm <= 0)
53            {
54                int i = 0;
55                vihollistenAlkuLkm += vihollistenKasvuLkm;
56                while (i < vihollistenAlkuLkm)
57                {
58                    LuoVihollinen();
59                    i++;
60                }
61                vihollistenLkm = (vihollistenAlkuLkm * 2);
62            }
63        }
64    }
65    void Tahtaa(AnalogState hiirenLiike)
66    {
67        Vector suunta = (Mouse.PositionOnWorld - hirviniemiase.AbsolutePosition).Normalize();
68        hirviniemiase.Angle = suunta.Angle;
69    }
70
71    void AmmuAseella(PhysicsObject hirviniemi)
72    {
73        PhysicsObject ammus = hirviniemiase.Shoot();
74        if (ammus != null)
75            ammus.Image = ammuksenkuva;
76    }
77
78    void AsetaNopeus(PhysicsObject hirviniemi, Vector nopeus)
79    {
80        hirviniemi.Velocity += nopeus;
81    }
82
83    void LiikutaPelaajaa(PhysicsObject hirviniemi, Vector vektori)
84    {
85        hirviniemi.Push(vektori);
86    }
87
88    void LuoKentta()
89    {
90        //1. Luetaan kuva uuteen ColorTileMappiin, kuvan nimen perässä ei .png-päätettä.
91
92        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("kentta");
93
94        //2. Kerrotaan mitä aliohjelmaa kutsutaan, kun tietyn värinen pikseli tulee vastaan kuvatiedostossa.
95        ruudut.SetTileMethod(Color.FromHexCode("00FF80"), LuoPelaaja);
96        ruudut.SetTileMethod(Color.Black, LuoTaso);
97        //ruudut.SetTileMethod(Color.Yellow, LuoTahti);
98
99        //3. Execute luo kentän
100        //   Parametreina leveys ja korkeus
101        ruudut.Execute(20, 20);
102        LuoVihollinen();
103
104    }
105
106
107    void LuoPelaaja(Vector paikka, double leveys, double korkeus)
108    {
109        hirviniemi = new PhysicsObject(30, 30);
110        hirviniemi.Position = paikka;
111        hirviniemi.CanRotate = false;
112        //AddCollisionHandler(hirviniemi, "tahti", TormaaTahteen);
113
114        hirviniemi.Image = olionKuva;
115        hirviniemi.LinearDamping = 0.90;
116        hirviniemiase = new AssaultRifle(30, 10);
117        hirviniemiase.Ammo.Value = 100000;
118        hirviniemiase.TimeBetweenUse = TimeSpan.FromMilliseconds(500);
119        //hirviniemiase.ProjectileCollision = AmmusOsui;
120        hirviniemiase.IsVisible = false;
121        hirviniemiase.ProjectileCollision = AmmusOsui;
122        AddCollisionHandler(hirviniemi, "vihollinen", PelaajaanOsuu);
123        hirviniemi.Add(hirviniemiase);
124        Add(hirviniemi);
125    }
126
127    void LuoTaso(Vector paikka, double leveys, double korkeus)
128    {
129        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
130        taso.Position = paikka;
131        //taso.Image = groundImage;
132        taso.CollisionIgnoreGroup = 1;
133        taso.Color = Color.Transparent;
134        taso.Tag = "seinä";
135        Add(taso);
136    }
137    void LuoVihollinen()
138    {
139        PhysicsObject vihollinen = new PhysicsObject(30, 30);
140        vihollinen.Image = munamieskuva;
141        vihollinen.Position = new Vector(RandomGen.NextDouble(Level.Left + 30, Level.Right - 30), RandomGen.NextDouble(Level.Bottom + 30, Level.Top - 30));
142        vihollinen.Tag = "vihollinen";
143        Add(vihollinen);
144        FollowerBrain seuraajanAivot = new FollowerBrain(hirviniemi);
145        vihollinen.Brain = seuraajanAivot;
146
147        PhysicsObject vihollinen2 = new PhysicsObject(30, 30);
148        vihollinen2.Image = gigakuva;
149        vihollinen2.Position = new Vector(RandomGen.NextDouble(Level.Left + 30, Level.Right - 30), RandomGen.NextDouble(Level.Bottom + 30, Level.Top - 30));
150        vihollinen2.Tag = "vihollinen";
151        Add(vihollinen2);
152        FollowerBrain seuraajanAivot2 = new FollowerBrain(hirviniemi);
153        vihollinen2.Brain = seuraajanAivot2;
154
155    }
156
157    void PelaajaanOsuu(PhysicsObject pelaaja, PhysicsObject kohde)
158    {
159        elamaLaskuri.Value--;
160        kohde.Destroy();
161        LuoVihollinen();
162    }
163    void elamaPalkki()
164    {
165        ProgressBar elamaPalkki = new ProgressBar(hirviniemi.Width, hirviniemi.Height / 6.0);
166        elamaPalkki.Y = hirviniemi.Height / 2.0;
167        elamaPalkki.X = 0;
168        elamaPalkki.BindTo(elamaLaskuri);
169
170        hirviniemi.Add(elamaPalkki);
171
172    }
173    void aloitapeli()
174    {
175        ClearAll();
176        IsPaused = false;
177        SmoothTextures = false;
178        Image taustaKuva = LoadImage("planeettataustakuva");
179        Level.Background.Image = taustaKuva;
180        Level.Background.Color = Color.Black;
181        LuoKentta();
182        Camera.ZoomToLevel();
183        Camera.Follow(hirviniemi);
184        Camera.Zoom(2.0);
185        elamaLaskuri.Value = elamaLaskuri.DefaultValue;
186        elamaLaskuri.LowerLimit += delegate
187        {
188            PelaajaKuoli();
189        };
190        elamaPalkki();
191
192
193        Mouse.IsCursorVisible = true;
194        LuoPistelaskuri();
195
196
197        GameObject tahtain = new GameObject(20, 20);
198        tahtain.Image = tahtaimenkuva;
199        Add(tahtain);
200
201
202
203        Timer tahtaimenLiikutus = new Timer();
204        tahtaimenLiikutus.Interval = 0.01;
205        tahtaimenLiikutus.Timeout += delegate { tahtain.Position = Mouse.PositionOnWorld; };
206        tahtaimenLiikutus.Start();
207
208
209
210        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
211        Keyboard.Listen(Key.A, ButtonState.Down, AsetaNopeus, null, hirviniemi, new Vector(-40, 0));
212        Keyboard.Listen(Key.D, ButtonState.Down, AsetaNopeus, null, hirviniemi, new Vector(40, 0));
213        Keyboard.Listen(Key.W, ButtonState.Down, AsetaNopeus, null, hirviniemi, new Vector(0, 40));
214        Keyboard.Listen(Key.S, ButtonState.Down, AsetaNopeus, null, hirviniemi, new Vector(0, -40));
215        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
216        Mouse.Listen(MouseButton.Left, ButtonState.Down, AmmuAseella, "Ammu", hirviniemi);
217
218        Keyboard.Listen(Key.LeftControl, ButtonState.Down, MuutaAmpumaNopeutta, null, false);
219        Keyboard.Listen(Key.LeftControl, ButtonState.Up, MuutaAmpumaNopeutta, null, true);
220
221        Mouse.ListenMovement(0.1, Tahtaa, "Tähtää aseella");
222    }
223
224    void AloitusNautto(Window sender)
225    {
226        MultiSelectWindow aloitusnautto = new MultiSelectWindow(menuTeksti, "Aloita peli", "Parhaat pisteet", "Lopeta");
227        aloitusnautto.AddItemHandler(0, aloitapeli);
228        aloitusnautto.AddItemHandler(1, ParhaatPisteet);
229        aloitusnautto.AddItemHandler(2, Exit);
230        Add(aloitusnautto);
231    }
232
233    void LuoPistelaskuri()
234    {
235        pisteLaskuri = new IntMeter(0);
236
237        Label pisteNaytto = new Label();
238        pisteNaytto.X = Screen.Left + 100;
239        pisteNaytto.Y = Screen.Top - 100;
240        pisteNaytto.TextColor = Color.Black;
241        pisteNaytto.Color = Color.White;
242
243        pisteNaytto.BindTo(pisteLaskuri);
244        Add(pisteNaytto);
245    }
246    void ParhaatPisteet()
247    {
248        topLista.Show();
249    }
250    void PelaajaKuoli()
251    {
252        menuTeksti = "Game Over";
253        hirviniemi.Destroy();
254        topLista.EnterAndShow(pisteLaskuri.Value);
255        //topLista.HighScoreWindow.Closed += AloitusNautto;
256        Pause();
257        //LopetusNautto();
258    }
259}
Note: See TracBrowser for help on using the repository browser.