source: 2012/10-20/AkiP/GemGrabberFinal/GemGrabberFinal/GemGrabberFinal/GemGrabberFinal.cs @ 3897

Revision 3897, 6.0 KB checked in by jypeleht, 8 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 GemGrabberFinal : PhysicsGame
10{
11    const double nopeus = 300;
12    const double hyppyNopeus = 750;
13    const int RUUDUN_KOKO = 40;
14    const double kuulanopeus = 1200;
15
16    PlatformCharacter pelaaja1;
17    PhysicsObject pallo;
18    PhysicsStructure pallonkiinnitys;
19
20    IntMeter pisteetGrabbed;
21    IntMeter pisteetTotal;
22
23    Image pelaajanKuva = LoadImage("Grabber");
24    Image tahtiKuva = LoadImage("Gem");
25
26    SoundEffect maaliAani = LoadSoundEffect("maali");
27
28    public override void Begin()
29    {
30        Gravity = new Vector(0, -900);
31
32        LuoKentta();
33        LisaaNappaimet();
34        LisaaLaskurit();
35
36        Camera.Follow(pelaaja1);
37        Camera.ZoomFactor = 1.2;
38        Camera.StayInLevel = true;
39    }
40
41    void LuoKentta()
42    {
43        TileMap kentta = TileMap.FromLevelAsset("kentta1");
44        kentta.SetTileMethod('#', LisaaTaso);
45        kentta.SetTileMethod('*', LisaaTahti);
46        kentta.SetTileMethod('N', LisaaPelaaja);
47        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
48        Level.CreateBorders();
49        Level.Background.CreateGradient(Color.SkyBlue, Color.Black);
50    }
51
52    void LisaaTaso(Vector paikka, double leveys, double korkeus)
53    {
54        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
55        taso.Position = paikka;
56        taso.Color = Color.Green;
57        taso.Tag = "maa";
58        taso.IsVisible = true;
59        Add(taso);
60    }
61
62    void LisaaPallo(Vector paikka, double leveys, double korkeus)
63    {
64        pallo = new PhysicsObject(leveys, korkeus);
65        pallo.Shape = Shape.Circle;
66        pallo.Position = paikka;
67        pallo.Tag = "pallo";
68        pallo.Restitution = 1.0;
69        pallo.KineticFriction = 0.0;
70        pallo.CanRotate = true;
71        //pallo.MomentOfInertia = Double.PositiveInfinity;
72        pallonkiinnitys = new PhysicsStructure(pallo, pelaaja1);
73        AddCollisionHandler(pallo, "tahti", TormaaTahteen);
74        AddCollisionHandler(pallo, "maa", NollaaGrabbed);
75        Add(pallonkiinnitys);
76    }
77
78    void LisaaTahti(Vector paikka, double leveys, double korkeus)
79    {
80        PhysicsObject tahti = PhysicsObject.CreateStaticObject(1.3 * leveys, 1.3 * korkeus);
81        tahti.IgnoresCollisionResponse = true;
82        tahti.Position = paikka;
83        tahti.Image = tahtiKuva;
84        tahti.Tag = "tahti";
85        Add(tahti);
86    }
87
88    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
89    {
90        pelaaja1 = new PlatformCharacter(1.5 * leveys, 1.5 * korkeus);
91        pelaaja1.Position = paikka;
92        pelaaja1.Mass = 4.0;
93        pelaaja1.Restitution = 1.0;
94        pelaaja1.KineticFriction = 0.0;
95        pelaaja1.Image = pelaajanKuva;
96        Add(pelaaja1);
97        LisaaPallo(new Vector(paikka.X, paikka.Y + 40), 40.0, 40.0);
98    }
99
100    void LisaaLaskurit()
101    {
102        pisteetGrabbed = LuoPisteLaskuri(Screen.Left + 100.0, Screen.Bottom + 40.0);
103        pisteetTotal = LuoPisteLaskuri(Screen.Right - 100.0, Screen.Bottom + 40.0);
104    }
105
106    IntMeter LuoPisteLaskuri(double x, double y)
107    {
108        IntMeter laskuri = new IntMeter(0);
109        laskuri.MaxValue = 48;
110
111        Label naytto = new Label();
112        naytto.BindTo(laskuri);
113        naytto.X = x;
114        naytto.Y = y;
115        naytto.TextColor = Color.Black;
116        naytto.BorderColor = Level.BackgroundColor;
117        naytto.Color = Level.BackgroundColor;
118        Add(naytto);
119
120        return laskuri;
121    }
122
123    void LisaaNappaimet()
124    {
125        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
126        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
127
128        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
129        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja1, nopeus);
130        //Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
131        Keyboard.Listen(Key.Space, ButtonState.Pressed, Ammu, "Laukaise kuula", pallo, kuulanopeus);
132
133
134        //ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
135
136        //ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
137        //ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
138        //ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
139        //ControllerOne.Listen(Button.A, ButtonState.Pressed, Ammu, "Laukaise kuula", pallo, kuulanopeus);
140
141        //PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
142    }
143
144    void Liikuta(PlatformCharacter hahmo, double nopeus)
145    {
146        hahmo.Walk(nopeus);
147    }
148
149    void Ammu(PhysicsObject pallo, double nopeus)
150    {
151        pallo.Hit(new Vector(0, nopeus));
152        pallonkiinnitys.Remove(pallo);
153        AddCollisionHandler(pelaaja1, "pallo", PalloTormaaPelaajaan);
154        Keyboard.Disable(Key.Space);
155        ControllerOne.Disable(Button.A);
156    }
157
158    void Hyppaa(PlatformCharacter hahmo, double nopeus)
159    {
160        hahmo.Jump(nopeus);
161    }
162
163    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
164    {
165        pisteetGrabbed.Value += 1;
166        maaliAani.Play();
167        MessageDisplay.Add("Keräsit jalokiven!");
168        tahti.Destroy();
169    }
170
171    void NollaaGrabbed(PhysicsObject kuula, PhysicsObject maapala)
172    {
173        MessageDisplay.Add("Menetit jalokiven!");
174        pallo.Position = pelaaja1.Position;
175        pallo.Y = pallo.Y + 40;
176    }
177
178    void PalloTormaaPelaajaan(PhysicsObject hahmo, PhysicsObject kuula)
179    {
180        pallo.Velocity = new Vector(pallo.Velocity.X, 0);
181        pallo.Hit(new Vector(0, kuulanopeus));
182        pisteetTotal.Value += pisteetGrabbed;
183        pisteetGrabbed.Value = 0;
184    }
185}
Note: See TracBrowser for help on using the repository browser.