source: 2017/23/MatiasH/DungeonGame/DungeonGame/DungeonGame/DungeonGame.cs @ 8479

Revision 8479, 7.6 KB checked in by nupeohje, 4 years ago (diff)

Valmis peli.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class DungeonGame : PhysicsGame
10{
11    AssaultRifle pelaajan1Ase;
12    Timer aikaLaskuri;
13    DoubleMeter alaspainLaskuri;
14    Image tyyppi = LoadImage("Tyyppi");
15    Image vihollinenkuva = LoadImage("Vihollinen");
16    Pelaaja jatka;
17
18    public override void Begin()
19    {
20        IsMouseVisible = true;
21        // TODO: Kirjoita ohjelmakoodisi tähän
22        Level.Background.Color = Color.Aquamarine;
23        jatka = new Pelaaja(135.0, 160.0);
24        jatka.Image = tyyppi;
25        Add(jatka);
26        jatka.Tag = "jatka";
27        Vihollisajastin();
28        Gravity = new Vector(0.0, -800.0);
29
30        LuoAikaLaskuri();
31        Mouse.ListenMovement(0.0, Tahtaa, "Tähtää Aseella");
32        LuoNappaimet(jatka);
33        jatka.X = -300;
34        pelaajan1Ase = new AssaultRifle(30, 10);
35        pelaajan1Ase.Ammo.Value = 200;
36        pelaajan1Ase.MaxAmmoLifetime = TimeSpan.FromSeconds(3.0);
37        PhysicsObject lattia = new PhysicsObject(Level.Width, 50);
38        lattia.Y = -200.0;
39        Add(lattia);
40        lattia.MakeStatic();
41        pelaajan1Ase.ProjectileCollision = AmmusOsui;
42        jatka.Weapon = pelaajan1Ase;
43        jatka.Y = -200.0+ jatka.Height/2.0;
44        pelaajan1Ase.X = 0.0 + jatka.Width / 3.0;
45        pelaajan1Ase.Y = 0.0 - 28.0;
46    }
47    void LuoNappaimet(PlatformCharacter jatka)
48    {
49        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
50        Mouse.Listen(MouseButton.Left, ButtonState.Down, AmmuAseella, null, jatka);
51        Keyboard.Listen(Key.Left, ButtonState.Down, Kavele, "Menee Vasemmalle", -300.0);
52        Keyboard.Listen(Key.Right, ButtonState.Down, Kavele, "Menee Oikealle", +300.0);
53
54        Keyboard.Listen(Key.Up, ButtonState.Down, Hyppaa, "Menee Ylos", +100.0);
55           
56    }
57    void LuoAikaLaskuri()
58    {
59        alaspainLaskuri = new DoubleMeter(60
60
61            );
62        aikaLaskuri = new Timer();
63
64        aikaLaskuri.Interval = 0.1;
65        aikaLaskuri.Timeout += LaskeAlaspain;
66
67        aikaLaskuri.Start();
68
69        Label aikaNaytto = new Label();
70        aikaNaytto.TextColor = Color.White;
71        aikaNaytto.DecimalPlaces = 1;
72        aikaNaytto.BindTo(alaspainLaskuri);
73        aikaNaytto.X = Screen.Right - 10.0;
74        aikaNaytto.Y = Screen.Top - 20.0;
75        Add(aikaNaytto);
76
77    }
78
79
80    void AikaLoppui()
81    {
82
83        MessageDisplay.Add("Voitit Pelin!");
84    }
85    void LaskeAlaspain()
86    {
87        alaspainLaskuri.Value -= 0.1;
88        if (alaspainLaskuri.Value <= 0)
89        {
90            MessageDisplay.Add("Voitit Pelin!");
91            aikaLaskuri.Stop();
92
93        }
94
95
96    }
97    void PelaajaanOsuu(PhysicsObject ammus, PhysicsObject kohde)
98    {
99        if (kohde!=null && kohde.Tag.Equals("jatka"))
100        {
101            (kohde as Pelaaja).Elamalaskuri.AddValue(-1);
102            ammus.Destroy();
103            if((kohde as Pelaaja).Elamalaskuri == 0){
104                IsPaused = true;
105                MessageDisplay.Add("Hävisit Pelin");
106
107
108
109            }
110       
111        }
112       
113
114 
115    }
116
117    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
118    {
119        //ammus destroy();
120        if (kohde.Tag.Equals("paahitbox"))
121        {
122            MessageDisplay.Add("Headshot");
123           ( ((kohde as Paa).isanta) as Vihu).Elamalaskuri.AddValue(-2);
124
125        }
126
127        if (kohde.Tag.Equals("Vihollinen"))
128        {
129            (kohde as Vihu).Elamalaskuri.AddValue(-1);
130           
131        }
132       
133    }
134
135    void AmmuAseella(PlatformCharacter jatka)
136    {
137        PhysicsObject ammus = jatka.Weapon.Shoot();
138
139
140        if (ammus != null)
141        {
142
143            //ammus.Size *= 3;
144            //ammus.image = ...
145            //ammus.maximumlifetime = timespan.FromSeconds (2.0);
146
147        }
148   
149    }
150    void Hyppaa(double hyppy)
151    {
152        jatka.Jump(hyppy);
153
154
155    }
156
157
158
159
160
161
162
163    void Tahtaa(AnalogState hiirenLiike)
164    {
165        Vector suunta = (Mouse.PositionOnWorld - jatka.Weapon.AbsolutePosition).Normalize();
166        jatka.Weapon.Angle = suunta.Angle;
167
168
169    }
170    void Teevihollinen(Double x, Double y)
171    {
172
173        Vihu vihollinen = new Vihu(this,135.0, 135.0);
174        vihollinen.Image = vihollinenkuva;
175     
176       
177        Add(vihollinen);
178        vihollinen.Mass = 15.0;
179        vihollinen.X = x;
180        vihollinen.Y = y;
181      vihollinen.Tag = "Vihollinen";
182     vihollinen.Weapon =  new AssaultRifle(30, 10);
183     vihollinen.Weapon.X = vihollinen.Width / 2.0;
184        vihollinen.Weapon.Ammo.Value = 210;
185        Vihollinenampuu(vihollinen);
186        vihollinen.Weapon.ProjectileCollision = PelaajaanOsuu;
187   
188    }
189     
190    void Vihollisajastin()
191    {
192        Timer ajastin = new Timer();
193        ajastin.Interval = 2.5;
194        ajastin.Timeout += delegate {
195            bool vapaaPaikkaLoytynyt = false;
196            while (vapaaPaikkaLoytynyt == false)
197            {
198                Vector arvottuSijainti = new Vector(RandomGen.NextDouble(-500.0, 500.0), -200.0 + 135.0 / 2.0 + 50.0/2.0);
199                if (GetObjectAt(arvottuSijainti, "vihollinen", 135.0 / 2.0) == null && GetObjectAt(arvottuSijainti, "jatka", jatka.Height/ 2.0) == null)
200                {
201
202                    Teevihollinen(arvottuSijainti.X, arvottuSijainti.Y);
203                    vapaaPaikkaLoytynyt = true;
204                }
205            }
206
207        };
208        ajastin.Start();
209
210    }
211   
212   
213
214
215   
216    void Kavele(double suunta)
217    {
218        jatka.Walk(suunta);
219
220
221    }
222    void Vihollinenampuu(Vihu vihollinen)
223    {
224        Timer ampumisajastin = new Timer();
225        ampumisajastin.Interval = 1.1   ;
226        ampumisajastin.Timeout += delegate { 
227            if (vihollinen.Weapon == null)
228            {
229                ampumisajastin.Stop();
230            }
231            vihollinen.Weapon.Angle = (jatka.Position - vihollinen.Weapon.AbsolutePosition).Normalize().Angle; 
232            vihollinen.Weapon.Shoot(); 
233        };
234        ampumisajastin.Start();
235
236
237    }
238}
239class Vihu : PlatformCharacter
240{
241    private IntMeter elamaLaskuri = new IntMeter(5, 0, 5);
242    public IntMeter Elamalaskuri { get { return elamaLaskuri; } }
243
244   Paa paahitbox;
245
246    public Vihu(PhysicsGame peli, double leveys, double korkeus)
247        : base(leveys, korkeus)
248    {
249        elamaLaskuri.LowerLimit += delegate { this.Weapon.Destroy(); paahitbox.Destroy(); this.Destroy(); };
250        paahitbox = new Paa(this,leveys*0.6, korkeus * 0.30);
251        paahitbox.IgnoresCollisionResponse = true;
252        paahitbox.IgnoresGravity = true;
253        peli.Add(paahitbox);
254        paahitbox.MakeStatic();
255        paahitbox.Tag = "paahitbox";
256        paahitbox.Color = Color.Transparent;
257   
258   
259    }
260
261    public override void Update(Time time)
262    {
263        base.Update(time);
264
265        paahitbox.Y = this.Top-18;
266        paahitbox.X = this.X;
267    }
268
269
270}
271
272class Paa : PhysicsObject
273{
274    public Vihu isanta { get; set; }
275 public Paa(Vihu isantavihu, double leveys, double korkeus)
276        : base(leveys, korkeus){
277     isanta = isantavihu;
278
279
280 }
281
282}
283
284
285class Pelaaja : PlatformCharacter
286{
287    private IntMeter elamaLaskuri = new IntMeter(5, 0, 5);
288    public IntMeter Elamalaskuri { get { return elamaLaskuri; } }
289
290   
291
292    public Pelaaja(double leveys, double korkeus)
293        : base(leveys, korkeus)
294    {
295        elamaLaskuri.LowerLimit += delegate { this.Destroy();  };
296       
297    }
298
299}
300
301 
Note: See TracBrowser for help on using the repository browser.