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

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