source: 2015/koodauskerho/AarniAR/GunDown/GunDown/GunDown/GunDown.cs @ 7255

Revision 7255, 7.5 KB checked in by aajualal, 5 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 GunDown : PhysicsGame
10{
11    const double nopeus = 200;
12    const double hyppyNopeus = 750;
13    const int RUUDUN_KOKO = 40;
14
15    PlatformCharacter pelaaja1;
16    PlasmaCannon pelaajan1Ase;
17    GameObject kursori;
18
19    Image pelaajanKuva = LoadImage("MainChar");
20    Image[] pelaajarunkuva = LoadImages("MainCharRun1", "MainCharRun2");
21    Image tahtiKuva = LoadImage("DiamondGem");
22    Image aseenkuvaOikea = LoadImage("Revolver");
23    Image aseenkuvaVasen = LoadImage("RevolverLft");
24    Image cursorinkuva = LoadImage("Cursor");
25    Image bulletKuva = LoadImage("RevBullet");
26    Image boxkuva = LoadImage("Box");
27    Image pelaajajumpKuva = LoadImage("MainCharJump");
28    Image bombKuva = LoadImage("Bomb");
29    Image crackstoneKuva = LoadImage("CrackedStone");
30    Image exitKuva = LoadImage("CaveExit");
31    Image stoneKuva = LoadImage("Stone");
32    Image topKuva = LoadImage("StoneTop");
33
34    SoundEffect maaliAani = LoadSoundEffect("maali");
35
36    public override void Begin()
37    {
38        Gravity = new Vector(0, -1000);
39
40        SmoothTextures = false;
41
42        LuoKentta();
43
44        LisaaNappaimet();
45
46        Camera.Follow(pelaaja1);
47        Camera.ZoomFactor = 2.2;
48        Camera.StayInLevel = true;
49    }
50
51    void LuoKentta()
52    {
53        TileMap kentta = TileMap.FromLevelAsset("kentta1");
54        kentta.SetTileMethod('#', LisaaTaso);
55        kentta.SetTileMethod('*', LisaaTahti);
56        kentta.SetTileMethod('N', LisaaPelaaja);
57        kentta.SetTileMethod('E', LisaaExit);
58        kentta.SetTileMethod('S', LisaaCrackStone);
59        kentta.SetTileMethod('T', LisaaStonetop);
60        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
61        Level.CreateBorders();
62        Level.Background.Color = (Color.DarkGray);
63
64
65
66        kursori = new GameObject(20, 20);
67        kursori.Image = cursorinkuva;
68        Add(kursori);
69    }
70
71    void LisaaTaso(Vector paikka, double leveys, double korkeus)
72    {
73        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
74        taso.Position = paikka;
75        taso.Image = stoneKuva;
76        Add(taso);
77    }
78
79    void LisaaTahti(Vector paikka, double leveys, double korkeus)
80    {
81        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
82        tahti.IgnoresCollisionResponse = true;
83        tahti.Position = paikka;
84        tahti.Image = tahtiKuva;
85        tahti.Tag = "tahti";
86        Add(tahti);
87    }
88
89    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
90    {
91        pelaaja1 = new PlatformCharacter(leveys, korkeus);
92        pelaaja1.Position = paikka;
93        pelaaja1.Mass = 4.0;
94        pelaaja1.AnimIdle = pelaajanKuva;
95        pelaaja1.AnimWalk = new Animation(pelaajarunkuva);
96        pelaaja1.AnimWalk.FPS = 5;
97        pelaaja1.AnimJump = pelaajajumpKuva;
98
99        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
100        Add(pelaaja1);
101
102        pelaajan1Ase = new PlasmaCannon(18, 10);
103        pelaajan1Ase.InfiniteAmmo = true;
104        pelaajan1Ase.Image = aseenkuvaOikea;
105        pelaajan1Ase.FireRate = 3;
106        pelaajan1Ase.X = 3;
107        pelaajan1Ase.Y = -3;
108        pelaajan1Ase.ProjectileCollision = AmmusOsui;
109
110        pelaaja1.Add(pelaajan1Ase);
111
112    }
113
114    void LisaaNappaimet()
115    {
116        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
117        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
118
119        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
120        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
121        Keyboard.Listen(Key.Space, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
122        Keyboard.Listen(Key.E, ButtonState.Pressed, AsetaPommi, "Pelaaja asettaa pommin", pelaaja1);
123        Mouse.ListenMovement(0.1, Tahtaa, "Tähtää aseella");
124        Mouse.Listen(MouseButton.Left, ButtonState.Down, AmmuAseella, "Pelaaja Ampuu", pelaajan1Ase);
125
126
127
128        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
129
130        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
131        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
132        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
133
134        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
135    }
136
137    void Liikuta(PlatformCharacter hahmo, double nopeus)
138    {
139        hahmo.Walk(nopeus);
140    }
141
142    void Hyppaa(PlatformCharacter hahmo, double nopeus)
143    {
144        hahmo.Jump(nopeus);
145    }
146
147    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
148    {
149        maaliAani.Play();
150        MessageDisplay.Add("Keräsit tähden!");
151        tahti.Destroy();
152    }
153    void Tahtaa(AnalogState hiirenLiike)
154    {
155        Vector suunta = (Mouse.PositionOnWorld - pelaajan1Ase.AbsolutePosition).Normalize();
156        pelaajan1Ase.Angle = suunta.Angle;
157
158        kursori.Position = Mouse.PositionOnWorld;
159        if (kursori.X < pelaaja1.X)
160        {
161            pelaajan1Ase.Image = aseenkuvaVasen;
162        }
163        else
164        {
165            pelaajan1Ase.Image = aseenkuvaOikea;
166        }
167    }
168    void AmmuAseella(PlasmaCannon ase)
169    {
170        PhysicsObject ammus = ase.Shoot();
171        //TimeSpan aika = new TimeSpan(0, 0, 2);
172        //ammus.MaximumLifetime = aika;
173
174
175        if (ammus != null)
176        {
177            ammus.Size *= 1;
178            ammus.Image = bulletKuva;
179            ammus.MaximumLifetime = TimeSpan.FromSeconds(0.5);
180        }
181    }
182    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
183    {
184        ammus.Destroy();
185    }
186    void LisaaCrackStone(Vector paikka, double leveys, double korkeus)
187    {
188        PhysicsObject cstone = PhysicsObject.CreateStaticObject(leveys, korkeus);
189        cstone.Position = paikka;
190        cstone.Image = crackstoneKuva;
191        cstone.Tag = "CrackStone";
192        Add(cstone);
193    }
194
195    void AsetaPommi(PlatformCharacter pelaaja1)
196    {
197        LisaaPommi();
198
199    }
200    void LisaaPommi()
201    {
202        PhysicsObject pommi = new PhysicsObject(20, 20);
203        pommi.Position = pelaaja1.Position;
204        pommi.Image = bombKuva;
205        Add(pommi);
206        Timer.SingleShot(1.0, delegate { rajahda(pommi); });
207    }
208    void rajahda(PhysicsObject pommi)
209    {
210        Explosion rajahdys = new Explosion(100);
211        rajahdys.Position = pommi.Position;
212        rajahdys.ShockwaveReachesObject += tuhoacrackseina;
213        Add(rajahdys);
214        pommi.Destroy();
215
216
217    }
218    void tuhoacrackseina(IPhysicsObject CrackStone, Vector suunta)
219    {
220
221        if ((string)CrackStone.Tag == "CrackStone")
222        {
223            CrackStone.Destroy();
224        }
225
226    }
227    void LisaaExit(Vector paikka, double leveys, double korkeus)
228    {
229        PhysicsObject exit = PhysicsObject.CreateStaticObject(leveys, korkeus);
230        exit.Position = paikka;
231        exit.Image = exitKuva;
232        Add(exit);
233    }
234    void LisaaStonetop(Vector paikka, double leveys, double korkeus)
235    {
236        PhysicsObject top = PhysicsObject.CreateStaticObject(leveys, korkeus);
237        top.Position = paikka;
238        top.Image = topKuva;
239        Add(top);
240    }
241}
Note: See TracBrowser for help on using the repository browser.