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

Revision 5574, 8.9 KB checked in by athebla, 8 years ago (diff)

Peli päivitetty + lisää tekstuureja

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
79    public override void Begin()
80    {
81        Gravity = new Vector(0, -1000);
82
83        IsMouseVisible = true;
84        SetWindowSize(1000, 800);
85
86        LuoKentta();
87        LisaaNappaimet();
88
89        Camera.Follow(pelaaja1);
90        Camera.ZoomFactor = 1.2;
91        Camera.StayInLevel = true;
92
93        SmoothTextures = false;
94
95        Inventory inventory = new Inventory();
96        Add(inventory);
97    }
98
99    void LuoKentta()
100    {
101        TileMap kentta = TileMap.FromLevelAsset("kentta1");
102        kentta.SetTileMethod('#', LisaaTaso);
103        kentta.SetTileMethod('N', LisaaPelaaja);
104        kentta.SetTileMethod('P', LisaaStoneLattia);
105        kentta.SetTileMethod('+', LisaaStoneKatto);
106        kentta.SetTileMethod('?', LisaaStoneBrickLattia);
107        kentta.SetTileMethod('S', LuoSlime);
108        kentta.SetTileMethod('H', LisaaHeart);
109        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
110        Level.CreateBorders();
111        Level.Background.Image = StoneKuva;
112        Level.Background.TileToLevel();
113    }
114
115    void LisaaTaso(Vector paikka, double leveys, double korkeus)
116    {
117        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
118        taso.Position = paikka;
119        taso.Image = StoneTaso;
120        Add(taso);
121    }
122
123    void LisaaStoneLattia(Vector paikka, double leveys, double korkeus)
124    {
125        PhysicsObject Stone = PhysicsObject.CreateStaticObject(leveys, korkeus);
126        Stone.IgnoresCollisionResponse = true;
127        Stone.Position = paikka;
128        Stone.Image = StoneKuva;
129        Add(Stone);
130       
131    }
132
133    void LisaaStoneBrickLattia(Vector paikka, double leveys, double korkeus)
134    {
135        PhysicsObject stoneBrick = PhysicsObject.CreateStaticObject(leveys, korkeus);
136        stoneBrick.IgnoresCollisionResponse = false;
137        stoneBrick.Position = paikka;
138        stoneBrick.Image = StoneBrickTaso;
139        Add(stoneBrick);
140
141    }
142
143    void LisaaStoneKatto(Vector paikka, double leveys, double korkeus)
144    {
145        PhysicsObject Stone = PhysicsObject.CreateStaticObject(leveys, korkeus);
146        Stone.IgnoresCollisionResponse = true;
147        Stone.Position = paikka;
148        Stone.Image = StoneKuva_katto;
149        Add(Stone);
150
151    }
152
153    void LisaaHeart(Vector paikka, double leveys, double korkeus)
154    {
155        PhysicsObject heart = PhysicsObject.CreateStaticObject(leveys, korkeus);
156        heart.IgnoresCollisionResponse = true;
157        heart.Position = paikka;
158        heart.Image = Heart1;
159        heart.Tag = "health";
160        Add(heart);
161    }
162
163    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
164    {
165        pelaaja1 = new PlatformCharacter(leveys, korkeus);
166        pelaaja1.Position = paikka;
167        pelaaja1.Mass = 10.0;
168        pelaaja1.Image = Pelaaja_Seisoo;
169        AddCollisionHandler(pelaaja1, "vihollinen", PelaajaOsuuViholliseen);
170        AddCollisionHandler(pelaaja1, "health", PelaajaOsuuHeart);
171        Add(pelaaja1);
172
173        P1FireBall = new AssaultRifle(30, 10);
174
175        // Ammusten määrä
176        P1FireBall.Ammo.Value = 100000;
177
178        // Ammus osuu = mitä tapahtuu
179        P1FireBall.ProjectileCollision = AmmusOsuiViholliseen;
180        P1FireBall.Image = Clear;
181
182        pelaaja1.Add(P1FireBall);
183    }
184
185    void LisaaNappaimet()
186    {
187        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
188        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
189        Keyboard.Listen(Key.LeftShift, ButtonState.Down, AmmuAseella, "Ammu", P1FireBall);
190
191        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
192        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
193        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
194        Keyboard.Listen(Key.Space, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
195
196        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
197
198        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
199        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
200        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
201
202        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
203    }
204
205    void Liikuta(PlatformCharacter hahmo, double nopeus)
206    {
207        hahmo.Walk(nopeus);
208    }
209
210    void Hyppaa(PlatformCharacter hahmo, double nopeus)
211    {
212        hahmo.Jump(nopeus);
213    }
214
215    void LuoVihollinen(Vector paikka, double leveys, double korkeus)
216    {
217        PhysicsObject vihollinen = new PhysicsObject(leveys, korkeus);
218        vihollinen.Position = paikka;
219        vihollinen.Tag = "vihollinen";
220        Add(vihollinen);
221    }
222
223    void LuoHealthPotion(Vector paikka, double leveys, double korkeus)
224    {
225        PhysicsObject potion = new PhysicsObject(leveys, korkeus);
226        potion.Position = paikka;
227        potion.Tag = "health";
228        Add(potion);
229    }
230
231    void PelaajaOsuuViholliseen(PhysicsObject pelaaja1, PhysicsObject kohde)
232    {
233        elämäLaskuri.Value -= 10;
234
235        if (elämäLaskuri <= 0)
236            pelaaja1.Destroy();
237    }
238
239    void PelaajaOsuuHeart(PhysicsObject pelaaja1, PhysicsObject kohde)
240    {
241        if (elämäLaskuri < 65)
242        {
243            elämäLaskuri.Value += 30;
244        }
245    }
246
247    void LuoSlime(Vector paikka, double leveys, double korkeus)
248    {
249        PhysicsObject Slime = new PhysicsObject(leveys, korkeus);
250        Slime.CanRotate = false;
251        Slime.Position = paikka;
252        Slime.Tag = "vihollinen";
253        Slime.Image = Slime1;
254        Add(Slime);
255    }
256
257    void AmmusOsuiViholliseen(PhysicsObject ammus, PhysicsObject kohde)
258    {
259        ammus.Destroy();
260
261    }
262
263    void AmmuAseella(AssaultRifle ase)
264    {
265        PhysicsObject ammus = ase.Shoot();
266
267        if (ammus != null)
268        {
269            ammus.Image = FireBall1;
270            ammus.Size = new Vector(40, 40);
271        }
272    }
273
274    void LuoElämäLaskuri()
275    {
276        elämäLaskuri = new DoubleMeter(100);
277        elämäLaskuri.MaxValue = 100;
278        elämäLaskuri.LowerLimit += ElämäLoppui;
279
280        ProgressBar elämäPalkki = new ProgressBar(150, 20);
281        elämäPalkki.X = Screen.Left + 150;
282        elämäPalkki.Y = Screen.Top - 20;
283        elämäPalkki.BindTo(elämäLaskuri);
284        elämäPalkki.Color = Color.Transparent;
285        elämäPalkki.BarColor = Color.Red;
286        elämäPalkki.BorderColor = Color.Black;
287        Add(elämäPalkki);
288    }
289
290    void ElämäLoppui()
291    {
292        MessageDisplay.Add("Elämät loppuivat, voi voi.");
293        Remove(pelaaja1);
294    }
295
296}
Note: See TracBrowser for help on using the repository browser.