source: 2012/JAO/JuhoT/SamuraiNorsu/SamuraiNorsu/SamuraiNorsu/SamuraiNorsu.cs @ 2738

Revision 2738, 8.8 KB checked in by anonymous, 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
9public class SamuraiNorsu : PhysicsGame
10{
11    const double nopeus = 200;
12    const double hyppyNopeus = 1000;
13    const int RUUDUN_KOKO = 40;
14
15    PlatformCharacter pelaaja1;
16    PhysicsObject miekka;
17
18    Image pelaajanKuva = LoadImage("norsu");
19    Image tahtiKuva = LoadImage("tahti");
20    Image miekkaKuva = LoadImage("miekka");
21
22    Slider liukusaadin;
23    //ProgressBar p;
24    DoubleMeter d;
25
26
27    PhysicsObject myyra;
28
29    double suurinY = double.MinValue;
30
31    public override void Begin()
32    {
33        MessageDisplay.MaxMessageCount = 1;
34        MessageDisplay.MessageTime = new TimeSpan(1000) ;
35
36        IsMouseVisible = true;
37
38        Gravity = new Vector(0, -1000);
39
40        luoKentta();
41        lisaaNappaimet();
42
43       
44
45        Camera.Follow(pelaaja1);
46        //Camera.Velocity = new Vector(0, 10);
47        //Camera.FollowsX = false;
48//        Camera.ZoomFactor = 0.5;
49        Camera.StayInLevel = false;
50    }
51
52    void luoSlider()
53    {
54        DoubleMeter dm = new DoubleMeter(0, 0, 1);
55        dm.Changed += ZoomaaKenttaa;
56
57        liukusaadin = new Slider(200, 20);
58        liukusaadin.X = Screen.LeftSafe + 200; 
59        liukusaadin.Y = Screen.TopSafe - 40;
60        liukusaadin.Knob.Color = Color.Black;
61        liukusaadin.Track.Color = Color.Blue;
62        liukusaadin.BorderColor = Color.DarkOrange;
63        liukusaadin.Color = Color.Pink;
64
65        liukusaadin.BindTo(dm);
66
67
68        //liukusaadin.Meter.Changed += new Meter<double>.OnChangeHandler(Meter_Changed);
69        //liukusaadin.Meter.MinValue = 0;
70        //liukusaadin.Meter.MaxValue = 1;
71
72        Add(liukusaadin);
73    }
74
75    void LuoProgress()
76    {
77        //p = new ProgressBar(200, 20);
78        //p.BarColor = Color.DarkOrange;
79        //p.Color = Color.Gray;
80        //p.Y = Screen.TopSafe - 40;
81        //Add(p);
82
83
84        d = new DoubleMeter(0, 0, Level.Height);
85
86        BarGauge bg = new BarGauge(20, 200);
87        bg.Angle -= Angle.RightAngle;
88        bg.BindTo(d);
89       
90        bg.Color = Color.MediumBlue;
91        bg.BarColor = Color.Lime;
92        bg.Y = Screen.TopSafe - 70;
93        Add(bg);
94    }
95
96
97    void luoKentta()
98    {
99       
100        TileMap kentta = TileMap.FromFile("kentta1.txt");
101        kentta.SetTileMethod('#', lisaaTaso);
102        kentta.SetTileMethod('*', lisaaTahti);
103        kentta.SetTileMethod('N', lisaaPelaaja);
104        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
105        Level.CreateBorders();
106        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
107
108        luoSlider();
109        LuoProgress();
110
111        for (int i = 0; i < 20; i++)
112        {
113         
114
115        PhysicsObject myyra = new PhysicsObject(50, 50);
116        myyra.Position = new Vector(RandomGen.NextDouble(Level.Left, Level.Right), Level.Top - 100);
117        myyra.Tag = "myyra";
118        Add(myyra);
119
120        }
121    }
122
123    void ZoomaaKenttaa(double oldValue, double newValue)
124    {
125        Camera.ZoomFactor = 1 + 2 * newValue;
126
127        //Angle kulma = miekka.Angle;
128        //miekka.Destroy();
129
130        //teeMiekka();
131
132        //miekka.Angle = kulma;
133
134        //MessageDisplay.Add(newValue.ToString());
135        //throw new NotImplementedException();
136    }
137
138    void teeMiekka()
139    {
140        if (miekka != null)
141        {
142            miekka.Destroy();
143        }
144
145        miekka = new PhysicsObject(pelaaja1.Width, pelaaja1.Height / 4);
146
147        miekka.Left = pelaaja1.X;
148        miekka.Y = pelaaja1.Y - pelaaja1.Height / 4;
149        miekka.Color = Color.Black;
150        miekka.CollisionIgnoreGroup = 1;
151        miekka.IgnoresCollisionResponse = true;
152        miekka.Mass = 0.1;
153        miekka.Image = miekkaKuva;
154        //miekka.MomentOfInertia = 50;
155        Add(miekka);
156
157        AddCollisionHandler(miekka, miekkatormasi);
158
159        AxleJoint ax = new AxleJoint(pelaaja1, miekka, pelaaja1.Position);
160//        AxleJoint ax = new AxleJoint(pelaaja1, miekka, new Vector(pelaaja1.X, pelaaja1.Y - pelaaja1.Height / 4));
161        ax.Softness = 0.05;
162        Add(ax);
163    }
164
165    void miekkatormasi(PhysicsObject tormaaja, PhysicsObject kohde)
166    {
167        MessageDisplay.Add(tormaaja.AngularVelocity.ToString());
168
169        if (Math.Abs(tormaaja.AngularVelocity) < 5.0) return;
170        if (kohde.Tag.ToString() == "myyra") kohde.Destroy();
171        //PlatformCharacter hahmo = kohde as PlatformCharacter;
172        //if(hahmo != null)  hahmo.Jump(nopeus);
173       
174    }
175
176    void lisaaTaso(Vector paikka, double leveys, double korkeus)
177    {
178        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
179        taso.Position = paikka;
180        taso.Color = Color.Green;
181
182        Add(taso);
183    }
184
185    void lisaaTahti(Vector paikka, double leveys, double korkeus)
186    {
187        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
188        tahti.IgnoresCollisionResponse = true;
189        tahti.Position = paikka;
190        tahti.Image = tahtiKuva;
191        tahti.Tag = "tahti";
192        Add(tahti);
193    }
194
195    void lisaaPelaaja(Vector paikka, double leveys, double korkeus)
196    {
197        pelaaja1 = new PlatformCharacter(leveys, korkeus);
198        pelaaja1.Position = paikka;
199        pelaaja1.Mass = 50.0;
200        pelaaja1.Image = pelaajanKuva;
201        pelaaja1.CollisionIgnoreGroup = 1;
202
203        //        miekka = new PhysicsObject(pelaaja1.Width * 1.5, pelaaja1.Height / 4);
204        teeMiekka();
205       
206        AddCollisionHandler(pelaaja1, kasittelePelaajanTormays);
207        Add(pelaaja1);
208       
209    }
210
211    void lisaaNappaimet()
212    {
213        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
214        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu pelistä");
215        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
216
217        //Keyboard.Listen(Key.Space, ButtonState.Down, delegate { miekka.Push(Vector.FromLengthAndAngle(pelaaja1.FacingDirection.Vector.Normalize().X * 500, miekka.Angle + Angle.RightAngle)); }, null);
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
225    void liikuta(PlatformCharacter hahmo, double nopeus)
226    {
227       
228
229        hahmo.Walk(nopeus);
230    }
231
232    void hyppaa(PlatformCharacter hahmo, double nopeus)
233    {
234        hahmo.Jump(nopeus);
235        //miekka.Hit(new Vector(0, nopeus * hahmo.Mass));
236    }
237
238    void kasittelePelaajanTormays(PhysicsObject hahmo, PhysicsObject kohde)
239    {
240        if (kohde.Tag.ToString() == "tahti")
241        {
242            //p.Meter.RelativeValue += 0.25;
243            MessageDisplay.Add("Keräsit tähden!");
244            kohde.Destroy();
245        }
246    }
247
248    protected override void Paint(Canvas canvas)
249    {
250        canvas.BrushColor = Color.Red;
251
252        double ajanhetki = Game.Time.SinceStartOfGame.TotalSeconds;
253       // double ajanhetki = Game.Time.SinceStartOfGame.TotalMilliseconds;
254
255
256        //Vector keskipiste = new Vector(
257        //    RandomGen.NextDouble(Level.Left, Level.Right),
258        //    RandomGen.NextDouble(Level.Bottom, Level.Top)
259        //    );
260
261        Vector keskipiste = Vector.Zero;
262
263        //for (int i = 0; i < 360; i++)
264        //{
265        //    Vector reunapiste = keskipiste + new Vector(ajanhetki % 1000 * Math.Cos(ajanhetki + i), ajanhetki % 1000 * Math.Sin(ajanhetki + i));
266
267        //    canvas.DrawLine(keskipiste, reunapiste);
268        //}
269
270        //canvas.DrawLine(keskipiste, keskipiste + reunapiste);
271
272        Vector vanhapiste = keskipiste;
273
274        for (int i = 0; i < 200; i++)
275        {
276            Vector uusipiste = vanhapiste + new Vector(i, 10 * Math.Sin(ajanhetki));
277
278            canvas.DrawLine(vanhapiste, uusipiste);
279
280            vanhapiste = uusipiste;
281        }
282
283        base.Paint(canvas);
284    }
285
286    protected override void Update(Time time)
287    {
288        //if (pelaaja1 != null)
289        //{
290        //    if (pelaaja1.Y > suurinY)
291        //    {
292        //        suurinY = pelaaja1.Y;
293        //        //Camera.X = pelaaja1.X;
294        //        Camera.FollowY(pelaaja1);
295        //    }
296        //    else if (pelaaja1.Y < suurinY) Camera.StopFollowing();
297        //}
298        //MessageDisplay.Add(pelaaja1.FacingDirection.Name);
299
300        //p.Meter.RelativeValue = Math.Abs(Level.Bottom - pelaaja1.Y) / Level.Height;
301        d.Value = Math.Abs(Level.Bottom - pelaaja1.Y);
302
303        miekka.Move((Mouse.PositionOnWorld - pelaaja1.Position).Normalize() * 500);
304        base.Update(time);
305    }
306}
Note: See TracBrowser for help on using the repository browser.