source: 2013/30/JesseM/alone in the dark/alone in the dark/alone in the dark/alone_in_the_dark.cs @ 4722

Revision 4722, 7.5 KB checked in by jeattama, 10 years ago (diff)

Talletus.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class alone_in_the_dark : PhysicsGame
10{
11    Image olionKuva = LoadImage("ukkeli");
12    Image olionkuva = LoadImage("hirviö");
13    Image[] ukkelinKavely = LoadImages("animaatio", "animaatio2");
14    Image kentankuva = LoadImage("musta");
15    Image ovenkuva = LoadImage("ovi");
16    Image avainkuva = LoadImage("avain");
17    Image lattia = LoadImage("lattia");
18    PhysicsObject pelaaja;
19    Widget varjo;
20
21    double nopeus = 500;
22    double juoksuNopKerroin = 1.5;
23    int avaimia;
24    const int RUUDUN_KOKO = 20;
25
26    public override void Begin()
27    {
28        MediaPlayer.Play("kauhu");
29        MediaPlayer.IsRepeating = true;
30
31        LuoKentta();
32
33        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
34
35        double koko = Math.Max(Screen.Width, Screen.Height) * 2;
36        varjo = new Widget(koko, koko);
37        varjo.Image = kentankuva;
38        Add(varjo);
39    }
40
41   
42
43
44    void LuoKentta()
45    {
46        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("Untitled");
47        ruudut.SetTileMethod(Color.Black, LuoTaso);
48        //ruudut.SetTileMethod(Color.yellow, LuoHirvio);
49        ruudut.SetTileMethod("0026FF", LuoOvi);
50        ruudut.SetTileMethod("FF006E", LuoPelaaja);
51        ruudut.SetTileMethod("FFF314", LuoHirvio);
52        ruudut.SetTileMethod("FF7FB6", LuoAvain);
53        ruudut.SetTileMethod("FF0015", LuoPaaovi);
54        ruudut.Optimize(Color.Black);
55        ruudut.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
56        Level.Background.Image = LoadImage("lattia");
57        Level.Background.TileToLevel();
58        //Camera.ZoomToLevel();
59        Camera.Follow(pelaaja);
60        Camera.ZoomFactor = 10.5;
61
62        IsMouseVisible = true;
63    }
64
65    void LuoTaso(Vector paikka, Double leveys, Double korkeus)
66    {
67        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
68        taso.Position = paikka;
69        //taso.Image = groundImage;
70        taso.Color = Color.FromHexCode("2D1100");
71        taso.CollisionIgnoreGroup = 1;
72        taso.Tag = "seina";
73        Add(taso);
74    }
75
76    void LuoPaaovi(Vector paikka, Double leveys, Double korkeus)
77    {
78        PhysicsObject Paaovi = PhysicsObject.CreateStaticObject(20, 20);
79        Paaovi.Position = paikka;
80        Paaovi.Color = Color.Red;
81        Paaovi.CollisionIgnoreGroup = 1;
82        Paaovi.Tag = "paaovi";
83        Add(Paaovi);
84    }
85
86    void LuoAvain(Vector paikka, Double leveys, Double korkeus)
87    {
88    PhysicsObject avain = PhysicsObject.CreateStaticObject(9, 5);
89   
90    avain.Position = paikka;
91    avain.Image = avainkuva;
92    avain.Color = Color.Pink;
93    avain.CollisionIgnoreGroup = 1;
94    avain.Tag = "avain";
95
96    Add(avain);
97
98    }
99
100
101    void LuoOvi(Vector paikka, Double leveys, Double korkeus)
102    {
103        PhysicsObject ovi = PhysicsObject.CreateStaticObject(leveys, korkeus);
104        ovi.Position = paikka;
105        ovi.Image = ovenkuva;
106        ovi.Color = Color.Blue;
107        ovi.CollisionIgnoreGroup = 1;
108        ovi.Tag = "ovi";
109        Add(ovi);
110    }
111
112    void LuoPelaaja(Vector paikka, Double leveys, Double korkeus)
113    {
114        pelaaja = new PhysicsObject(10, 10);
115
116        pelaaja.Position = paikka;
117        pelaaja.Color = Color.Pink;
118        pelaaja.LinearDamping = 0.8;
119        Add(pelaaja);
120        pelaaja.Animation = new Animation(ukkelinKavely); 
121        pelaaja.Animation.FPS = 3;
122        //pelaaja.Animation.Start();
123        //pelaaja.Image = olionKuva;
124        pelaaja.CanRotate = false;
125        pelaaja.Tag = "pelaaja";
126        LuoNappaimet(pelaaja);
127        AddCollisionHandler(pelaaja, "paaovi", pelaajaavaaoven);
128        AddCollisionHandler(pelaaja, "avain", Pelaajakeraaavaimen);
129        AddCollisionHandler(pelaaja, "hirviö", PelaajaOsuu);
130       
131
132    }
133
134    void pelaajaavaaoven(PhysicsObject tormaaja, PhysicsObject kohde)
135    {
136        if (avaimia >= 5)
137        {
138            MessageWindow viesti = new MessageWindow("Victory");
139            Add(viesti);
140        }
141    }
142
143    void Pelaajakeraaavaimen(PhysicsObject tormaaja, PhysicsObject kohde)
144    {
145        avaimia++;
146        kohde.Destroy();
147    }
148
149
150
151
152    void LuoHirvio(Vector paikka, Double leveys, Double korkeus)
153    {
154        PhysicsObject hirvio = new PhysicsObject(15, 15);
155        hirvio.Position = paikka;
156        hirvio.Color = Color.Yellow;
157        //hirvio.LinearDamping = 0.8;
158        hirvio.Image = olionkuva;
159        hirvio.Tag = "hirviö";
160
161        LabyrinthWandererBrain labyrinttiAivot = new LabyrinthWandererBrain(RUUDUN_KOKO);
162        labyrinttiAivot.Speed = 30.0;
163        labyrinttiAivot.LabyrinthWallTag = "seina";
164
165        FollowerBrain jahtausAivot = new FollowerBrain("pelaaja");
166        jahtausAivot.Speed = 30;
167        jahtausAivot.DistanceFar = 200;
168        jahtausAivot.FarBrain = labyrinttiAivot;
169
170        hirvio.Brain = jahtausAivot;
171        Add(hirvio);
172       
173    }
174
175   
176   
177 
178    void LuoNappaimet(PhysicsObject pelaaja)
179    {
180        Keyboard.Listen(Key.W, ButtonState.Down, LiikutaPelaajaa, null, Math.PI / 2, pelaaja);
181        Keyboard.Listen(Key.S, ButtonState.Down, LiikutaPelaajaa, null, -Math.PI / 2, pelaaja);
182        Keyboard.Listen(Key.A, ButtonState.Down, LiikutaPelaajaa, null, Math.PI, pelaaja);
183        Keyboard.Listen(Key.D, ButtonState.Down, LiikutaPelaajaa, null, 0.0, pelaaja);
184
185        Keyboard.Listen(Key.W, ButtonState.Released, animaationpysaytys, null);
186        Keyboard.Listen(Key.S, ButtonState.Released, animaationpysaytys, null);
187        Keyboard.Listen(Key.A, ButtonState.Released, animaationpysaytys, null);
188        Keyboard.Listen(Key.D, ButtonState.Released, animaationpysaytys, null);
189        Keyboard.Listen(Key.E, ButtonState.Pressed, avaaovi, null);
190        Keyboard.Listen(Key.LeftShift, ButtonState.Pressed, delegate { nopeus *= juoksuNopKerroin; pelaaja.Animation.FPS *= 4; }, null);
191        Keyboard.Listen(Key.LeftShift, ButtonState.Released, delegate { nopeus /= juoksuNopKerroin; pelaaja.Animation.FPS /= 4; }, null);
192
193        Mouse.ListenMovement(0.5, Tahtaa, "Tähtää aseella");
194    }
195
196    void LiikutaPelaajaa(double kulma, PhysicsObject pelaaja)
197    {
198        //Angle kulma = pelaaja.Angle + Angle.FromRadians(Math.Sin(vektori.X)) + Angle.FromRadians(Math.Cos(vektori.Y)) + Angle.FromRadians(Math.PI/2);
199        Angle uusiKulma = pelaaja.Angle + Angle.FromRadians(kulma);
200        pelaaja.Push(Vector.FromLengthAndAngle(nopeus, uusiKulma));
201        pelaaja.Animation.Resume();
202    }
203
204    void Tahtaa(AnalogState hiirenLiike)
205    {
206        Vector suunta = (Mouse.PositionOnWorld - pelaaja.AbsolutePosition).Normalize();
207        pelaaja.Angle = suunta.Angle - Angle.RightAngle;
208        varjo.Angle = suunta.Angle;
209    }
210
211    void animaationpysaytys()
212    {
213        pelaaja.Animation.Stop();
214    }
215
216
217    void PelaajaOsuu(PhysicsObject pelaaja, PhysicsObject kohde)
218    {
219        MessageWindow viesti = new MessageWindow("Game over");
220        viesti.Closed += aloitauusipeli;
221        Add(viesti);
222    }
223
224    void aloitauusipeli(Window ikkuna)
225    {
226        ClearAll();
227        Begin();
228    }
229
230    void avaaovi()
231    {
232        Vector ovenPaikka = pelaaja.Position + Vector.FromLengthAndAngle(pelaaja.Width, pelaaja.Angle + Angle.RightAngle);
233        PhysicsObject ovi = GetObjectAt(ovenPaikka, "ovi") as PhysicsObject;
234
235        if (ovi != null)
236        {
237            ovi.Destroy();
238        }
239    }
240
241}
242
243
244
245
Note: See TracBrowser for help on using the repository browser.