source: 2016/24/SimoR/Aluspeli/Aluspeli/Aluspeli/Aluspeli.cs @ 7350

Revision 7350, 5.2 KB checked in by sieerinn, 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
9class Alus : PhysicsObject
10{
11    public DoubleMeter ElamaLaskuri = new DoubleMeter(100, 0, 100);
12
13    public int AseidenMaara = 4; // Aseiden maksimimäärä.
14    public int ValittuAse;       // Tällä hetkellä valittu ase.
15    public Label AseTeksti;      // Teksti joka näyttää valitun aseen nimen.
16    public Label AseKuva;        // Valitun aseen kuva.
17
18    public Image[] AseKuvat;
19    public string[] AseNimet = { "shotgun", "joku ase", "toinen ase", "sniper" };
20
21    public Alus(double leveys, double korkeus) : base(leveys, korkeus)
22    {
23    }
24
25    public void VaihdaAsetta()
26    {
27        ValittuAse = (ValittuAse + 1) % AseidenMaara;
28        AseTeksti.Text = AseNimet[ValittuAse];
29        AseKuva.Image = AseKuvat[ValittuAse];
30    }
31}
32
33public class Aluspeli : PhysicsGame
34{
35    Alus pelaaja1;
36    Alus pelaaja2;
37    Alus pelaaja3;
38    Alus pelaaja4;
39
40    // Aseiden kuvat ladattuna taulukkoon.
41    Image[] aseKuvat = LoadImages("ase1", "ase2", "ase3", "ase4");
42
43    public override void Begin()
44    {
45        // Lasketaan ikkunan nurkkien sijainnit käyttöliittymää varten.
46        Vector ylaVasen = new Vector(Screen.Left + 100, Screen.Top - 50);
47        Vector alaVasen = new Vector(Screen.Left + 100, Screen.Bottom + 100);
48        Vector ylaOikea = new Vector(Screen.Right - 100, Screen.Top - 50);
49        Vector alaOikea = new Vector(Screen.Right - 100, Screen.Bottom + 100);
50
51        // Luodaan pelaajat.
52        pelaaja1 = LuoAlus(ControllerOne, new Vector(-100, -100), ylaVasen);
53        pelaaja2 = LuoAlus(ControllerTwo, new Vector(100, -100), ylaOikea);
54        pelaaja3 = LuoAlus(ControllerThree, new Vector(-100, 100), alaVasen);
55        pelaaja4 = LuoAlus(ControllerFour, new Vector(100, 100), alaOikea);
56
57        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
58    }
59
60    void Eteenpain(PhysicsObject pelaaja)
61    {
62        pelaaja.Velocity = pelaaja.Angle.GetVector() * 1000;
63    }
64
65    void TattiEteenpain(AnalogState tatti, PhysicsObject pelaaja)
66    {
67        if (tatti.StateVector.Y > 0.1)
68        {
69            Eteenpain(pelaaja);
70        }
71    }
72
73    void Kaanny(PhysicsObject pelaaja, double kulma)
74    {
75        pelaaja.Angle += Angle.FromDegrees(kulma);
76    }
77
78    void TattiKaanny(AnalogState tatti, PhysicsObject pelaaja)
79    {
80        Kaanny(pelaaja, tatti.StateVector.X * -4.0);
81    }
82
83    Alus LuoAlus(GamePad ohjain, Vector paikka, Vector guiPaikka)
84    {
85        Alus pelaaja = new Alus(50, 50);
86        pelaaja.Position = paikka;
87        pelaaja.LinearDamping = 0.5;
88        pelaaja.AngularDamping = 0.5;
89        pelaaja.AseKuvat = aseKuvat;
90        pelaaja.Tag = "alus";
91        Add(pelaaja);
92
93        // Kutsutaan PelaajaKuolee aliohjelmaa kun elämät loppuvat.
94        pelaaja.ElamaLaskuri.LowerLimit += delegate { PelaajaKuolee(pelaaja); };
95
96        // Kutsutaan AlusTormaa aliohjelmaa kun kaksi alusta törmää keskenään.
97        AddCollisionHandler(pelaaja, "alus", AlusTormaa);
98
99        // Luodaan elämäpalkki.
100        ProgressBar elamaPalkki = new ProgressBar(120, 20);
101        elamaPalkki.Position = guiPaikka;
102        elamaPalkki.Color = Color.Black;
103        elamaPalkki.BarColor = Color.Red;
104        elamaPalkki.BindTo(pelaaja.ElamaLaskuri);
105        Add(elamaPalkki);
106
107        // Luodaan kuva, joka näyttää valitun aseen.
108        pelaaja.AseKuva = new Label(30, 30);
109        pelaaja.AseKuva.Image = aseKuvat[0];
110        pelaaja.AseKuva.Position = guiPaikka + new Vector(0, -30);
111        Add(pelaaja.AseKuva);
112
113        // Luodaan teksti, joka näyttää valitun aseen nimen.
114        pelaaja.AseTeksti = new Label(pelaaja.AseNimet[0]);
115        pelaaja.AseTeksti.Position = guiPaikka + new Vector(0, -60);
116        Add(pelaaja.AseTeksti);
117
118        // Lisätään kontrollit.
119        ohjain.ListenAnalog(AnalogControl.LeftStick, 0.1, TattiEteenpain, "", pelaaja);
120        ohjain.ListenAnalog(AnalogControl.RightStick, 0.1, TattiKaanny, "", pelaaja);
121
122        return pelaaja;
123    }
124
125    void PelaajaKuolee(Alus pelaaja)
126    {
127        // Piilotetaan pelaaja.
128        pelaaja.IsVisible = false;
129        pelaaja.IgnoresCollisionResponse = true;
130        pelaaja.IgnoresPhysicsLogics = true;
131
132        Timer.SingleShot(3.0, delegate
133        {
134            // Tuodaan pelaaja takaisin 3 sekunnin kuluttua satunnaiseen paikkaan.
135            pelaaja.IsVisible = true;
136            pelaaja.IgnoresCollisionResponse = false;
137            pelaaja.IgnoresPhysicsLogics = false;
138            pelaaja.ElamaLaskuri.Value = pelaaja.ElamaLaskuri.MaxValue;
139            pelaaja.Position = Level.GetRandomPosition();
140        });
141    }
142
143    void AlusTormaa(PhysicsObject tormaaja, PhysicsObject kohde)
144    {
145        // Tarkistetaan oliko törmäyksen kohde toinen alus.
146        Alus kohdePelaaja = kohde as Alus;
147        if (kohdePelaaja != null)
148        {
149            // Vähennetään törmäyksen kohteelta elämiä.
150            kohdePelaaja.ElamaLaskuri.Value -= RandomGen.NextDouble(10, 50);
151        }
152    }
153}
Note: See TracBrowser for help on using the repository browser.