source: 2015/27/JaakkoS/RPGpeli/RPGpeli/RPGpeli/RPGpeli.cs @ 7150

Revision 7150, 8.9 KB checked in by otjojunt, 6 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 RPGpeli : PhysicsGame
10{
11    PhysicsObject pelaaja;
12    PhysicsObject Vihu;
13    SoundEffect Karjaisu = LoadSoundEffect("Rpgkarjaisu");
14    Image ritariKuva = LoadImage("ritari");
15    Image aaltoviiva = LoadImage("aalto");
16    Image Vihukuva1 = LoadImage("Vihollien1");
17    Image Vihukuva1T = LoadImage("Vihollinen1Taka");
18    Image Vihukuva1O = LoadImage("VihollinenOikea");
19    Image Vihukuva1V = LoadImage("VihollinenVasen");
20    Image LuolaKuva = LoadImage("luola");
21
22    static private Image[] ritariOikealle = LoadImages("Ritarioikealle", "RanimaatioO");
23    Animation ritariVasenAnim = new Animation(ritariOikealle);
24    static private Image[] ritariVasemmalle = LoadImages("Ritarivasemmalle", "RanimaatioV");
25    Animation ritariOikeaAnim = new Animation(ritariVasemmalle);
26    static private Image[] ritariEteen = LoadImages("RanimaatioE1", "RanimaatioE2");
27    Animation ritariEteenAnim = new Animation(ritariEteen);
28    static private Image[] ritariTaakse = LoadImages("RanimaatioT1", "RanimaatioT2");
29    Animation ritariTaakseAnim = new Animation(ritariTaakse);
30    Image ritariOikea = LoadImage("Ritarioikealle");
31    Image ritariVasen = LoadImage("Ritarivasemmalle");
32    Image ritariTaka = LoadImage("Ritaritaka");
33    static private Image[] RHyokE = LoadImages("RHyökkäysE1", "RHyökkäysE2", "RHyökkäysE3");
34    Animation RHyokkaysEAnim = new Animation(RHyokE);
35    static private Image[] RHyokT = LoadImages("RHyökkäysT1", "RHyökkäysT2", "RHyökkäysT3");
36    Animation RHyokkaysTAnim = new Animation(RHyokT);
37    static private Image[] RHyokV = LoadImages("RhyökkäysO1", "RhyökkäysO2", "RHyökkäysO3");
38    Animation RHyokkaysVAnim = new Animation(RHyokV);
39    static private Image[] RHyokO = LoadImages("RhyökkäysV1", "RhyökkäysV2", "RHyökkäysV3");
40    Animation RHyokkaysOAnim = new Animation(RHyokO);
41
42
43    static private Image[] Vihueteen = LoadImages("V1AnimaatioE1", "V1AnimaatioE2");
44    Animation VihuAnim = new Animation(Vihueteen);
45
46    Queue<Widget> sydanfifo = new Queue<Widget>();
47
48    bool damage = true;
49
50    Dictionary<Direction, Image> kuvat = new Dictionary<Direction, Image>();
51    Dictionary<Direction, Animation> hyokkaykset = new Dictionary<Direction, Animation>();
52    Direction suunta = Direction.Down;
53
54    List<PhysicsObject> vihut = new List<PhysicsObject>();
55
56    public override void Begin()
57    {
58        hyokkaykset.Add(Direction.Right, RHyokkaysOAnim);
59        hyokkaykset.Add(Direction.Left, RHyokkaysVAnim);
60        hyokkaykset.Add(Direction.Up, RHyokkaysTAnim);
61        hyokkaykset.Add(Direction.Down, RHyokkaysEAnim);
62
63        kuvat.Add(Direction.Down, ritariKuva);
64        kuvat.Add(Direction.Up, ritariTaka);
65        kuvat.Add(Direction.Left, ritariOikea);
66        kuvat.Add(Direction.Right, ritariVasen);
67
68
69        pelaaja = new PhysicsObject(50, 100);
70        pelaaja.Image = ritariKuva;
71        pelaaja.LinearDamping = 0.9;
72        pelaaja.Tag = "pelaaja";
73        pelaaja.CanRotate = false;
74        Add(pelaaja);
75        AddCollisionHandler(pelaaja, "Vihollinen", PelaajaOttidmg);
76
77        HorizontalLayout asettelu = new HorizontalLayout();
78        asettelu.Spacing = 10;
79
80        Widget sydammet = new Widget(asettelu);
81        sydammet.Color = Color.Transparent;
82        sydammet.X = Screen.Left + 250;
83        sydammet.Y = Screen.Top - 20;
84        Add(sydammet);
85
86        for (int i = 0; i < 10; i++)
87        {
88            Widget sydan = new Widget(30, 30, Shape.Heart);
89            sydan.Color = Color.Black;
90            sydammet.Add(sydan);
91            sydanfifo.Enqueue(sydan);
92        }
93
94
95        lisaaLuola(0, 200);
96
97        Level.CreateBorders();
98
99        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
100        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
101        Keyboard.Listen(Key.Down, ButtonState.Down, LiikutaPelaajaa, "Liiku alas", pelaaja, new Vector(0, -600));
102        Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaPelaajaa, "Liiku ylös", pelaaja, new Vector(0, 600));
103        Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaPelaajaa, "Liiku vasemmalle", pelaaja, new Vector(-600, 0));
104        Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaPelaajaa, "Liiku oikealle", pelaaja, new Vector(600, 0));
105        Keyboard.Listen(Key.Up, ButtonState.Pressed, LaitaAnimaatio, null, ritariTaakseAnim, Direction.Up);
106        Keyboard.Listen(Key.Down, ButtonState.Pressed, LaitaAnimaatio, null, ritariEteenAnim, Direction.Down);
107        Keyboard.Listen(Key.Right, ButtonState.Pressed, LaitaAnimaatio, null, ritariOikeaAnim, Direction.Right);
108        Keyboard.Listen(Key.Left, ButtonState.Pressed, LaitaAnimaatio, null, ritariVasenAnim, Direction.Left);
109        //Keyboard.Listen(Key.Down, ButtonState.Pressed, delegate { pelaaja.Animation = ritariEteenAnim; pelaaja.Animation.FPS = 4; pelaaja.Animation.Start(); }, "");
110        //Keyboard.Listen(Key.Left, ButtonState.Pressed, delegate { pelaaja.Animation = ritariVasenAnim; pelaaja.Animation.FPS = 4; pelaaja.Animation.Start(); }, "");
111        //Keyboard.Listen(Key.Right, ButtonState.Pressed, delegate { pelaaja.Animation = ritariOikeaAnim; pelaaja.Animation.FPS = 4; pelaaja.Animation.Start(); }, "");
112        Keyboard.Listen(Key.Up, ButtonState.Released, delegate { pelaaja.Animation.Stop(); pelaaja.Image = ritariTaka; }, "");
113        Keyboard.Listen(Key.Down, ButtonState.Released, delegate { pelaaja.Animation.Stop(); pelaaja.Image = ritariKuva; }, "");
114        Keyboard.Listen(Key.Left, ButtonState.Released, delegate { pelaaja.Animation.Stop(); }, "");
115        Keyboard.Listen(Key.Right, ButtonState.Released, delegate { pelaaja.Animation.Stop(); }, "");
116        Keyboard.Listen(Key.Space, ButtonState.Pressed, Hyokkaa, "hyökkää");
117
118        SmoothTextures = false;
119    }
120
121    void LaitaAnimaatio(Animation anim, Direction uusiSuunta)
122    {
123        pelaaja.Animation = anim;
124        pelaaja.Animation.FPS = 4;
125        pelaaja.Animation.Start();
126        suunta = uusiSuunta;
127    }
128
129    void Hyokkaa()
130    {
131        pelaaja.Animation = hyokkaykset[suunta];
132        pelaaja.Animation.FPS = 8;
133        pelaaja.Animation.Start(1);
134        pelaaja.Animation.Played += delegate { pelaaja.Image = kuvat[suunta]; };
135        if (vihut.Count > 0)
136        {
137            double minDistance = Double.MaxValue;
138            PhysicsObject lahin = vihut[0];
139            foreach (PhysicsObject vihu in vihut)
140            {
141                if (Vector.Distance(pelaaja.Position, vihu.Position) < minDistance)
142                {
143                    minDistance = Vector.Distance(pelaaja.Position, vihu.Position);
144                    lahin = vihu;
145                }
146            }
147            if (minDistance < 150)
148            {
149                lahin.Destroy();
150            }
151        }
152    }
153    void LiikutaPelaajaa(PhysicsObject pelaaja, Vector vektori)
154    {
155        pelaaja.Push(vektori);
156    }
157
158    void lisaaVihollinenen(double x, double y)
159    {
160        Vihu = new PhysicsObject(50, 70);
161        Vihu.MaximumLifetime = TimeSpan.FromSeconds(5.0);
162        Vihu.Destroyed += delegate { vihut.Remove(Vihu); };
163        Vihu.X = x;
164        Vihu.Y = y;
165        Vihu.Animation = VihuAnim;
166        Vihu.Animation.FPS = 4;
167        Vihu.Animation.Start();
168        Vihu.CanRotate = false;
169        Vihu.Tag = "Vihollinen";
170
171        FollowerBrain seuraajaAivot = new FollowerBrain("pelaaja");
172       
173        seuraajaAivot.DistanceToTarget.AddTrigger(60, TriggerDirection.Down, Karjaise);
174        seuraajaAivot.Speed = 150;
175        Vihu.Brain = seuraajaAivot;
176
177        vihut.Add(Vihu);
178
179        Add(Vihu);
180
181    }
182    void lisaaLuola(double x, double y)
183    {
184        GameObject Luola = new GameObject(50, 50);
185        Luola.X = x;
186        Luola.Y = y;
187        Luola.Image = LuolaKuva;
188        Luola.Tag = "vihuspawn";
189        Add(Luola);
190
191        Timer vihuAjastin = new Timer();
192        vihuAjastin.Interval = 2;
193        vihuAjastin.Timeout += delegate { lisaaVihollinenen(x, y); };
194       
195        vihuAjastin.Start();
196
197    }
198    void Karjaise()
199    {
200        //PlaySound("Karjaisu");
201        Karjaisu.Play();
202    }
203
204    void PelaajaOttidmg(PhysicsObject pelaaja, PhysicsObject Vihollinen)
205    {
206        MessageDisplay.Add("auts!");
207        if (sydanfifo.Count > 0)
208        {
209            if (damage)
210            {
211                sydanfifo.Dequeue().Destroy();
212                damage = false;
213                Timer.SingleShot(1.0, delegate { damage = true; if ((pelaaja.AbsolutePosition - Vihollinen.AbsolutePosition).Magnitude < 90) PelaajaOttidmg(pelaaja, Vihollinen); });
214            }
215            if (sydanfifo.Count <= 0)
216            {
217                pelaaja.Destroy();
218            }
219        }
220        else
221        {
222            pelaaja.Destroy();
223        }
224    }
225
226}
Note: See TracBrowser for help on using the repository browser.