source: 2017/23/EetuH/tettris2/tettris2/tettris2/tettris2.cs @ 8480

Revision 8480, 6.0 KB checked in by nupeohje, 2 years ago (diff)

Peli viimestelty

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class tettris2 : PhysicsGame
10{
11    PlatformCharacter2 pallo;
12    IntMeter pistelaskuri;
13    Image ovenkuva = LoadImage("ovi");
14    int kenttalaskuri = 1;
15    public override void Begin()
16    {
17        pallo = Luopallo(new Vector(100.0, 100.0), 100.0, 100.0);
18        Luomaailma();
19        LuoAikaLaskuri();
20        AsetaOhjaimet(pallo);
21       
22        LuoPisteLaskuri();
23    }
24    PlatformCharacter2 Luopallo(Vector paikka, double leveys, double korkeus)
25    {
26        PlatformCharacter2 pallo = new PlatformCharacter2(100.0, 100.0);
27        pallo.Shape = Shape.Circle;
28        pallo.Restitution = 1.0;
29        pallo.Position = paikka;
30        pallo.Mass = 50.0;
31        Image pallonkuva = LoadImage("hahmo");
32        pallo.Image = pallonkuva; 
33        Add(pallo);
34        AddCollisionHandler(pallo, "ovi", PelaajaTormaaOveen);
35        AddCollisionHandler(pallo, "Maali", VoititPelin);
36
37        return pallo;
38       
39    }
40    void Luomaailma()
41    {
42        PhysicsObject seina = Level.CreateBottomBorder();
43        seina.Tag = "seina";
44        seina = Level.CreateLeftBorder();
45        seina.Tag = "seina";
46        seina = Level.CreateRightBorder();
47        seina.Tag = "seina";
48        Gravity = new Vector(0.0, -500);
49
50    }
51    void LuoAikaLaskuri()
52    {
53        Timer aikaLaskuri = new Timer();
54        aikaLaskuri.Interval = 1;
55        aikaLaskuri.Timeout += AikaLoppui;
56        aikaLaskuri.Start();
57       
58       
59    }
60    void AikaLoppui()
61    {
62        PhysicsObject laatikko = PhysicsObject.CreateStaticObject(40.0, 40.0);
63        laatikko.X = RandomGen.NextDouble(Screen.Left + 200, Screen.Right - 20);
64        Add(laatikko);
65        laatikko.Y = Screen.Top;
66        laatikko.Tag = "vihollinen";
67        //AddCollisionHandler(laatikko, PysaytaLaatikko);
68
69        Timer ajastin = new Timer();
70        ajastin.Interval= 0.05;
71        ajastin.Timeout += delegate
72        {
73            laatikko.Velocity = new Vector(0, -300);
74
75            List<GameObject> palikat = GetObjectsAt(laatikko.Position + new Vector(0, -22));
76
77            if (palikat.Contains(pallo))
78            {
79                ClearAll();
80                Begin();
81            }
82
83            //palikat.RemoveAll(o => o.Tag.ToString() != "vihollinen" || o.Tag.ToString() != "seina");
84
85            if (palikat.Count > 1)
86            {
87                laatikko.Stop();
88                ajastin.Stop();
89            }
90        };
91        ajastin.Start();
92
93    }
94    void LaatikonPysahdys(PhysicsObject laatikko, PhysicsObject asiaJohonTormataan)
95    {
96        laatikko.MakeStatic();
97        MessageDisplay.Add("laatikko tormasi");
98
99    }
100    void AsetaOhjaimet(PlatformCharacter2 pallo)
101    {
102
103        Keyboard.Listen(Key.Space, ButtonState.Pressed, Hyppy, "hyppää", pallo);
104        Keyboard.Listen(Key.Left, ButtonState.Down, LiikuVasemmalle, "LiikkuuVasemmalle", pallo);
105        Keyboard.Listen(Key.Right, ButtonState.Down, LiikuOikealle, "liikkuuoikealle", pallo);
106        Keyboard.Listen(Key.A, ButtonState.Down, HeitaKranu, "heittää kranaatin", pallo);
107        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
108    }
109    void Hyppy(PlatformCharacter2 pallo)
110    {
111        pallo.Jump(1000);
112    }
113    void LiikuVasemmalle(PlatformCharacter2 pallo)
114    {
115        pallo.Walk(Direction.Left);
116    }
117    void LiikuOikealle(PlatformCharacter2 pallo)
118    {
119        pallo.Walk(Direction.Right);
120    }
121    void HeitaKranu(PlatformCharacter2 pallo)
122    {
123        Grenade kranu = new Grenade(4.0);
124        pallo.Throw(kranu, Angle.FromDegrees(30), 10000);
125        kranu.Explosion.AddShockwaveHandler("vihollinen", KranaattiOsui);
126    }
127    void KranaattiOsui(IPhysicsObject rajahdyksenKohde, Vector v)
128    {
129        rajahdyksenKohde.Destroy();
130        pistelaskuri.AddValue(1);
131    }
132    void PysaytaLaatikko(PhysicsObject laatikko, PhysicsObject este)
133    {
134        laatikko.Stop();
135        laatikko.IgnoresGravity = true;
136
137        laatikko.Mass = 100;
138    }
139    void LuoPisteLaskuri()
140    {
141        pistelaskuri = new IntMeter(0,0,15);
142        pistelaskuri.UpperLimit += LuoOvi;
143        Label pisteNaytto = new Label();
144        pisteNaytto.X = Screen.Left + 100;
145        pisteNaytto.Y = Screen.Top - 100;
146        pisteNaytto.TextColor = Color.Black;
147        pisteNaytto.Color = Color.White;
148
149        pisteNaytto.BindTo(pistelaskuri);
150        Add(pisteNaytto);
151
152    }
153    void LuoOvi()
154    {
155    PhysicsObject ovi = new PhysicsObject(50.0, 50.0);
156    Add(ovi);
157    ovi.MakeStatic();
158    ovi.Color = Color.AshGray;
159    ovi.Tag = "ovi";
160    ovi.Image = ovenkuva;
161    }
162    void PelaajaTormaaOveen(PhysicsObject pallo, PhysicsObject ovi)
163    {
164        ClearAll();
165        UusiMaailma();
166    }
167    void LuoTaso(Vector paikka, double leveys, double korkeus)
168    {
169        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
170        taso.Position = paikka;
171       
172        Add(taso);
173
174    }
175    void UusiMaailma()
176    {
177        TileMap ruudut = TileMap.FromLevelAsset("kentta1");
178        ruudut.SetTileMethod('#', LuoTaso);
179        ruudut.SetTileMethod('P', LuoPelaaja);
180        ruudut.SetTileMethod('O', LuoMaali);
181        ruudut.Execute(20, 20);
182        AsetaOhjaimet(pallo);
183        Gravity = new Vector(0.0, -500);
184
185    }
186    void LuoPelaaja(Vector paikka, double leveys, double korkeus)
187    {
188        pallo = Luopallo(paikka, leveys, korkeus);   
189    }
190    void LuoMaali(Vector paikka, double leveys, double korkeus)
191    {
192        PhysicsObject ovi = new PhysicsObject(50.0, 50.0);
193        ovi.Position = paikka;
194        Add(ovi);
195        ovi.MakeStatic();
196        ovi.Color = Color.AshGray;
197        ovi.Tag = "Maali";
198        ovi.Image = ovenkuva;
199    }
200    void VoititPelin(PhysicsObject pallo, PhysicsObject ovi)
201    {
202        MessageDisplay.Add("Voitit Pelin!!" );
203        Pause();
204    }
205
206
207   
208}
Note: See TracBrowser for help on using the repository browser.