source: 2016/26/EmmaH/Peli/DahlianKoira/DahlianKoira/DahlianKoira/DahlianKoira.cs @ 7581

Revision 7581, 6.4 KB checked in by empaheik, 3 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8class Dahlia : PlatformCharacter
9{
10
11    private IntMeter elamaLaskuri = new IntMeter(5, 0, 5);
12    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
13
14    public Dahlia(double leveys, double korkeus)
15        : base (leveys, korkeus)
16    {
17        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
18    }
19}
20
21
22public class DahlianKoira : PhysicsGame
23{
24    Dahlia pelaaja;
25
26    Image pelaajanKuva = LoadImage("herpderp");
27    Image kummituksenKuva = LoadImage("kummituskuva");
28    Image paalyTiilenKuva = LoadImage("stone1");
29    Image tayttoTiilenKuva = LoadImage("stonefill");
30    Image aseenKuva = LoadImage("ase");
31    Image ammuksenKuva = LoadImage("ammo1");
32
33    private Animation dahliaIdlaa;
34    private Animation dahliaHyppaa;
35    private Animation dahliaPutoaa;
36    private Animation dahliaJuoksee;
37
38    public override void Begin()
39    {
40        //Aamupäivä
41        //TODO: Elämämittarin arvo näkyviin (olisi pitänyt tehdä jo eilen, jestas)
42        //...ja ehkä miniräjähdyksiä aina, kun otetaan vahinkoa?
43        //TODO: Koiran poimiminen ylänurkasta
44        //TODO: Äänien lataaminen koiralle + taustamusiikki
45        //TODO: Taustakuvan lataaminen kentälle
46        //TODO: Ovesta pääsee seuraavaan tasoon
47
48        AlustaAnimaatiot();
49        LuoKentta();
50        LisaaOhjaimet();
51        LuoKummitukset();
52
53        //Iltapäivä
54        //TODO: Alku- ja loppuvalikot
55        //TODO: Liikkuvia platformeja
56        //TODO: Metodi otadamagea, joka tekisi kaiken kivasti
57        //TODO: Ajastettuja tapahtumia?
58
59        //Perjantaina aamupäivällä
60        //TODO: Miten jatkan pelin tekemistä kotona?
61        //TODO: Miten saan pelistä version, jota kaveri voi käyttää kivasti?
62        //TODO: Efektejä
63    }
64
65    void AlustaAnimaatiot()
66    {
67        dahliaIdlaa = LoadAnimation("idle");
68        dahliaHyppaa = LoadAnimation("jump");
69        dahliaPutoaa = LoadAnimation("fallfall");
70        dahliaJuoksee = LoadAnimation("runrun");
71    }
72
73    void LuoKummitukset()
74    {
75        int indeksi = 0;
76        while(indeksi < 19)
77        {
78            double xKoordinaatti = RandomGen.NextDouble(Level.Left + 200, Level.Right - 200);
79            double yKoordinaatti = RandomGen.NextDouble(Level.Bottom + 200, Level.Top - 200);
80            LuoKummitus(new Vector(xKoordinaatti, yKoordinaatti), 60, 60);
81
82            indeksi++;
83        }
84    }
85
86    void LuoKummitus(Vector paikka, double b, double c)
87    {
88        PhysicsObject kummitus = new PhysicsObject(b, c);
89        kummitus.Position = paikka;
90        kummitus.Image = kummituksenKuva;
91        kummitus.IgnoresCollisionResponse = true;
92        kummitus.Tag = "kummitus";
93        Add(kummitus, 3);
94
95        //FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja");
96        RandomMoverBrain aivot = new RandomMoverBrain(100);
97        aivot.WanderRadius = 200;
98        kummitus.Brain = aivot;
99    }
100
101    void LuoKentta()
102    {
103        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("kentta1");
104        ruudut.SetTileMethod(Color.Black, LuoTaso, paalyTiilenKuva);
105        ruudut.SetTileMethod(Color.FromHexCode("303030"), LuoTaso, tayttoTiilenKuva);
106        ruudut.SetTileMethod(Color.FromHexCode("FFD800"), LuoPelaaja);
107        ruudut.SetTileMethod(Color.FromHexCode("00FF21"), LuoAse);
108        //ruudut.SetTileMethod(Color.Red, LuoKummitus);
109        ruudut.Execute(80, 80);
110
111        Camera.Follow(pelaaja);
112        Camera.StayInLevel = true;
113
114        Level.Background.Color = Color.Brown;
115        Gravity = new Vector(0, -1000);
116    }
117
118    void LuoAse(Vector paikka, double leveys, double korkeus)
119    {
120        PhysicsObject ase = new PhysicsObject(leveys/2, korkeus/2);
121        ase.Position = paikka;
122        ase.Image = aseenKuva;
123        ase.Tag = "plasmakanuuna";
124        Add(ase);
125    }
126
127    void LisaaOhjaimet()
128    {
129        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "", 400.0);
130        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "", -400.0);
131        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "");
132
133        Keyboard.Listen(Key.Space, ButtonState.Pressed, Ammu, "Ammu plasmapanoksia");
134
135        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Sulje peli");
136    }
137
138    void Ammu()
139    {
140        PhysicsObject ammus = pelaaja.Weapon.Shoot();
141
142        if(ammus != null)
143        {
144            ammus.Size *= 3;
145            ammus.Image = ammuksenKuva;
146        }
147       
148    }
149
150    void LuoPelaaja(Vector paikka, double leveys, double korkeus)
151    {
152        pelaaja = new Dahlia(leveys, korkeus * 1.5);
153        pelaaja.Image = pelaajanKuva;
154        pelaaja.Position = paikka;
155        pelaaja.LinearDamping = 1;
156        pelaaja.Tag = "pelaaja";
157        pelaaja.AnimIdle = dahliaIdlaa;
158        pelaaja.AnimWalk = dahliaJuoksee;
159        pelaaja.AnimJump = dahliaHyppaa;
160        pelaaja.AnimFall = dahliaPutoaa;
161        Add(pelaaja);
162
163        AddCollisionHandler(pelaaja, "kummitus", PelaajaTormaaKummitukseen);
164        AddCollisionHandler(pelaaja, "plasmakanuuna", PelaajaPoimiiAseen);
165    }
166
167    void PelaajaTormaaKummitukseen(PhysicsObject tormaaja, PhysicsObject vihu)
168    {
169        pelaaja.ElamaLaskuri.Value--;
170        //Timer.SingleShot(3, Exit);
171    }
172
173    void PelaajaPoimiiAseen(PhysicsObject tormaaja, PhysicsObject kohde)
174    {
175        pelaaja.Weapon = new AssaultRifle(30, 30);
176        pelaaja.Weapon.Image = kohde.Image; // tai pelaaja.Weapon.Image = aseenkuva
177        //pelaaja.Weapon.Position += new Vector(-5, 20);
178        pelaaja.Weapon.ProjectileCollision = AmmusOsui;
179        //pelaaja.Wea
180        kohde.Destroy();
181    }
182
183    void AmmusOsui(PhysicsObject tormaaja, PhysicsObject tormatty)
184    {
185        tormaaja.Destroy();
186        if(tormatty.Tag == "kummitus")
187        {
188            tormatty.Destroy();
189        }
190    }
191
192    void LuoTaso(Vector paikka, double leveys, double korkeus, Image kuva)
193    {
194        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
195        taso.Position = paikka;
196        taso.Image = kuva;
197        Add(taso);
198    }
199
200    void Hyppaa()
201    {
202        pelaaja.Jump(600);
203    }
204
205    void Liikuta(double nopeus)
206    {
207        pelaaja.Walk(nopeus);
208    }
209
210
211}
Note: See TracBrowser for help on using the repository browser.