source: 2015/24/JustusL/1D peli/1D peli/_1D_peli.cs @ 6070

Revision 6070, 7.5 KB checked in by juleppaa, 6 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
9public class _1D_peli : PhysicsGame
10{
11    EasyHighScore topLista = new EasyHighScore();
12    IntMeter elamaLaskuri;
13    IntMeter pisteLaskuri;
14    Timer vaikeus; 
15    Color[] varit = new Color[] { Color.Yellow, Color.Black, Color.Red, Color.White };
16    const double ACTIVE_AREA_HEIGHT = 30.0;
17    const double KORKEUS = 350.0;
18
19    Vector alkunopeus = new Vector(0, 110);
20    Vector nopeus = new Vector(0, 110);
21    //double kerroin = 1.25;
22    Boolean peliKaynnissa = false;
23
24    public override void Begin()
25    {
26
27        SetWindowSize((int)Screen.Width, (int)Screen.Height);
28        Level.Width = (int)Screen.Width;
29        Level.Height = (int)Screen.Height;
30
31        //PalkinAjastin();
32        LuoPalkki();
33        LuoMaali();
34        LuoPisteet();
35        Ohjaimet();
36        ElamaLaskuri();
37        NopeusAjastin();
38
39        peliKaynnissa = true;
40
41        MediaPlayer.IsRepeating = true;
42        MediaPlayer.Play("asd");
43
44        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
45        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
46        ControllerOne.Listen(Button.Back, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
47    }
48
49    void LuoPalkki()
50    {
51        //ajastin.Interval = ajastin.Interval * 0.99;
52
53        PhysicsObject palkki = PhysicsObject.CreateStaticObject(Level.Width, 100.0);
54        palkki.MaximumLifetime = TimeSpan.FromSeconds(10);
55        Add(palkki);
56        palkki.Position = new Vector(0, Level.Bottom);
57        palkki.Velocity = nopeus;
58        palkki.Color = varit[RandomGen.NextInt(varit.Length)];
59    }
60
61    //void PalkinAjastin()
62    //{
63    //    ajastin = new Timer();
64    //    ajastin.Interval = 1; // ajastimen aika sec.
65    //    ajastin.Timeout += LuoPalkki;
66    //    ajastin.Start();
67
68    //    vaikeus = new Timer();
69    //    vaikeus.Interval = 3;
70    //    vaikeus.Timeout += delegate
71    //    {
72    //        nopeus.Y = nopeus.Y * kerroin;
73    //        kerroin += 0.14;
74
75    //        List<GameObject> fysiikkaOliot = GetObjects(x => x is PhysicsObject);
76
77    //        foreach (PhysicsObject olio in fysiikkaOliot)
78    //        {
79    //            PhysicsObject olioFys = olio as PhysicsObject;
80    //            olio.Velocity = nopeus;
81    //        }
82
83    //        ajastin.Interval = ajastin.Interval - 0.2;
84
85    //    };
86    //    vaikeus.Start(3);
87
88    //}
89    void NopeusAjastin()
90    {
91        vaikeus = new Timer();
92        vaikeus.Interval = 10;
93        vaikeus.Timeout += delegate
94        {
95            //kerroin += 0.14;
96            nopeus.Y = nopeus.Y + 35; 
97        };
98        vaikeus.Start();
99    }
100    protected override void Update(Microsoft.Xna.Framework.GameTime gameTime)
101    {             
102        if (peliKaynnissa)
103        {
104            Boolean test = true;
105           
106            List<GameObject> fysiikkaOliot = GetObjects(x => x is PhysicsObject);
107
108            foreach (PhysicsObject olio in fysiikkaOliot)
109            {
110                PhysicsObject olioFys = olio as PhysicsObject;
111                olio.Velocity = nopeus;
112
113                if (olio.Position.Y <= Level.Bottom + 100.0)
114                {
115                    test = false;
116                }
117            }
118           
119            if (test)
120            {
121                LuoPalkki();
122            }
123
124        }
125        base.Update(gameTime);
126    }
127
128    void LuoMaali()
129    {
130        Vector vasenYla = new Vector(Screen.Left, KORKEUS + ACTIVE_AREA_HEIGHT / 2);
131        Vector vasenAla = new Vector(Screen.Left, KORKEUS + -ACTIVE_AREA_HEIGHT / 2);
132        Vector oikeaYla = new Vector(Screen.Right, KORKEUS + ACTIVE_AREA_HEIGHT / 2);
133        Vector oikeaAla = new Vector(Screen.Right, KORKEUS + -ACTIVE_AREA_HEIGHT / 2);
134
135        LuoLinja(new Vector(0, KORKEUS + ACTIVE_AREA_HEIGHT / 2));
136        LuoLinja(new Vector(0, KORKEUS + -ACTIVE_AREA_HEIGHT / 2));
137    }
138    void Ohjaimet()
139    {
140        Keyboard.Listen(Key.Left, ButtonState.Pressed,
141        Tarkistin, "punainen", Color.Red);
142        Keyboard.Listen(Key.Right, ButtonState.Pressed,
143          Tarkistin, "keltainen", Color.Yellow);
144        Keyboard.Listen(Key.Up, ButtonState.Pressed,
145          Tarkistin, "musta", Color.Black);
146        Keyboard.Listen(Key.Down, ButtonState.Pressed,
147          Tarkistin, "valkoien", Color.White);
148       
149        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, null);
150        ControllerOne.Listen(Button.LeftTrigger, ButtonState.Pressed, ShowControlHelp, null);
151
152        ControllerOne.Listen(Button.Y, ButtonState.Pressed, Tarkistin, "keltainen", Color.Yellow);
153        ControllerOne.Listen(Button.B, ButtonState.Pressed, Tarkistin, "punainen", Color.Red);
154        ControllerOne.Listen(Button.X, ButtonState.Pressed, Tarkistin, "musta", Color.Black);
155        ControllerOne.Listen(Button.A, ButtonState.Pressed, Tarkistin, "valkoinen", Color.White);
156       
157
158    }
159    void Tarkistin(Color vari)
160    {
161        List<GameObject> fysiikkaOliot = GetObjects(x => x is PhysicsObject);
162
163        for (int i = 0; i < fysiikkaOliot.Count; i++)
164        {
165            double upperLineY = KORKEUS + ACTIVE_AREA_HEIGHT / 2;
166            double lowerLineY = KORKEUS - ACTIVE_AREA_HEIGHT / 2;
167
168            if (fysiikkaOliot[i].Top < lowerLineY || fysiikkaOliot[i].Bottom > upperLineY)
169            {
170                // ei alueella
171            }
172            else
173            {
174                if (fysiikkaOliot[i].Color == vari)
175                {
176                    // alueella, väri oikein
177                    // LisaaPisteita()
178                    // elamat++
179                    pisteLaskuri.Value++;
180                    fysiikkaOliot[i].Destroy();
181                }
182                else
183                {
184                    pisteLaskuri.Value--;
185                    elamaLaskuri.Value--;
186                    // alueella, väri väärin
187                }
188            }
189        }
190    }
191
192    void LuoLinja(Vector vector)
193    {
194        GameObject maali = new GameObject(Level.Width, 10);
195        maali.Position = vector;
196        maali.Color = Color.Blue;
197        Add(maali, 3);
198    }
199
200    void LuoPisteet()
201    {
202        pisteLaskuri = new IntMeter(0);
203
204        Label pisteNaytto = new Label();
205        pisteNaytto.X = Screen.Left + 100;
206        pisteNaytto.Y = Screen.Top - 100;
207        pisteNaytto.TextColor = Color.Blue;
208        pisteNaytto.Color = Color.White;
209        pisteNaytto.IntFormatString = "Pisteitä: {0:D3}";
210
211        pisteNaytto.BindTo(pisteLaskuri);
212        Add(pisteNaytto);
213    }
214
215    void Havio() 
216    {
217        peliKaynnissa = false;
218        topLista.EnterAndShow(pisteLaskuri.Value);
219        topLista.HighScoreWindow.Closed += AloitaPeli;
220        Timer.SingleShot(5.0, topLista.HighScoreWindow.Close);
221
222
223        nopeus = alkunopeus;
224    }
225    public void AloitaPeli(Window sender)
226    {
227        ClearAll();
228        Begin();
229    }
230    void ElamaLaskuri()
231    {
232        elamaLaskuri = new IntMeter(25);
233        elamaLaskuri.LowerLimit += Havio;
234
235        Label elamaNaytto = new Label();
236        elamaNaytto.X = Screen.Left + 250;
237        elamaNaytto.Y = Screen.Top - 100;
238        elamaNaytto.TextColor = Color.Blue;
239        elamaNaytto.Color = Color.White;
240        elamaNaytto.IntFormatString = "elamia: {0:D2}";
241
242        elamaNaytto.BindTo(elamaLaskuri);
243        Add(elamaNaytto);
244    }
245
246
247}
Note: See TracBrowser for help on using the repository browser.