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

Revision 9609, 6.1 KB checked in by satovapi, 21 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
128        FollowerBrain seuraajanAivot = new FollowerBrain(pelaaja1);
129
130        vihollinen.Brain = seuraajanAivot;
131        seuraajanAivot.Speed = 1;
132        seuraajanAivot.Active = true;
133        seuraajanAivot.TurnWhileMoving = true;
134
135
136    }
137    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
138    {
139        //ammus.Destroy();
140        if (!(kohde.Tag == "vihollinen")) return;
141        Vihu v = (Vihu)kohde;
142        v.ElamaLaskuri.Value--;
143
144    }
145    void AmmuAseella(AssaultRifle ase)
146    {
147        PhysicsObject ammus = ase.Shoot();
148
149        if (ammus != null)
150        {
151            //ammus.Size *= 3;
152            //ammus.Image = ...
153            //ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
154            //pelaaja1 on PlatformCharacter-tyyppinen
155            pelaaja1.Weapon = new AssaultRifle(30, 10);
156            ammus.MaximumLifetime = TimeSpan.FromSeconds (1000);
157            //Ammusten määrä aluksi:
158            pelaaja1.Weapon.Ammo.Value = 1000;
159
160            //Mitä tapahtuu kun ammus osuu johonkin?
161            pelaaja1.Weapon.ProjectileCollision = AmmusOsui;
162        }
163       
164    }
165
166
167   
168
169    void HeitaKranaatti(PlatformCharacter pelaaja)
170    {
171        Grenade kranu = new Grenade(2.0);
172        kranu.ExplosionRadius = 300;
173        pelaaja.Throw(kranu, Angle.FromDegrees(30), 10000);
174        Add(kranu);
175    }
176       
177       
178    }
179class Vihu : PlatformCharacter
180{
181    private IntMeter elamaLaskuri = new IntMeter(1000, 0, 1000);
182    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
183
184    public Vihu(double leveys, double korkeus)
185        : base(leveys, korkeus)
186    {
187        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
188
189       
190
191    }
192}
Note: See TracBrowser for help on using the repository browser.