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

Revision 9456, 7.0 KB checked in by rikavila, 21 months 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 = false;
30        IsFullScreen = true;
31        MediaPlayer.Play("MUSIC");
32
33        Label nimi = new Label("Catboarding");
34        nimi.TextColor = Color.White;
35        nimi.TextScale *= 2;
36        nimi.Y = 140;
37        Add(nimi);
38
39        Level.Background.Image = LoadImage("Taustakuva");
40
41        MultiSelectWindow alkuValikko = new MultiSelectWindow("© Otto Koskinen", "Start", "Exit");
42        alkuValikko.DefaultCancel = 1;
43        alkuValikko.Color = Color.Transparent;
44        alkuValikko.ActiveColor = Color.Transparent;
45        alkuValikko.Width = 600;
46        alkuValikko.Height = 500;
47        alkuValikko.Buttons[0].TextScale *= 2;
48        alkuValikko.Buttons[1].TextScale *= 2;
49       
50        Add(alkuValikko);
51        alkuValikko.AddItemHandler(0, Lataa);
52        alkuValikko.AddItemHandler(1, Exit);
53    }
54
55    void Lataa()
56    {
57        ClearAll();
58        Label teksti = new Label("Loading...");
59        Add(teksti);
60        teksti.TextScale *= 3;
61
62        Timer.SingleShot(0.1, AloitaPeli);
63    }
64
65    void AloitaPeli()
66    {
67        ClearAll();
68        Gravity = new Vector(0, -800);
69        //Level.CreateLeftBorder();
70
71        LuoKentta();
72        LisaaKissa(172/2, 82/2);
73        LisaaNappaimet();
74
75        Camera.Follow(Kissa);
76        Camera.ZoomFactor = 1.2;
77        Camera.ZoomToAllObjects();
78        pelaaja1.Hit(new Vector(900,0));
79    }
80
81    double[] Jako(double[] taulukko)
82    {
83        double[] uusi = new double[taulukko.Length*2];
84        for (int i = 0; i < taulukko.Length-1; i++)
85        {
86            uusi[i*2] = taulukko[i];
87
88            uusi[i*2+1] = (taulukko[i] + taulukko[i+1]) * 0.5;
89        }
90        // alemmassa ei ole järkeä, mutta en jaksanut ajatella sitä loppuun asti t. simo
91        uusi[uusi.Length - 2] = taulukko[taulukko.Length - 1];
92        uusi[uusi.Length - 1] = taulukko[taulukko.Length - 1];
93        return uusi;
94    }
95
96    void LuoKentta()
97    {
98        TileMap kentta = TileMap.FromLevelAsset("kentta1");
99        kentta.SetTileMethod('#', LisaaTaso);
100        //kentta.SetTileMethod('*', LisaaTahti);
101        //kentta.SetTileMethod('N', LisaaPelaaja);
102        LisaaPelaaja(new Vector(500,10.0),50,50);
103        Level.Background.CreateGradient(Color.LightBlue, Color.SkyBlue);
104
105        double[] korkeudet = new double[] { 9000, 9000, RandomGen.NextDouble(9000, 8000), 7900, 6900, 6200, 5700, 5400, 5250, 5150, 5100, 5100, 5200, 5450, 5400, 5150, 5000 };
106
107        korkeudet = Jako(Jako(korkeudet));
108
109        Surface maasto = new Surface(10000,korkeudet, 1.0);
110        maasto.Tag = "maasto";
111        maasto.Y = -maasto.Height/2;
112        maasto.X = maasto.Width/2;
113       
114        maasto.Color = Color.White;
115        maasto.KineticFriction = 0.0;
116        maasto.StaticFriction = 0.0;
117   
118        Add(maasto);
119        Level.Width = maasto.Width;
120
121    }
122
123    void LisaaTaso(Vector paikka, double leveys, double korkeus)
124    {
125        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
126        taso.Position = paikka;
127        taso.Color = Color.White;
128        Add(taso);
129    }
130
131    void LisaaTahti(Vector paikka, double leveys, double korkeus)
132    {
133        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
134        tahti.IgnoresCollisionResponse = true;
135        tahti.Position = paikka;
136        tahti.Image = tahtiKuva;
137        tahti.Tag = "tahti";
138        Add(tahti);
139    }
140
141    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
142    {
143        pelaaja1 = new PhysicsObject(148/1.5, 25/1.5, Shape.FromImage(LumilaudanKuva));
144        pelaaja1.Position = paikka;
145        pelaaja1.Mass = 4.0;
146        pelaaja1.Image = LumilaudanKuva;
147        pelaaja1.CanRotate = true;
148        pelaaja1.MaxAngularVelocity = 20;
149        pelaaja1.MaxVelocity = 4000;
150        Add(pelaaja1);
151        AddCollisionHandler(pelaaja1, tarkista);
152    }
153
154    void LisaaKissa(double leveys, double korkeus)
155    {
156        Kissa = new PhysicsObject(leveys, korkeus, Shape.FromImage(KissanKuva));
157        Kissa.Position = new Vector(pelaaja1.X, pelaaja1.Y+20);
158        Kissa.Image = KissanKuva;
159        Add(Kissa);
160        Liitos = new AxleJoint(pelaaja1, Kissa);
161        Liitos.Softness = 0;
162        AddCollisionHandler(Kissa, "maasto", delegate(PhysicsObject a, PhysicsObject b)
163        {
164           Liitos.Destroy();
165            Kissa.Image = KissanKuva2;
166
167        });
168        Add(Liitos);
169    }
170
171    void AloitaUudestaan()
172    {
173        ClearAll();
174        Lataa();
175    }
176
177    protected override void Update(Time time)
178    {
179        if(Liitos != null && !Liitos.IsDestroyed)
180            Kissa.Angle = pelaaja1.Angle;
181
182        base.Update(time);
183    }
184   
185       
186
187    void tarkista(PhysicsObject p1, PhysicsObject p2)
188    {
189        osuu = true;
190
191    }
192
193    void LisaaNappaimet()
194    {
195        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
196
197        Keyboard.Listen(Key.Left, ButtonState.Down, Pyori, "Liikkuu vasemmalle", pelaaja1, 1.0);
198        Keyboard.Listen(Key.Right, ButtonState.Down, Pyori, "Liikkuu vasemmalle", pelaaja1, -1.0);
199        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
200        Keyboard.Listen(Key.R, ButtonState.Pressed, AloitaUudestaan, "Pelaaja aloittaa uudestaan");
201
202        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
203
204        ControllerOne.ListenAnalog(AnalogControl.LeftStick, 0.1, Tatti, "Liikuta pelaajaa tattia pyörittämällä.", pelaaja1);
205        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
206
207        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
208    }
209
210    void Tatti(AnalogState tatinTila,PhysicsObject hahmo)
211    {
212        Pyori(hahmo, -tatinTila.StateVector.X);
213    }
214    void Pyori(PhysicsObject hahmo, double nopeus)
215    {
216        if (!Liitos.IsDestroyed)
217            hahmo.AngularVelocity += nopeus;
218    }
219
220    void Hyppaa(PhysicsObject hahmo, double nopeus)
221    {
222        if(osuu && !Liitos.IsDestroyed)
223        {
224            hahmo.Hit(new Vector(0, 2000));
225            Hyppyaani.Play();
226            osuu = false;
227        }
228    }
229
230    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
231    {
232        Hyppyaani.Play();
233        MessageDisplay.Add("Keräsit tähden!");
234        tahti.Destroy();
235    }
236}
Note: See TracBrowser for help on using the repository browser.