source: 2014/30/AtteB/Peli/Peli/Peli/Peli.cs @ 5577

Revision 5577, 9.1 KB checked in by athebla, 9 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
9class Vihollinen : PhysicsObject
10{
11    private IntMeter elamaLaskuri = new IntMeter(3, 0, 3);
12    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
13
14    public Vihollinen(double leveys, double korkeus)
15        : base(leveys, korkeus)
16    {
17        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
18    }
19}
20
21class Inventory : Widget
22{
23
24    /// Tapahtuma, kun esine on valittu.
25    public event Action<PhysicsObject> ItemSelected;
26
27    /// Luo uuden esinevalikon.
28    public Inventory()
29        : base(new HorizontalLayout())
30    {
31    }
32
33    /// Lisää esineen.
34    public void AddItem(PhysicsObject item, Image kuva)
35    {
36        PushButton icon = new PushButton(kuva);
37        Add(icon);
38        icon.Clicked += delegate() { SelectItem(item); };
39    }
40
41    void SelectItem(PhysicsObject item)
42    {
43        if (ItemSelected != null)
44        {
45            ItemSelected(item);
46        }
47    }
48}
49
50public class Peli : PhysicsGame
51{
52    DoubleMeter elämäLaskuri;
53
54    AssaultRifle P1FireBall;
55
56    const double nopeus = 200;
57    const double hyppyNopeus = 750;
58    const int RUUDUN_KOKO = 40;
59
60    PlatformCharacter pelaaja1;
61
62    Image tahtiKuva = LoadImage("tahti");
63    Image StoneKuva = LoadImage("StoneWall");
64    Image StoneTaso = LoadImage("Stone_katto");
65    Image StoneKuva_katto = LoadImage("Stone_katto");
66    Image Pelaaja_Seisoo = LoadImage("Pelaaja_Seisoo");
67    Image Pelaaja_Juoksee = LoadImage("Pelaaja_Juoksee");
68    Image StoneBrickTaso = LoadImage("Stone_brick_tile");
69    Image Slime1 = LoadImage("Slime");
70    Image FireBall1 = LoadImage("FireBall_1");
71    Image FireBall2 = LoadImage("FireBall_2");
72    Image FireBall3 = LoadImage("FireBall_3");
73    Image FireBall4 = LoadImage("FireBall_4");
74    Image Clear = LoadImage("Clear");
75    Image Heart1 = LoadImage("heart");
76
77    SoundEffect maaliAani = LoadSoundEffect("maali");
78    SoundEffect HowItBegins = LoadSoundEffect("HowItBegins");
79
80    public override void Begin()
81    {
82        Gravity = new Vector(0, -1000);
83
84        IsMouseVisible = true;
85        SetWindowSize(1000, 800);
86
87        LuoKentta();
88        LisaaNappaimet();
89
90        Camera.Follow(pelaaja1);
91        Camera.ZoomFactor = 1.2;
92        Camera.StayInLevel = true;
93
94        SmoothTextures = false;
95
96        Inventory inventory = new Inventory();
97        Add(inventory);
98    }
99
100    void LuoKentta()
101    {
102        TileMap kentta = TileMap.FromLevelAsset("kentta1");
103        kentta.SetTileMethod('#', LisaaTaso);
104        kentta.SetTileMethod('N', LisaaPelaaja);
105        kentta.SetTileMethod('P', LisaaStoneLattia);
106        kentta.SetTileMethod('+', LisaaStoneKatto);
107        kentta.SetTileMethod('?', LisaaStoneBrickLattia);
108        kentta.SetTileMethod('S', LuoSlime);
109        kentta.SetTileMethod('H', LisaaHeart);
110        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
111        Level.CreateBorders();
112        Level.Background.Image = StoneKuva;
113        Level.Background.TileToLevel();
114    }
115
116    void LisaaTaso(Vector paikka, double leveys, double korkeus)
117    {
118        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
119        taso.Position = paikka;
120        taso.Image = StoneTaso;
121        Add(taso);
122    }
123
124    void LisaaStoneLattia(Vector paikka, double leveys, double korkeus)
125    {
126        PhysicsObject Stone = PhysicsObject.CreateStaticObject(leveys, korkeus);
127        Stone.IgnoresCollisionResponse = true;
128        Stone.Position = paikka;
129        Stone.Image = StoneKuva;
130        Add(Stone);
131       
132    }
133
134    void LisaaStoneBrickLattia(Vector paikka, double leveys, double korkeus)
135    {
136        PhysicsObject stoneBrick = PhysicsObject.CreateStaticObject(leveys, korkeus);
137        stoneBrick.IgnoresCollisionResponse = false;
138        stoneBrick.Position = paikka;
139        stoneBrick.Image = StoneBrickTaso;
140        Add(stoneBrick);
141
142    }
143
144    void LisaaStoneKatto(Vector paikka, double leveys, double korkeus)
145    {
146        PhysicsObject Stone = PhysicsObject.CreateStaticObject(leveys, korkeus);
147        Stone.IgnoresCollisionResponse = true;
148        Stone.Position = paikka;
149        Stone.Image = StoneKuva_katto;
150        Add(Stone);
151
152    }
153
154    void LisaaHeart(Vector paikka, double leveys, double korkeus)
155    {
156        PhysicsObject heart = PhysicsObject.CreateStaticObject(leveys, korkeus);
157        heart.IgnoresCollisionResponse = true;
158        heart.Position = paikka;
159        heart.Image = Heart1;
160        heart.Tag = "health";
161        Add(heart);
162    }
163
164    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
165    {
166        pelaaja1 = new PlatformCharacter(leveys, korkeus);
167        pelaaja1.Position = paikka;
168        pelaaja1.Mass = 10.0;
169        pelaaja1.Image = Pelaaja_Seisoo;
170        AddCollisionHandler(pelaaja1, "vihollinen", PelaajaOsuuViholliseen);
171        AddCollisionHandler(pelaaja1, "health", PelaajaOsuuHeart);
172        Add(pelaaja1);
173
174        P1FireBall = new AssaultRifle(30, 10);
175
176        // Ammusten määrä
177        P1FireBall.Ammo.Value = 100000;
178
179        // Ammus osuu = mitä tapahtuu
180        P1FireBall.ProjectileCollision = AmmusOsuiViholliseen;
181        P1FireBall.Image = Clear;
182
183        pelaaja1.Add(P1FireBall);
184    }
185
186    void LisaaNappaimet()
187    {
188        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
189        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
190        Keyboard.Listen(Key.LeftShift, ButtonState.Down, AmmuAseella, "Ammu", P1FireBall);
191
192        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
193        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
194        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
195        Keyboard.Listen(Key.Space, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
196
197        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
198
199        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
200        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
201        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
202
203        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
204    }
205
206    void Liikuta(PlatformCharacter hahmo, double nopeus)
207    {
208        hahmo.Walk(nopeus);
209    }
210
211    void Hyppaa(PlatformCharacter hahmo, double nopeus)
212    {
213        hahmo.Jump(nopeus);
214    }
215
216    void LuoVihollinen(Vector paikka, double leveys, double korkeus)
217    {
218        PhysicsObject vihollinen = new PhysicsObject(leveys, korkeus);
219        vihollinen.Position = paikka;
220        vihollinen.Tag = "vihollinen";
221        Add(vihollinen);
222    }
223
224    void LuoHealthPotion(Vector paikka, double leveys, double korkeus)
225    {
226        PhysicsObject potion = new PhysicsObject(leveys, korkeus);
227        potion.Position = paikka;
228        potion.Tag = "health";
229        Add(potion);
230    }
231
232    public void PelaajaOsuuViholliseen(PhysicsObject pelaaja1, PhysicsObject kohde)
233    {
234        elämäLaskuri.Value -= elämäLaskuri - 10;
235
236        if (elämäLaskuri <= 0)
237            pelaaja1.Destroy();
238    }
239
240    public void PelaajaOsuuHeart(PhysicsObject pelaaja1, PhysicsObject kohde)
241    {
242        elämäLaskuri.Value += elämäLaskuri + 20;
243    }
244
245    void LuoSlime(Vector paikka, double leveys, double korkeus)
246    {
247        PhysicsObject Slime = new PhysicsObject(leveys, korkeus);
248        Slime.CanRotate = false;
249        Slime.Position = paikka;
250        Slime.Tag = "vihollinen";
251        Slime.Image = Slime1;
252        Add(Slime);
253    }
254
255    void AmmusOsuiViholliseen(PhysicsObject ammus, PhysicsObject kohde)
256    {
257        ammus.Destroy();
258
259    }
260
261    void AmmuAseella(AssaultRifle ase)
262    {
263        PhysicsObject ammus = ase.Shoot();
264
265        if (ammus != null)
266        {
267            ammus.Image = FireBall1;
268            ammus.Size = new Vector(40, 40);
269            ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
270        }
271    }
272
273    void Tähtää()
274    {
275        pelaaja1.Weapon.Angle = pelaaja1.FacingDirection.Angle;
276    }
277
278    void LuoElämäLaskuri()
279    {
280        elämäLaskuri = new DoubleMeter(100);
281        elämäLaskuri.MaxValue = 100;
282        elämäLaskuri.LowerLimit += ElämäLoppui;
283
284        ProgressBar elämäPalkki = new ProgressBar(150, 20);
285        elämäPalkki.X = Screen.Left + 150;
286        elämäPalkki.Y = Screen.Top - 20;
287        elämäPalkki.BindTo(elämäLaskuri);
288        elämäPalkki.Color = Color.Transparent;
289        elämäPalkki.BarColor = Color.Red;
290        elämäPalkki.BorderColor = Color.Black;
291        Add(elämäPalkki);
292    }
293
294    void ElämäLoppui()
295    {
296        MessageDisplay.Add("Elämät loppuivat, voi voi.");
297        Remove(pelaaja1);
298    }
299
300}
Note: See TracBrowser for help on using the repository browser.