source: 2015/27/PietuR/SoHaG/SoHaG/SoHaG/SoHaG.cs @ 6604

Revision 6604, 7.7 KB checked in by pimaeeru, 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 SoHaG : PhysicsGame
10{
11    int Kenttia = 3;
12
13    Image SeinanKuva = LoadImage("Seina1");
14    Image Seinan2Kuva = LoadImage("Seina2");
15    Image Tyypin1Kuva = LoadImage("Tyyppi1");
16    Image Tyypin2Kuva = LoadImage("Tyyppi2");
17    Image Tyypin3Kuva = LoadImage("Tyyppi3");
18    Image Tyypin4Kuva = LoadImage("Tyyppi4");
19    Image NappulanKuva = LoadImage("Nappula");
20    Image ValonKuva = LoadImage("Valo");
21    Image LattianKuva = LoadImage("Lattia");
22    Image LaatanKuva = LoadImage("Lattialaatta");
23
24    PhysicsObject Tyyppi1;
25    PhysicsObject Tyyppi2;
26    PhysicsObject Tyyppi3;
27    PhysicsObject Tyyppi4;
28
29    List<Vector> Spawnit = new List<Vector>();
30    List<Vector> VihuSpawnit = new List<Vector>();
31
32    public override void Begin()
33    {
34       
35        LuoKentta(RandomGen.NextInt(1, Kenttia+1));
36        Tyyppi1 = Luotyyppi(Tyypin1Kuva);
37        Tyyppi2 = Luotyyppi(Tyypin2Kuva);
38        Tyyppi3 = Luotyyppi(Tyypin3Kuva);
39        Tyyppi4 = Luotyyppi(Tyypin4Kuva);
40
41        LuoVihu();
42        LuoVihu();
43        LuoVihu();
44
45        Timer näkyvyysAjastin = new Timer();
46        näkyvyysAjastin.Interval = 0.05;
47        näkyvyysAjastin.Timeout += delegate
48        {
49            Tarkistanakyvyys(Tyyppi1);
50            Tarkistanakyvyys(Tyyppi2);
51            Tarkistanakyvyys(Tyyppi3);
52            Tarkistanakyvyys(Tyyppi4);
53        };
54        näkyvyysAjastin.Start();
55
56        Keyboard.Listen(Key.Up, ButtonState.Down, Liikuta, "Liikuttaa pelaajaa1", Tyyppi1, Direction.Up);
57        Keyboard.Listen(Key.Down, ButtonState.Down, Liikuta, "Liikuttaa pelaajaa1", Tyyppi1, Direction.Down);
58        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikuttaa pelaajaa1", Tyyppi1, Direction.Left);
59        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikuttaa pelaajaa1", Tyyppi1, Direction.Right);
60
61        Keyboard.Listen(Key.W, ButtonState.Down, Liikuta, "Liikuttaa pelaajaa2", Tyyppi2, Direction.Up);
62        Keyboard.Listen(Key.S, ButtonState.Down, Liikuta, "Liikuttaa pelaajaa2", Tyyppi2, Direction.Down);
63        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikuttaa pelaajaa2", Tyyppi2, Direction.Left);
64        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikuttaa pelaajaa2", Tyyppi2, Direction.Right);
65
66        Keyboard.Listen(Key.I, ButtonState.Down, Liikuta, "Liikuttaa pelaajaa3", Tyyppi3, Direction.Up);
67        Keyboard.Listen(Key.K, ButtonState.Down, Liikuta, "Liikuttaa pelaajaa3", Tyyppi3, Direction.Down);
68        Keyboard.Listen(Key.J, ButtonState.Down, Liikuta, "Liikuttaa pelaajaa3", Tyyppi3, Direction.Left);
69        Keyboard.Listen(Key.L, ButtonState.Down, Liikuta, "Liikuttaa pelaajaa3", Tyyppi3, Direction.Right);
70
71        Keyboard.Listen(Key.NumPad8, ButtonState.Down, Liikuta, "Liikuttaa pelaajaa4", Tyyppi4, Direction.Up);
72        Keyboard.Listen(Key.NumPad5, ButtonState.Down, Liikuta, "Liikuttaa pelaajaa4", Tyyppi4, Direction.Down);
73        Keyboard.Listen(Key.NumPad4, ButtonState.Down, Liikuta, "Liikuttaa pelaajaa4", Tyyppi4, Direction.Left);
74        Keyboard.Listen(Key.NumPad6, ButtonState.Down, Liikuta, "Liikuttaa pelaajaa4", Tyyppi4, Direction.Right);
75
76        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
77    }
78
79    void Liikuta(PhysicsObject Tyyppi, Direction Suunta)
80    {
81        Tyyppi.Push(Suunta.GetVector()*3000);
82        Tyyppi.Angle = Tyyppi.Velocity.Angle+Angle.FromDegrees(90);
83    }
84
85    void LuoKentta(int KenttaNumero)
86    {
87        Spawnit.Clear();
88        VihuSpawnit.Clear();
89
90        ColorTileMap Ruudut = ColorTileMap.FromLevelAsset("Kenttä"+KenttaNumero);
91        Ruudut.SetTileMethod(Color.FromHexCode("0026FF"), LuoTyypinpaikka);
92        Ruudut.SetTileMethod(Color.Black, LuoSeina);
93        Ruudut.SetTileMethod(Color.FromHexCode("7F0000"), LuoSeina2);
94        Ruudut.SetTileMethod(Color.FromHexCode("FF6A00"), LuoNappula);
95        Ruudut.SetTileMethod(Color.Red, LuoVihunpaikka);
96        Ruudut.Execute(20, 20);
97        Level.Background.Image = LaatanKuva;
98        Level.Background.Color = Color.Black;
99        Level.Background.TileToLevel();
100        Level.Background.TextureWrapSize = new Vector(Ruudut.ColumnCount, Ruudut.RowCount);
101
102        GameObject Pimeys = new GameObject(Level.Width, Level.Height);
103        Pimeys.Color = new Color(0, 0, 0, 210);
104        Add(Pimeys, 2);
105    }
106
107    void LuoSeina(Vector Paikka, double leveys, double korkeus)
108    {
109        PhysicsObject Seina = PhysicsObject.CreateStaticObject(leveys, korkeus);
110        Seina.Position = Paikka;
111        Seina.Image = SeinanKuva;
112        Add(Seina);
113    }
114    void LuoSeina2(Vector Paikka, double leveys, double korkeus)
115    {
116        PhysicsObject Seina2 = PhysicsObject.CreateStaticObject(leveys, korkeus);
117        Seina2.Position = Paikka;
118        Seina2.Image = Seinan2Kuva;
119        Add(Seina2);
120    }
121    void LuoVihu()
122    {
123        PhysicsObject Vihu = new PhysicsObject(319 * 0.1, 218 * 0.1);
124        Vihu.LinearDamping = 0.5;
125        Vihu.AngularDamping = 0.7;
126        Vihu.Image = Tyypin4Kuva;
127        Vihu.Shape = Shape.Circle;
128        Vector Paikka = RandomGen.SelectOne<Vector>(VihuSpawnit);
129        VihuSpawnit.Remove(Paikka);
130        Vihu.Position = Paikka;
131        Vihu.Tag = "Vihu";
132        Add(Vihu);
133    }
134    void LuoNappula(Vector Paikka, double leveys, double korkeus)
135    {
136        PhysicsObject Nappula = PhysicsObject.CreateStaticObject(leveys, korkeus);
137        Nappula.Position = Paikka;
138        Nappula.Image = NappulanKuva;
139        Add(Nappula);
140
141        DoubleMeter Energia = new DoubleMeter(100, 0, 100);
142        ProgressBar Energiapalkki = new ProgressBar(20, 5);
143        Energiapalkki.Y = 20;
144        Energiapalkki.BarColor = Color.Yellow;
145        Energiapalkki.Color = Color.Black;
146        Energiapalkki.BindTo(Energia);
147        Nappula.Add(Energiapalkki);
148
149        Timer Ajastin = new Timer();
150        Ajastin.Interval = 0.2;
151        Ajastin.Timeout += delegate { Energia.Value -= 1; };
152        Ajastin.Start();
153
154        GameObject Valo = new GameObject(300, 300);
155        Valo.Position = Paikka;
156        Valo.Tag = "valo";
157        Valo.Image = ValonKuva;
158        Add(Valo, 3);
159
160        Energia.LowerLimit += delegate { Valo.IsVisible = false; };
161        AddCollisionHandler(Nappula, "Tyyppi", delegate(PhysicsObject N, PhysicsObject T)
162        {
163            Energia.Value = Energia.MaxValue;
164            Valo.IsVisible = true;
165        });
166    }
167    PhysicsObject Luotyyppi(Image Kuva)
168    {
169        PhysicsObject Tyyppi = new PhysicsObject(319 * 0.1, 218 * 0.1);
170        Tyyppi.LinearDamping = 0.5;
171        Tyyppi.AngularDamping = 0.7;
172        Tyyppi.Image = Kuva;
173        Tyyppi.Shape = Shape.Circle;
174        Vector Paikka = RandomGen.SelectOne<Vector>(Spawnit);
175        Spawnit.Remove(Paikka);
176        Tyyppi.Position = Paikka;
177        Tyyppi.Tag = "Tyyppi";
178        Add(Tyyppi);
179
180        return Tyyppi;
181    }
182    void LuoTyypinpaikka(Vector Paikka, double leveys, double korkeus)
183    {
184        Spawnit.Add(Paikka);
185    }
186    void LuoVihunpaikka(Vector Paikka, double leveys, double korkeus)
187    {
188        VihuSpawnit.Add(Paikka);
189    }
190
191    void Tarkistanakyvyys(PhysicsObject Olio)
192    {
193        bool piilossa = true;
194        foreach (var valo in GetObjectsWithTag("valo"))
195        {
196            if (valo.IsVisible && Vector.Distance(valo.Position, Olio.Position) < valo.Width * 0.5)
197            {
198                piilossa = false;
199                break;
200            }
201        }
202
203        Olio.IsVisible = !piilossa;
204    }
205}
Note: See TracBrowser for help on using the repository browser.