source: 2016/27/SamuelN/PlatformJumper/PlatformJumper/PlatformJumper/PlatformJumper.cs @ 7971

Revision 7971, 5.9 KB checked in by saalniit, 4 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
9
10public class PlatformJumper : PhysicsGame
11{
12    const double nopeus = 200;
13    const double hyppyNopeus = 750;
14    const int RUUDUN_KOKO = 40;
15
16    double epsilon = 0.2;
17
18    PlatformCharacter pelaaja1;
19
20    Image pelaajanKuva = LoadImage("sieni");
21    Image tahtiKuva = LoadImage("coin");
22    Image ruohokuva = LoadImage("ruoho");
23    Image vihukuva = LoadImage("invader");
24
25
26    SoundEffect coinAani = LoadSoundEffect("pickup");
27    SoundEffect jumpAani = LoadSoundEffect("Jump");
28    SoundEffect hitAani = LoadSoundEffect("ouch");
29    SoundEffect jupAani = LoadSoundEffect("jup");
30
31
32
33    public override void Begin()
34    {
35        AloitaAlusta();
36    }
37
38    void LuoKentta()
39    {
40        TileMap kentta = TileMap.FromLevelAsset("kentta1");
41        kentta.SetTileMethod('#', LisaaTaso);
42        kentta.SetTileMethod('t', LisaaTahti);
43        kentta.SetTileMethod('p', LisaaPelaaja);
44        kentta.SetTileMethod('v', LisaaVihu);
45        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
46        Level.CreateBorders();
47        Level.Background.CreateGradient(Color.Red, Color.Blue);
48    }
49
50    void LisaaTaso(Vector paikka, double leveys, double korkeus)
51    {
52        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
53        taso.Position = paikka;
54        taso.Color = Color.Green;
55        taso.Image = ruohokuva;
56        Add(taso);
57    }
58
59    void LisaaTahti(Vector paikka, double leveys, double korkeus)
60    {
61        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
62        tahti.IgnoresCollisionResponse = true;
63        tahti.Position = paikka;
64        tahti.Image = tahtiKuva;
65        tahti.Tag = "tahti";
66        Add(tahti);
67    }
68
69    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
70    {
71        pelaaja1 = new PlatformCharacter(leveys, korkeus);
72        pelaaja1.Position = paikka;
73        pelaaja1.Mass = 4.0;
74        pelaaja1.Image = pelaajanKuva;
75        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
76        AddCollisionHandler(pelaaja1, "invader", TormaaVihuun);
77        Add(pelaaja1);
78    }
79
80    void LisaaNappaimet()
81    {
82        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
83        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
84
85        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
86        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
87        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
88        Keyboard.Listen(Key.R, ButtonState.Pressed, AloitaAlusta, "Restart");
89
90        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
91
92        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
93        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
94        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
95
96        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
97    }
98
99    void Liikuta(PlatformCharacter hahmo, double nopeus)
100    {
101        hahmo.Walk(nopeus);
102    }
103
104    void Hyppaa(PlatformCharacter hahmo, double nopeus)
105    {
106        hahmo.Jump(nopeus);
107        jumpAani.Play();
108    }
109
110    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
111    {
112        coinAani.Play();
113        pisteLaskuri.Value += 1;
114        tahti.Destroy();
115
116    }
117    IntMeter pisteLaskuri;
118
119    void LuoPistelaskuri()
120    {
121        pisteLaskuri = new IntMeter(0);
122
123        Label pisteNaytto = new Label();
124        pisteNaytto.X = Screen.Left + 100;
125        pisteNaytto.Y = Screen.Top - 100;
126        pisteNaytto.TextColor = Color.White;
127        pisteNaytto.Color = Color.Blue;
128
129        pisteNaytto.BindTo(pisteLaskuri);
130        Add(pisteNaytto);
131    }
132    void LisaaVihu(Vector paikka, double korkeus, double leveys)
133    {
134        LuoVihuAjastin(paikka, korkeus, leveys);
135        LuoVihu(paikka, korkeus, leveys);
136    }
137
138    void LuoVihu(Vector paikka, double korkeus, double leveys)
139    {
140        PlatformCharacter vihu = new PlatformCharacter(korkeus, leveys);
141        vihu.Tag = "invader";
142        vihu.Position = paikka;
143        vihu.Image = vihukuva;
144        Add(vihu);
145
146        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
147        tasoAivot.Speed = 100;
148
149        vihu.Brain = tasoAivot;
150        tasoAivot.FallsOffPlatforms = true;
151        tasoAivot.JumpSpeed = 700;
152        tasoAivot.TriesToJump = true;
153    }
154
155    void LuoVihuAjastin(Vector paikka, double korkeus, double leveys)
156    {
157        Timer vihuAjastin = new Timer();
158        vihuAjastin.Interval = 3;
159        vihuAjastin.Timeout += delegate
160        {
161            LuoVihu(paikka, korkeus, leveys);
162        };
163        vihuAjastin.Start();
164    }
165
166    void TormaaVihuun(PhysicsObject pelaaja1, PhysicsObject vihu)
167    {
168        if (Math.Abs(pelaaja1.Bottom - vihu.Top) < epsilon)
169        {
170            (pelaaja1 as PlatformCharacter).ForceJump(hyppyNopeus);
171            pisteLaskuri.Value += 1;
172            vihu.Destroy();
173            jupAani.Play();
174        }
175        else
176        { 
177
178            hitAani.Play();
179            AloitaAlusta();
180        }
181    }
182    void AloitaAlusta()
183    {
184        ClearAll();
185        Gravity = new Vector(0, -1000);
186
187        LuoKentta();
188        LisaaNappaimet();
189        LuoPistelaskuri();
190
191        IsFullScreen = true;
192        Camera.Follow(pelaaja1);
193        Camera.ZoomFactor = 1.2;
194        Camera.StayInLevel = true;
195    }
196}
Note: See TracBrowser for help on using the repository browser.