source: 2016/koodauskerho/OttoK/Catboarding/Catboarding/Catboarding/Catboarding.cs @ 8738

Revision 8738, 5.8 KB checked in by npo17_1, 2 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8public class Catboarding : PhysicsGame
9{
10    const double hyppyNopeus = 750;
11    const int RUUDUN_KOKO = 40;
12    bool osuu = false;
13
14    PhysicsObject pelaaja1;
15    PhysicsObject Kissa;
16    AxleJoint Liitos;
17
18    Image LumilaudanKuva = LoadImage("Snowboard");
19    Image tahtiKuva = LoadImage("tahti");
20    Image KissanKuva = LoadImage("Cat");
21    Image KissanKuva2 = LoadImage("Cat2");
22
23    SoundEffect Hyppyaani = LoadSoundEffect("Meow");
24   
25
26
27    public override void Begin()
28    {
29        SmoothTextures = true;
30        Gravity = new Vector(0, -1000);
31        //Level.CreateLeftBorder();
32
33        LuoKentta();
34        LisaaKissa(172/2, 82/2);
35        LisaaNappaimet();
36
37        Camera.Follow(Kissa);
38        Camera.ZoomFactor = 1.2;
39        //Camera.ZoomToAllObjects();
40        //Camera.StayInLevel = true;
41        IsFullScreen = true;
42        MediaPlayer.Play("MUSIC");
43        pelaaja1.Hit(new Vector(900,0));
44    }
45
46    double[] Jako(double[] taulukko)
47    {
48        double[] uusi = new double[taulukko.Length*2];
49        for (int i = 0; i < taulukko.Length-1; i++)
50        {
51            uusi[i*2] = taulukko[i];
52
53            uusi[i*2+1] = (taulukko[i] + taulukko[i+1]) * 0.5;
54        }
55        // alemmassa ei ole järkeä, mutta en jaksanut ajatella sitä loppuun asti t. simo
56        uusi[uusi.Length - 2] = taulukko[taulukko.Length - 1];
57        uusi[uusi.Length - 1] = taulukko[taulukko.Length - 1];
58        return uusi;
59    }
60
61    void LuoKentta()
62    {
63        TileMap kentta = TileMap.FromLevelAsset("kentta1");
64        kentta.SetTileMethod('#', LisaaTaso);
65        //kentta.SetTileMethod('*', LisaaTahti);
66        //kentta.SetTileMethod('N', LisaaPelaaja);
67        LisaaPelaaja(new Vector(500,10.0),50,50);
68        Level.Background.CreateGradient(Color.LightBlue, Color.SkyBlue);
69
70        double[] korkeudet = new double[] { 9000, 9000, 8700, 7900, 6900, 6200, 5700, 5000};
71
72        korkeudet = Jako(Jako(korkeudet));
73
74        Surface maasto = new Surface(5000,korkeudet, 1.0);
75        maasto.Tag = "maasto";
76        maasto.Y = -maasto.Height/2;
77        maasto.X = maasto.Width/2;
78       
79        maasto.Color = Color.White;
80        maasto.KineticFriction = 0.0;
81        maasto.StaticFriction = 0.0;
82   
83        Add(maasto);
84        Level.Width = maasto.Width;
85
86    }
87
88    void LisaaTaso(Vector paikka, double leveys, double korkeus)
89    {
90        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
91        taso.Position = paikka;
92        taso.Color = Color.White;
93        Add(taso);
94    }
95
96    void LisaaTahti(Vector paikka, double leveys, double korkeus)
97    {
98        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
99        tahti.IgnoresCollisionResponse = true;
100        tahti.Position = paikka;
101        tahti.Image = tahtiKuva;
102        tahti.Tag = "tahti";
103        Add(tahti);
104    }
105
106    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
107    {
108        pelaaja1 = new PhysicsObject(148/1.5, 25/1.5, Shape.FromImage(LumilaudanKuva));
109        pelaaja1.Position = paikka;
110        pelaaja1.Mass = 4.0;
111        pelaaja1.Image = LumilaudanKuva;
112        pelaaja1.CanRotate = true;
113        pelaaja1.MaxAngularVelocity = 20;
114        Add(pelaaja1);
115        AddCollisionHandler(pelaaja1, tarkista);
116    }
117
118    void LisaaKissa(double leveys, double korkeus)
119    {
120        Kissa = new PhysicsObject(leveys, korkeus, Shape.FromImage(KissanKuva));
121        Kissa.Position = new Vector(pelaaja1.X, pelaaja1.Y+20);
122        Kissa.Image = KissanKuva;
123        Add(Kissa);
124        Liitos = new AxleJoint(pelaaja1, Kissa);
125        Liitos.Softness = 1;
126        AddCollisionHandler(Kissa, "maasto", delegate(PhysicsObject a, PhysicsObject b)
127        {
128           Liitos.Destroy();
129            Kissa.Image = KissanKuva2;
130
131        });
132        Add(Liitos);
133    }
134
135    protected override void Update(Time time)
136    {
137        if(!Liitos.IsDestroyed)
138        Kissa.Angle = pelaaja1.Angle;
139        base.Update(time);
140    }
141   
142       
143
144    void tarkista(PhysicsObject p1, PhysicsObject p2)
145    {
146        osuu = true;
147
148    }
149
150    void LisaaNappaimet()
151    {
152        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
153
154        Keyboard.Listen(Key.Left, ButtonState.Down, Pyori, "Liikkuu vasemmalle", pelaaja1, 1.0);
155        Keyboard.Listen(Key.Right, ButtonState.Down, Pyori, "Liikkuu vasemmalle", pelaaja1, -1.0);
156        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
157
158        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
159
160        ControllerOne.ListenAnalog(AnalogControl.LeftStick, 0.1, Tatti, "Liikuta pelaajaa tattia pyörittämällä.", pelaaja1);
161        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
162
163        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
164    }
165
166    void Tatti(AnalogState tatinTila,PhysicsObject hahmo)
167    {
168        Pyori(hahmo, -tatinTila.StateVector.X);
169    }
170    void Pyori(PhysicsObject hahmo, double nopeus)
171    {
172        if (!Liitos.IsDestroyed)
173            hahmo.AngularVelocity += nopeus;
174    }
175
176    void Hyppaa(PhysicsObject hahmo, double nopeus)
177    {
178        if(osuu && !Liitos.IsDestroyed)
179        {
180            hahmo.Hit(new Vector(0, 2000));
181            Hyppyaani.Play();
182            osuu = false;
183        }
184    }
185
186    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
187    {
188        Hyppyaani.Play();
189        MessageDisplay.Add("Keräsit tähden!");
190        tahti.Destroy();
191    }
192}
Note: See TracBrowser for help on using the repository browser.