source: 2014/23/HeikkaM/Kuumailmapallo/Kuumailmapallo/Kuumailmapallo/Kuumailmapallo.cs @ 4901

Revision 4901, 6.9 KB checked in by koannak, 9 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 Kuumailmapallo : PhysicsGame
10{
11    GameObject naruOikea;
12    GameObject naruVasen;
13
14    GameObject koriOikea;
15    GameObject koriVasen;
16
17    PhysicsObject pallo;
18    PhysicsObject kori;
19
20    Image Kaveril = LoadImage("Kaveri");
21    Image Vihul = LoadImage("Vihu");
22    Image GroundImage = LoadImage("Maa");
23
24
25
26    public override void Begin()
27    {
28        //Level.Size = new Vector(800, 600);
29        //SetWindowSize(800, 600);
30
31        //Level.CreateBorders();
32        AlkuValikko();
33
34    }
35
36    void AloitaPeli()
37    {
38        ClearAll();
39        LuoKentta();
40        Camera.ZoomToLevel();
41
42        Gravity = new Vector(0, -500);
43
44
45        Camera.StayInLevel = true;
46        Camera.Follow(kori);
47
48        Level.Background.CreateGradient(Color.Green, Color.Blue);
49
50        Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaPalloa, null, new Vector(0, 2), pallo);
51        Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaPalloa, null, new Vector(1, 0), pallo);
52        Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaPalloa, null, new Vector(-1, 0), pallo);
53
54        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Lopeta peli");
55    }
56
57    void LiikutaPalloa(Vector suunta, PhysicsObject pallo)
58    {
59        pallo.Push(300 * suunta);
60    }
61
62    protected override void Update(Microsoft.Xna.Framework.GameTime gameTime)
63    {
64        if (pallo != null)
65        {
66            Vector palloOikea = new Vector(
67                pallo.X + pallo.Width / 2 * Math.Cos(-Math.PI / 4),
68                pallo.Y + pallo.Width / 2 * Math.Sin(-Math.PI / 4)
69                );
70            Vector palloVasen = new Vector(
71                pallo.X + pallo.Width / 2 * Math.Cos(-3 * Math.PI / 4),
72                pallo.Y + pallo.Width / 2 * Math.Sin(-3 * Math.PI / 4)
73                );
74
75
76            koriVasen.Position =
77                kori.Position + Vector.FromLengthAndAngle(Math.Sqrt(2 * (kori.Width / 2 * kori.Width / 2)), kori.Angle + Angle.FromRadians(3 * Math.PI / 4));
78            koriOikea.Position =
79                kori.Position + Vector.FromLengthAndAngle(Math.Sqrt(2 * (kori.Width / 2 * kori.Width / 2)), kori.Angle + Angle.FromRadians(Math.PI / 4));
80
81
82            naruOikea.Height = (palloOikea - koriOikea.Position).Magnitude;
83            naruVasen.Height = (palloVasen - koriVasen.Position).Magnitude;
84            naruOikea.Angle = (palloOikea - koriOikea.Position).Angle - Angle.RightAngle;
85            naruVasen.Angle = (palloVasen - koriVasen.Position).Angle - Angle.RightAngle;
86
87            naruOikea.Position = koriOikea.Position + (palloOikea - koriOikea.Position) / 2;
88            naruVasen.Position = koriVasen.Position + new Vector((palloVasen.X - koriVasen.Position.X) / 2, (palloVasen.Y - koriVasen.Position.Y) / 2);
89        }
90        base.Update(gameTime);
91    }
92
93    void LuoKentta()
94    {
95        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("map");
96
97        ruudut.SetTileMethod(Color.Black, LuoTaso);
98        ruudut.SetTileMethod(new Color(128, 128, 128), LuoTasoGO);
99        ruudut.SetTileMethod(new Color(255, 216, 0), LuoKaveri);
100        ruudut.SetTileMethod(new Color(0,38,255), LuoVihu);
101        ruudut.SetTileMethod(Color.Red, LuoPallo);
102        ruudut.SetTileMethod(new Color(0, 255, 0), LuoKaveri);
103
104
105       
106        ruudut.Execute(20, 20);
107    }
108
109    void LuoTasoGO(Vector paikka, double leveys, double korkeus)
110    {
111        GameObject taso = new GameObject(leveys, korkeus);
112        taso.Position = paikka;
113        taso.Image = GroundImage;
114        Add(taso);
115    }
116
117    void LuoTaso(Vector paikka, double leveys, double korkeus)
118    {
119        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
120        taso.Position = paikka;
121        taso.Image = GroundImage;
122        taso.CollisionIgnoreGroup = 1;
123        Add(taso);
124    }
125
126    void LuoPallo(Vector paikka, double leveys, double korkeus)
127    {
128        pallo = new PhysicsObject(50, 50, Shape.Circle);
129        pallo.Color = Color.Red;
130        pallo.Position = paikka;
131        pallo.Mass = 1;
132        Add(pallo);
133        pallo.IgnoresGravity = true;
134
135       
136        kori = new PhysicsObject(20, 20);
137        kori.Position = pallo.Position - new Vector(0, 75);
138        kori.Tag = "pelaaja";
139       // kori.CanRotate = false;
140        Add(kori);
141
142        naruOikea = new GameObject(3, 3);
143        naruOikea.Color = Color.Red;
144        Add(naruOikea);
145
146        naruOikea.Image = LoadImage("koysi");
147
148        naruVasen = new GameObject(3, 3);
149        naruVasen.Color = Color.Red;
150        Add(naruVasen);
151        naruVasen.Image = LoadImage("koysi");
152
153        naruVasen.RotateImage = true;
154
155        koriOikea = new GameObject(0.1, 0.1);
156        koriOikea.Color = Color.Brown;
157        //Add(koriOikea);
158
159        koriVasen = new GameObject(0.1, 0.1);
160        koriVasen.Color = Color.Brown;
161        //Add(koriVasen);
162
163        AxleJoint liitos = new AxleJoint(pallo, kori, new Vector(pallo.X, pallo.Bottom - 25));
164        Add(liitos);
165
166        AddCollisionHandler(pallo, "kaveri", Voitto);
167       
168    }
169
170    void LuoVihu(Vector paikka, double leveys, double korkeus)
171    {
172        PlatformCharacter Vihu = new PlatformCharacter(leveys, korkeus);
173        Vihu.Position = paikka;
174        Vihu.Image = Vihul;
175        Vihu.Tag = "Vihu";
176        Add(Vihu);
177
178        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
179        tasoAivot.Speed = 100;
180        tasoAivot.FallsOffPlatforms = true;
181        tasoAivot.JumpSpeed = 100;
182        tasoAivot.TriesToJump = true;
183
184        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja");
185        seuraajanAivot.Speed = 100;                 
186        seuraajanAivot.DistanceFar = 600;           
187        seuraajanAivot.DistanceClose = 20;         
188        seuraajanAivot.StopWhenTargetClose = true; 
189        seuraajanAivot.FarBrain = tasoAivot;   
190
191        seuraajanAivot.TargetClose += mitaTapahtuuKunOllaanLahella;
192
193        Vihu.Brain = seuraajanAivot;
194    }
195
196    void mitaTapahtuuKunOllaanLahella()
197    {
198        pallo.Color = Color.Red;
199    }
200
201    void LuoKaveri(Vector paikka, double leveys, double korkeus)
202    {
203        PhysicsObject kaveri = new PhysicsObject(leveys, korkeus);
204        kaveri.Position = paikka;
205        kaveri.Image = Kaveril;
206        kaveri.Tag = "kaveri";
207        Add(kaveri);
208    }
209
210    void Voitto(PhysicsObject pallo, PhysicsObject kaveri)
211    {
212        if (kaveri.Tag == "kaveri") AlkuValikko();
213    }
214
215    void AlkuValikko()
216    {
217        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko", "Aloita peli", "Lopeta");
218        Add(alkuValikko);
219
220        alkuValikko.AddItemHandler(0, AloitaPeli);
221        alkuValikko.AddItemHandler(1, Exit);
222    }
223
224}
Note: See TracBrowser for help on using the repository browser.