source: 2018/23/SAMPOP/FMM/FMM/FMM.cs @ 9624

Revision 9624, 6.8 KB checked in by satovapi, 22 months ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Widgets;
7
8public class FMM : PhysicsGame
9{
10    const double nopeus = 200;
11    const double hyppyNopeus = 750;
12    const int RUUDUN_KOKO = 40;
13
14    PlatformCharacter pelaaja1;
15    AssaultRifle pelaajan1Ase;
16
17    Image pelaajanKuva = LoadImage("norsu");
18    Image tahtiKuva = LoadImage("tahti");
19
20    SoundEffect maaliAani = LoadSoundEffect("maali");
21
22    public override void Begin()
23    {
24        Gravity = new Vector(0, -1000);
25
26        LuoKentta();
27        LisaaNappaimet();
28
29        Camera.Follow(pelaaja1);
30        Camera.ZoomFactor = 1.2;
31        Camera.StayInLevel = true;
32    }
33
34    void LuoKentta()
35    {
36        TileMap kentta = TileMap.FromLevelAsset("kentta1");
37        kentta.SetTileMethod('#', LisaaTaso);
38        kentta.SetTileMethod('*', Lisaakolikko);
39        kentta.SetTileMethod('N', LisaaPelaaja);
40        kentta.SetTileMethod('A', LisaaVihollinen);
41        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
42        Level.CreateBorders();
43        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
44    }
45
46    void LisaaTaso(Vector paikka, double leveys, double korkeus)
47    {
48        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
49        taso.Position = paikka;
50        taso.Color = Color.JungleGreen;
51        Add(taso);
52    }
53
54    void Lisaakolikko(Vector paikka, double leveys, double korkeus)
55    {
56        PhysicsObject kolikko = PhysicsObject.CreateStaticObject(leveys, korkeus);
57        kolikko.IgnoresCollisionResponse = true;
58        kolikko.Position = paikka;
59        kolikko.Color = Color.Gold;
60        kolikko.Shape = Shape.Circle;
61        kolikko.Tag = "kolikko";
62        Add(kolikko);
63    }
64
65    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
66    {
67        pelaaja1 = new PlatformCharacter(leveys, korkeus);
68        pelaaja1.Position = paikka;
69        pelaaja1.Mass = 4.0;
70        pelaaja1.Image = pelaajanKuva;
71        AddCollisionHandler(pelaaja1, "kolikko", Tormaakolikkoon);
72        Add(pelaaja1);
73        pelaajan1Ase = new AssaultRifle(30, 10);
74
75
76        pelaajan1Ase.Ammo.Value = 100000;
77        pelaajan1Ase.ProjectileCollision = AmmusOsui;
78        pelaajan1Ase.FireRate = 100;
79        pelaaja1.Add(pelaajan1Ase);
80
81    }
82
83    void LisaaNappaimet()
84    {
85        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
86        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
87        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", pelaajan1Ase);
88        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
89        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
90        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
91        Keyboard.Listen(Key.A, ButtonState.Pressed, HeitaKranaatti, "Heita Kranaatti", pelaaja1);
92        Keyboard.Listen(Key.Z, ButtonState.Pressed, HeitaKranaatti, "Heita Kranaatti", pelaaja1);
93        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
94
95        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
96        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
97        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
98
99        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
100    }
101
102    void Liikuta(PlatformCharacter hahmo, double nopeus)
103    {
104        hahmo.Walk(nopeus);
105    }
106
107    void Hyppaa(PlatformCharacter hahmo, double nopeus)
108    {
109        hahmo.Jump(nopeus);
110    }
111
112    void Tormaakolikkoon(PhysicsObject hahmo, PhysicsObject tahti)
113    {
114        maaliAani.Play();
115        MessageDisplay.Add("Keräsit kolikon!");
116        tahti.Destroy();
117    }
118    void LisaaVihollinen(Vector paikka, double leveys, double korkeus)
119    {
120        Vihu vihollinen = new Vihu(leveys, korkeus);
121        vihollinen.Position = paikka;
122        vihollinen.Mass = 4.0;
123        vihollinen.Image = pelaajanKuva;
124        AddCollisionHandler(vihollinen, "kolikko", Tormaakolikkoon);
125        Add(vihollinen);
126        vihollinen.Tag = "vihollinen";
127       AssaultRifle vihollisenAse = new AssaultRifle(30, 10);
128
129
130        vihollisenAse.Ammo.Value = 100000;
131        vihollisenAse.ProjectileCollision = AmmusOsui;
132        vihollisenAse.FireRate = 1;
133        Add(vihollisenAse);
134        vihollinen.Ajastin = Timer.CreateAndStart(2, () => { VihuAmpuu(vihollinen); });
135        vihollinen.Weapon = vihollisenAse;
136        FollowerBrain seuraajanAivot = new FollowerBrain(pelaaja1);
137
138        vihollinen.Brain = seuraajanAivot;
139        seuraajanAivot.Speed = 100;
140        seuraajanAivot.Active = true;
141        seuraajanAivot.TurnWhileMoving = true;
142       
143
144
145
146    }
147    void VihuAmpuu(Vihu vihu)
148    {
149        vihu.Weapon.Angle = (vihu.Position - pelaaja1.Position).Angle;
150        vihu.Weapon.Shoot();
151    }
152    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
153    {
154        //ammus.Destroy();
155        if (!(kohde.Tag == "vihollinen")) return;
156        Vihu v = (Vihu)kohde;
157        v.ElamaLaskuri.Value--;
158
159    }
160    void AmmuAseella(AssaultRifle ase)
161    {
162        PhysicsObject ammus = ase.Shoot();
163
164        if (ammus != null)
165        {
166            //ammus.Size *= 3;
167            //ammus.Image = ...
168            //ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
169            //pelaaja1 on PlatformCharacter-tyyppinen
170            pelaaja1.Weapon = new AssaultRifle(30, 10);
171            ammus.MaximumLifetime = TimeSpan.FromSeconds (1);
172            //Ammusten määrä aluksi:
173            pelaaja1.Weapon.Ammo.Value = 1000;
174
175            //Mitä tapahtuu kun ammus osuu johonkin?
176            pelaaja1.Weapon.ProjectileCollision = AmmusOsui;
177        }
178       
179    }
180
181
182   
183
184    void HeitaKranaatti(PlatformCharacter pelaaja)
185    {
186        Grenade kranu = new Grenade(2.0);
187        kranu.ExplosionRadius = 3000;
188        pelaaja.Throw(kranu, Angle.FromDegrees(30), 1000);
189        Add(kranu);
190    }
191       
192       
193    }
194class Vihu : PlatformCharacter
195{
196    private IntMeter elamaLaskuri = new IntMeter(500, 0, 500);
197    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
198    public Timer Ajastin;
199    public Vihu(double leveys, double korkeus)
200        : base(leveys, korkeus)
201    {
202        elamaLaskuri.LowerLimit += delegate
203        {
204            this.Destroy();
205            if (Ajastin != null)
206                Ajastin.Stop();
207        };
208
209       
210
211    }
212}
Note: See TracBrowser for help on using the repository browser.