source: 2017/23/KaapoP/Spartalainentetris/Spartalainentetris/Spartalainentetris/Spartalainentetris.cs @ 10334

Revision 8476, 8.3 KB checked in by nupeohje, 2 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 Spartalainentetris : PhysicsGame
10{
11
12    PlatformCharacter pelaaja;
13    Double liikkumismaara = 400;
14    Double ajastinNopeus = 0.8;
15    Image Kuva = LoadImage("Anim01");
16    IntMeter pisteLaskuri;
17    EasyHighScore topLista = new EasyHighScore();
18    MultiSelectWindow valikko;
19    Image taustaKuva = LoadImage("Neon");
20    Image Palikkakuva = LoadImage("Palikkakuva");
21    Image Oikeareuna = LoadImage("Oikeareuna");
22    Image Vasenreuna = LoadImage("Vasenreuna");
23    Image Alareunan = LoadImage("Alareunan");
24    private Image[] ukkelinKavely = LoadImages("Animaatio/anim02", "Animaatio/anim03", "Animaatio/anim04", "Animaatio/anim05", "Animaatio/anim06", "Animaatio/anim07");
25    public Image Idle = LoadImage("anim01");
26
27    public override void Begin()
28    {
29        ClearAll();
30        ajastinNopeus = 0.8;
31        luopelaaja();
32        LuoPistelaskuri();
33        surface();
34        Maa();
35        MaaVasen();
36        MaaOikea();
37        camerazoom();
38        palikkaAjastin(ajastinNopeus);
39        //Timer ajastin = new Timer();
40        //ajastin.Interval = ajastinNopeus;
41        //ajastin.Timeout += delegate { luopalikka(); ajastinNopeus -= 0.5; MessageDisplay.Add(ajastinNopeus.ToString()); };
42        //ajastin.Start();
43        Gravity = new Vector(0.0, -1000.0);
44
45        Timer alareunaAjastin = new Timer();
46        alareunaAjastin.Interval = 2;
47        alareunaAjastin.Timeout += delegate
48        {
49            List<GameObject> palikat = new List<GameObject>();
50
51            int lohkoja = (int)(Level.Width / 40.0);
52            for (int i = 0; i < lohkoja; i++)
53            {
54                double x = i * 40.0 - Level.Width / 2.0 + 40 / 2;
55                double y = Level.Bottom + 20;
56                GameObject palikka = GetObjectAt(new Vector(x, y));
57                if (palikka != null && palikka.Tag.ToString() == "Palikka")
58                {
59                    palikat.Add(palikka);
60                }
61            }
62
63            if (palikat.Count == 25)
64            {
65                foreach(GameObject palikka in palikat)
66                {
67                    palikka.Destroy();
68                }
69
70                List<GameObject> kaikkiPalikat = GetObjectsWithTag("Palikka");
71                foreach(GameObject palikka in kaikkiPalikat)
72                {
73                    if ((palikka as PhysicsObject).Velocity.Magnitude < 0.1)
74                    {
75                        palikka.Y -= 40;
76                    }
77                }
78            }
79        };
80        alareunaAjastin.Start();
81
82        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
83
84        Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaPelaajaa, null, -liikkumismaara);
85        Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaPelaajaa, null, liikkumismaara);
86        Keyboard.Listen(Key.Up, ButtonState.Down, hyppaa, null);
87    }
88    void camerazoom()
89    {
90        Camera.Zoom(0.8);
91        Camera.Follow(pelaaja);
92    }
93    void LiikutaPelaajaa(double nopeus)
94    {
95        pelaaja.Walk(nopeus);
96    }
97    void hyppaa()
98
99    {
100        pelaaja.Jump(500);
101
102    }
103    void luopelaaja()
104    {
105        pelaaja = new PlatformCharacter(20, 80);
106        pelaaja.Mass = 10.0;
107        pelaaja.X = 0;
108        pelaaja.Y = -350;
109        pelaaja.Image = Kuva;
110        pelaaja.Tag = "Pelaaja";
111        Add(pelaaja);
112        pelaaja.Animation = new Animation(ukkelinKavely);
113        pelaaja.Animation.Start();
114        pelaaja.Animation.FPS = 7;
115
116        pelaaja.Animation.StopOnLastFrame = false;
117        pelaaja.AnimWalk = new Animation(ukkelinKavely);
118        pelaaja.AnimIdle = new Animation(Idle);
119        pelaaja.AnimJump = new Animation(Idle);
120        pelaaja.AnimFall = new Animation(Idle);
121
122
123        pelaaja.Collided += (IPhysicsObject a, IPhysicsObject b) =>
124        {
125            if (b.Position.Y > a.Position.Y && b.Velocity.Magnitude > 0 && b.Tag.Equals("Palikka"))
126            {
127                pelaaja.Destroy();
128                Pause();
129                AvaaValikko();
130
131                topLista.EnterText = "Onnea! Kirjoita nimesi. Sait {0} pistettä";
132                topLista.EnterAndShow(pisteLaskuri.Value);
133            }
134        };
135    }
136    void AvaaValikko()
137    {
138        valikko = new MultiSelectWindow("Kuolit",
139            "Uudestaan", "Parhaat pisteet", "Lopeta");
140        valikko.ItemSelected += PainettiinValikonNappia;
141        Add(valikko);
142
143    }
144    void PainettiinValikonNappia(int valinta)
145    {
146        switch (valinta)
147        {
148            case 0:
149                Uudestaaan();
150                break;
151            case 1:
152                topLista.Show();
153                topLista.HighScoreWindow.Closed += delegate { AvaaValikko(); };
154                break;
155            case 2:
156                Exit();
157                break;
158        }
159    }
160    void Uudestaaan()
161    {
162        Pause();
163        Begin();
164    }
165    void LuoPistelaskuri()
166    {
167        pisteLaskuri = new IntMeter(0);
168
169        Label pisteNaytto = new Label();
170        pisteNaytto.X = Screen.Left + 100;
171        pisteNaytto.Y = Screen.Top - 100;
172        pisteNaytto.TextColor = Color.Aqua;
173        pisteNaytto.Color = Color.FromHexCode("404040");
174
175        pisteNaytto.BindTo(pisteLaskuri);
176        Add(pisteNaytto);
177        Timer pisteAjastin = new Timer();
178        pisteAjastin.Interval = 1;
179        pisteAjastin.Timeout += delegate { pisteLaskuri.Value += 1; };
180        pisteAjastin.Start();
181
182       
183
184    }
185    void surface()
186    {
187        Surface alaReuna = Surface.CreateBottom(Level);
188        Add(alaReuna, 0);
189        Surface oikea = Surface.CreateRight(Level);
190        Add(oikea);
191        Surface vasen = Surface.CreateLeft(Level);
192        Add(vasen);
193        alaReuna.Restitution = 0;
194        Level.Background.Image = taustaKuva;
195        Level.Background.FitToLevel();
196        Level.Background.Color = Color.FromHexCode("404040");
197    }
198    void Maa()
199    {
200        GameObject Maa = new GameObject(1000, 100.0);
201
202        Add(Maa, 1);
203        Maa.X = 0;
204        Maa.Y = Level.Bottom - 50;
205        Maa.Image = Alareunan;
206
207    }
208    void MaaVasen()
209    {
210        GameObject MaaVasen = new GameObject(100, 1000);
211        Add(MaaVasen, 1);
212        MaaVasen.X = Level.Left - 50;
213        MaaVasen.Y = 0;
214        MaaVasen.Image = Vasenreuna;
215
216    }
217    void MaaOikea()
218    {
219        GameObject MaaOikea = new GameObject(100, 1000);
220        Add(MaaOikea, 1);
221        MaaOikea.X = Level.Right + 50;
222        MaaOikea.Y = 0;
223        MaaOikea.Image = Oikeareuna;
224    }
225    void luopalikka()
226    {
227        PhysicsObject Palikka = PhysicsObject.CreateStaticObject(40.0, 40.0);
228
229        Color vari = RandomGen.NextColor(Color.Mint, Color.HotPink);
230        Palikka.Color = vari;
231        Add(Palikka);
232        //Palikka.X = RandomGen.NextDouble(Level.Left + 20, Level.Right - 20);
233        int lohkoja = (int)(Level.Width / 40.0);
234        Palikka.X = RandomGen.NextInt(0, lohkoja) * 40.0 - Level.Width / 2.0 + 40 / 2;
235        Palikka.Y = 700.0;
236        Palikka.Velocity = new Vector(0, -300);
237        Palikka.Tag = "Palikka";
238        Palikka.Image = Palikkakuva;
239
240        Timer ajastin = new Timer();
241        ajastin.Interval = 0.02;
242        ajastin.Timeout += delegate
243        {
244            List<GameObject> palikat = GetObjectsAt(Palikka.Position + new Vector(0, -22));
245            //List<GameObject> palikatVasen = GetObjectsAt(Palikka.Position + new Vector(-19, -22));
246            //List<GameObject> palikatOikea = GetObjectsAt(Palikka.Position + new Vector(19, -22));
247
248            if (palikat.Count > 1 && !palikat[1].Tag.Equals("Pelaaja")) //|| palikat.Count > 1)
249            {
250                Palikka.Velocity = new Vector(0, 0);
251                ajastin.Stop();
252            }
253        };
254
255        ajastin.Start();
256    }
257    void palikkaAjastin(Double _aika)
258    {
259        Timer.SingleShot(_aika, delegate {
260            luopalikka();
261            if(ajastinNopeus > 0.139)
262            ajastinNopeus -= 0.019;
263            //MessageDisplay.Add(ajastinNopeus.ToString());
264            palikkaAjastin(ajastinNopeus);
265        });
266    }
267}
Note: See TracBrowser for help on using the repository browser.