source: 2013/anlakane/Tiernapojat/Tiernapojat/Tiernapojat/Tiernapojat.cs @ 4799

Revision 4799, 7.1 KB checked in by vesal, 7 years ago (diff)

get

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Tiernapoika : PlatformCharacter
10{
11    private KaantyvaOsa liikkuvaOsa;
12
13    public KaantyvaOsa LiikkuvaOsa
14    {
15        get { return liikkuvaOsa; }
16    }
17    private AxleJoint kiinnitysVartaloon;
18
19    public AxleJoint KiinnitysVartaloon
20    {
21        get { return kiinnitysVartaloon; }
22    }
23
24    public Tiernapoika(double leveys, double korkeus, Image kuva, Image kasikuva)
25        : base(leveys,korkeus)
26    {
27        // Pojan oikea käsi
28        liikkuvaOsa = new KaantyvaOsa(leveys, korkeus / 4);
29        liikkuvaOsa.X = Right - Width / 10;
30        liikkuvaOsa.Y = Top - Height / 4;
31        liikkuvaOsa.Color = Color.Gray;
32        Add(liikkuvaOsa);
33        kiinnitysVartaloon = new AxleJoint(this, liikkuvaOsa, new Vector(Right, liikkuvaOsa.Y));
34        kiinnitysVartaloon.Softness = 0;
35        // Add(kiinnitysVartaloon);
36        // Poika ja käsi eivät saa törmätä toisiinsa
37        CollisionIgnoreGroup = 1;
38        liikkuvaOsa.CollisionIgnoreGroup = 1;
39        liikkuvaOsa.Image = kasikuva;
40        Image = kuva;
41    }
42}
43
44/// @author  Vesa Lappalainen
45/// @version 16.10.2011
46/// <summary>
47/// Osa, jolle voidaan asettaa suunta johon se pyrkii.
48/// </summary>
49public class KaantyvaOsa : PhysicsObject
50{
51    /// <summary>
52    /// Tavoitekulma, johon maila pyrkii osoittamaan
53    /// </summary>
54    public Angle Tavoite { get { return tavoite; } set { tavoite = value; saavutettu = false; } }
55    private Angle tavoite;
56    private bool saavutettu = true;
57
58    public KaantyvaOsa(double width, double height)
59        : base(width, height)
60    {
61        // MakeStatic();
62        Mass = 10000;
63        IgnoresGravity = true;
64        IsUpdated = true;
65    }
66
67
68    /// <summary>
69    /// Uusi versio Update-metodista, jossa nyt käännetään mailaa kohti tavoitekulmaa.
70    /// </summary>
71    /// <param name="time">Peliaika</param>
72    public override void Update(Time time)
73    {
74        if (saavutettu) { base.Update(time); return; }
75        Angle diff = Tavoite - Angle;
76        double suunta = diff.Degrees;
77        double d = 2;
78        if (Math.Abs(suunta) > d)
79        {
80            this.StopAngular();
81            this.ApplyTorque(10000000 * 35.0 * suunta); // kokeiltu hihavakio
82        }
83        else
84        {
85            Stop();
86            saavutettu = true;
87        }
88        base.Update(time);
89    }
90}
91
92
93
94public class Tiernapojat : PhysicsGame
95{
96
97    private static readonly string[] taso0 = {
98"         *            ",
99"         #            ",
100"                      ",
101"                      ",
102"                      ",
103"                      ",
104"                      ",
105"                      ",
106"                      ",
107"                      ",
108"                      ",
109"                      ",
110"                      ",
111"                      ",
112"                      ",
113"   N                  ",
114"=                     ",
115                                             };
116
117
118    const double nopeus = 200;
119    const double hyppyNopeus = 750;
120    const int RUUDUN_KOKO = 40;
121
122    Tiernapoika poika1;
123
124    Image pelaajanKuva = LoadImage("norsu");
125    Image tahtiKuva = LoadImage("tahti");
126
127    SoundEffect maaliAani = LoadSoundEffect("maali");
128
129    public override void Begin()
130    {
131        Gravity = new Vector(0, -1000);
132
133        LuoKentta();
134        LisaaNappaimet();
135
136       // Camera.Follow(poika1);
137        Camera.ZoomFactor = 1.5;
138        //Camera.ZoomToAllObjects(0);
139       // Camera.StayInLevel = true;
140    }
141
142    void LuoKentta()
143    {
144        // TileMap kentta = TileMap.FromLevelAsset("kentta1");
145        TileMap kentta = TileMap.FromStringArray(taso0);
146        kentta.SetTileMethod('#', LisaaTaso);
147        kentta.SetTileMethod('=', LisaaPohjaTaso);
148        kentta.SetTileMethod('*', LisaaTahti);
149        kentta.SetTileMethod('N', LisaaPelaaja);
150        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
151        //Level.CreateBorders();
152        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
153    }
154
155    void LisaaTaso(Vector paikka, double leveys, double korkeus)
156    {
157        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
158        taso.Position = paikka;
159        taso.Color = Color.Green;
160        Add(taso);
161    }
162
163    void LisaaPohjaTaso(Vector paikka, double leveys, double korkeus)
164    {
165        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys*100, korkeus);
166        taso.Position = paikka;
167        taso.Color = Color.Green;
168        Add(taso);
169    }
170
171    void LisaaTahti(Vector paikka, double leveys, double korkeus)
172    {
173        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
174        tahti.IgnoresCollisionResponse = true;
175        tahti.Position = paikka;
176        tahti.Image = tahtiKuva;
177        tahti.Tag = "tahti";
178        Add(tahti);
179    }
180
181    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
182    {
183        poika1 = new Tiernapoika(leveys*4, korkeus*4,pelaajanKuva, LoadImage("kasi"));
184        poika1.Position = paikka;
185        poika1.Color = Color.Red;
186        poika1.Mass = 40000.0;
187
188        AddCollisionHandler(poika1, "tahti", TormaaTahteen);
189      //  Add(poika1.kiinnitysVartaloon);
190        Add(poika1);
191    }
192
193    void LisaaNappaimet()
194    {
195        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
196        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
197
198        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", poika1, -nopeus);
199        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", poika1, nopeus);
200        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", poika1, hyppyNopeus);
201
202        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
203        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", poika1, -nopeus);
204        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", poika1, nopeus);
205        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", poika1, hyppyNopeus);
206
207        ControllerOne.ListenAnalog(AnalogControl.RightStick, 0.03, LiikutaKatta, "Liikuta kättä", poika1);
208
209        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
210    }
211
212    void LiikutaKatta(AnalogState a, Tiernapoika poika)
213    {
214        double kulma = a.StateVector.Y * 90;
215        poika.LiikkuvaOsa.Tavoite = Angle.FromDegrees(kulma);
216    }
217
218    void Liikuta(PlatformCharacter hahmo, double nopeus)
219    {
220        hahmo.Walk(nopeus);
221    }
222
223    void Hyppaa(PlatformCharacter hahmo, double nopeus)
224    {
225        hahmo.Jump(nopeus);
226    }
227
228    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
229    {
230        maaliAani.Play();
231        MessageDisplay.Add("Keräsit tähden!");
232        tahti.Destroy();
233    }
234}
Note: See TracBrowser for help on using the repository browser.