source: 2016/koodauskerho/VeetiR/TheBasicGame/TheBasicGame/TheBasicGame/TheBasicGame.cs @ 8347

Revision 8347, 7.4 KB checked in by jotapoti, 4 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 TheBasicGame : PhysicsGame
10{
11    const double nopeus = 1500;
12    const double hyppyNopeus = 2000;
13    const int RUUDUN_KOKO = 40;
14
15    PhysicsObject pelaaja1;
16
17    Image pelaajanKuva = LoadImage("Player");
18    Image tahtiKuva = LoadImage("Water");
19    Image maaKuva = LoadImage("Ground");
20    Image pKuva = LoadImage("Platform");
21    Image iKuva = LoadImage("InPat");
22    Image bKuva = LoadImage("PlatBrick");
23    Image WKuva = LoadImage("WaterTop");
24    Image wKuva = LoadImage("Water");
25    Image GKuva = LoadImage("GroundWT");
26    Image gKuva = LoadImage("GroundW");
27
28    SoundEffect maaliAani = LoadSoundEffect("maali");
29
30    Vector spawnpoint;
31
32    //Pelin alussa ollaan kentässä numero...
33    int kenttaNro = 1;
34
35    ExplosionSystem rajahdys;
36    public override void Begin()
37    {
38        Aloitapeli();
39
40        MessageDisplay.Add("Päästäkseen maaliin, yritä mennä pieneen koloon. OKEI?!");
41    }
42
43    void Aloitapeli()
44    {
45        // Alustetaan räjähdysjärjestelmä
46        // Parametrit:
47        // * kuva: mitä tekstuuria räjähdyksen
48        //   hiukkasten halutaan käyttävän
49        // * pMaxMaara: räjähdyksen käyttämien
50        //   hiukkasten eli partikkeleiden maksimimäärä
51        rajahdys =
52         new ExplosionSystem(bKuva, 250);
53
54        rajahdys.MinScale = 7;
55        rajahdys.MaxScale = 7;
56
57        rajahdys.MinVelocity = 20;
58        rajahdys.MaxVelocity = 20;
59
60        // Lisätään järjestelmä peliin
61        Add(rajahdys);
62
63
64
65        SeuraavaKentta();
66
67
68
69       
70
71    }
72
73    void SeuraavaKentta()
74    {
75        ClearAll();
76
77        if (kenttaNro == 1) LuoKentta("kentta1");
78        else if (kenttaNro == 2) LuoKentta("kentta2");
79        else if (kenttaNro > 2) Exit();
80
81        LisaaNappaimet();
82        MediaPlayer.Play("Stage"+kenttaNro);
83        MediaPlayer.IsRepeating = true;
84    }
85
86
87    void LuoKentta(string kenttaTiedostonNimi)
88    {
89        TileMap kentta = TileMap.FromLevelAsset(kenttaTiedostonNimi);
90        kentta.SetTileMethod('#', LisaaTaso);
91        kentta.SetTileMethod('*', LisaaTahti);
92        kentta.SetTileMethod('N', LisaaPelaaja);
93        kentta.SetTileMethod('-', LisaaTaso2);
94        kentta.SetTileMethod('f', LisaaTasoF);
95        kentta.SetTileMethod('W', LisaaVesi1);
96        kentta.SetTileMethod('w', LisaaVesi2);
97        kentta.SetTileMethod('G', LisaaG1);
98        kentta.SetTileMethod('g', LisaaG2);
99        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
100       // Level.CreateBorders();
101        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
102
103        Gravity = new Vector(0, -1000);
104
105        Camera.Follow(pelaaja1);
106        Camera.ZoomFactor = 1.5;
107        Camera.StayInLevel = true;
108    }
109
110    void LisaaTaso(Vector paikka, double leveys, double korkeus)
111    {
112        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
113        taso.Position = paikka;
114        taso.Color = Color.Green;
115        taso.Image = maaKuva;
116        Add(taso);
117    }
118
119    void LisaaG1(Vector paikka, double leveys, double korkeus)
120    {
121        PhysicsObject G1 = PhysicsObject.CreateStaticObject(leveys, korkeus);
122        G1.Position = paikka;
123        G1.Color = Color.Green;
124        G1.Image = GKuva;
125        Add(G1);
126    }
127
128    void LisaaG2(Vector paikka, double leveys, double korkeus)
129    {
130        PhysicsObject G2 = PhysicsObject.CreateStaticObject(leveys, korkeus);
131        G2.Position = paikka;
132        G2.Color = Color.Green;
133        G2.Image = gKuva;
134        Add(G2);
135    }
136    void LisaaVesi1(Vector paikka, double leveys, double korkeus)
137    {
138        GameObject vesi1 = new GameObject(leveys, korkeus);
139        vesi1.Position = paikka;
140       // vesi1.IgnoresCollisionResponse = true;
141        vesi1.Color = Color.Green;
142        vesi1.Image = WKuva;
143        Add(vesi1, 2);
144    }
145
146    void LisaaVesi2(Vector paikka, double leveys, double korkeus)
147    {
148        GameObject vesi2 = new GameObject(leveys, korkeus);
149        vesi2.Position = paikka;
150        //vesi2.IgnoresCollisionResponse = true;
151        vesi2.Color = Color.Green;
152        vesi2.Image = wKuva;
153        Add(vesi2, 2);
154    }
155
156    void LisaaTaso2(Vector paikka, double leveys, double korkeus)
157    {
158        PhysicsObject taso2 = PhysicsObject.CreateStaticObject(leveys, korkeus /2);
159        taso2.Position = paikka+new Vector(0,0.25*korkeus);
160        taso2.Color = Color.Green;
161        taso2.Image = pKuva;
162        Add(taso2);
163    }
164
165    void LisaaTasoF(Vector paikka, double leveys, double korkeus)
166    {
167        PhysicsObject tasof = PhysicsObject.CreateStaticObject(leveys, korkeus / 2);
168        tasof.Position = paikka + new Vector(0, 0.25 * korkeus);
169        tasof.IgnoresCollisionResponse = true;
170        tasof.Color = Color.Green;
171        tasof.Image = pKuva;
172        tasof.Tag = "PF";
173        Add(tasof);
174    }
175
176    void LisaaTahti(Vector paikka, double leveys, double korkeus)
177    {
178        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
179        tahti.IgnoresCollisionResponse = true;
180        tahti.Position = paikka;
181        tahti.Image = tahtiKuva;
182        tahti.Tag = "tahti";
183        Add(tahti, 2);
184    }
185
186    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
187    {
188        pelaaja1 = new PhysicsObject(leveys, korkeus);
189        pelaaja1.Shape = Shape.Circle;
190        pelaaja1.Position = paikka;
191        pelaaja1.Mass = 4.0;
192        pelaaja1.Image = pelaajanKuva;
193        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
194        AddCollisionHandler(pelaaja1, "PF", TormaaPF);
195        Add(pelaaja1);
196
197        spawnpoint = paikka;
198
199        Timer ajastin = new Timer();
200
201        ajastin.Interval = 1;
202        ajastin.Timeout += havisitPelin;
203        ajastin.Start();
204    }
205
206    void havisitPelin()
207    {
208        if (pelaaja1.Y < Level.Bottom)
209        {
210            pelaaja1.Position = spawnpoint;
211        }
212
213    }
214    void LisaaNappaimet()
215    {
216        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
217        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
218
219        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
220        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
221        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
222    }
223
224    void Liikuta(PhysicsObject hahmo, double nopeus)
225    {
226        hahmo.Push(new Vector(nopeus, 0));
227    }
228
229    void Hyppaa(PhysicsObject hahmo, double nopeus)
230    {
231        List<GameObject> oliot = GetObjectsAt(new Vector(hahmo.X, hahmo.Bottom - 5));
232
233        if (oliot.Find(x => x is PhysicsObject) != null)
234            hahmo.Hit(new Vector(0, nopeus));
235    }
236
237    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
238    {
239        maaliAani.Play();
240        MessageDisplay.Add("Keräsit tähden!");
241        tahti.Destroy();
242
243        kenttaNro++;
244        SeuraavaKentta();
245    }
246
247    void TormaaPF(PhysicsObject hahmo, PhysicsObject tasoF)
248    {
249        tasoF.Destroy();
250
251        // "Käynnistetään" räjähdys
252        rajahdys.AddEffect(tasoF.X, tasoF.Y, 25);
253    }
254}
Note: See TracBrowser for help on using the repository browser.