source: 2015/24/TaneliL/FysiikkaPeli2/2016peli/2016peli/_2016peli/_2016peli.cs @ 7357

Revision 7357, 5.5 KB checked in by TaLiimat, 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 _2016peli : PhysicsGame
10{
11
12    const int Ruudun_Koko = 30;
13
14    IntMeter pisteLaskuri = new IntMeter(0);
15
16    int kenttaNro = 1;
17
18    PhysicsObject pelaaja;
19    PhysicsObject este;
20    PhysicsObject vihu;
21    PhysicsObject pommi;
22
23    AssaultRifle pelaajanAse;
24
25    public override void Begin()
26    {
27        Window.Width = 800;
28        Window.Height = 600;
29
30        seuraavaKentta();
31        luoPistelaskuri();
32        luoAjastin();
33        nappaimet();
34    }
35
36    void luoPelaaja()
37    {
38        pelaaja = new PhysicsObject(50, 50);
39        pelaaja.Shape = Shape.Rectangle;
40        pelaaja.Tag = "pelaaja";
41        pelaaja.MaxVelocity = 100;
42        pelaaja.Y = -270;
43        pelaaja.CanRotate = false;
44        AddCollisionHandler(pelaaja, pelaajaaOsui);
45        Add(pelaaja);
46
47        Camera.Follow(pelaaja);
48
49        pelaajanAse = new AssaultRifle(20,20);
50        pelaajanAse.FireRate = 10;
51        pelaajanAse.IsVisible = false;
52        pelaajanAse.InfiniteAmmo = true;
53        pelaajanAse.ProjectileCollision = ammusOsui;
54        pelaaja.Add(pelaajanAse);
55    }
56
57    void luoMaailma(string kenttaTiedostonNimi)
58    {
59        ColorTileMap ruudut = ColorTileMap.FromLevelAsset(kenttaTiedostonNimi);
60        ruudut.SetTileMethod(Color.Black, luoEste);
61        ruudut.SetTileMethod(Color.Red, luoVihu);
62        ruudut.SetTileMethod(Color.Harlequin, luoPommi);
63        ruudut.Execute(30, 30);
64
65        Mouse.IsCursorVisible = true;
66    }
67
68    void seuraavaKentta()
69    {
70        ClearAll();
71
72        if (kenttaNro == 1) luoMaailma("Kentta1");
73        else if (kenttaNro == 2) luoMaailma("Kentta2");
74        else if (kenttaNro == 3) luoMaailma("Kentta3");
75        luoPelaaja();
76        nappaimet();
77        luoPistelaskuri();
78    }
79
80    void luoPistelaskuri()
81    {
82        Label pisteNaytto = new Label();
83        pisteNaytto.X = Screen.Left + 50;
84        pisteNaytto.Y = Screen.Top - 20;
85        pisteNaytto.TextColor = Color.Black;
86
87        pisteNaytto.BindTo(pisteLaskuri);
88        Add(pisteNaytto);
89    }
90
91    void lisaaPisteita()
92    {
93        pisteLaskuri.Value += 200;
94    }
95
96    void tarkistaLaskuri()
97    {
98        if (pisteLaskuri > 900)
99        {
100            kenttaNro++;
101            seuraavaKentta();
102        }
103    }
104
105    void luoAjastin()
106    {
107        Timer ajasti = new Timer();
108        ajasti.Interval = 1;
109        ajasti.Timeout += tarkistaLaskuri;
110        ajasti.Start();
111    }
112
113    void nappaimet()
114    {
115        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
116        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
117        Keyboard.Listen(Key.W, ButtonState.Down, liikkuminen, null, new Vector(0, 100));
118        Keyboard.Listen(Key.S, ButtonState.Down, liikkuminen, null, new Vector(0, -100));
119        Keyboard.Listen(Key.A, ButtonState.Down, liikkuminen, null, new Vector(-100, 0));
120        Keyboard.Listen(Key.D, ButtonState.Down, liikkuminen, null, new Vector(100, 0));
121        Keyboard.Listen(Key.Space, ButtonState.Pressed, lisaaPisteita, null);
122        Mouse.Listen(MouseButton.Left, ButtonState.Down, ammu, "", pelaajanAse);
123        Mouse.ListenMovement(0.1, tahtaa, "");
124    }
125
126    void liikkuminen(Vector suunta)
127    {
128        pelaaja.Push(suunta);
129    }
130
131    void ammu(AssaultRifle pelaajanAse)
132    {
133        PhysicsObject ammus = pelaajanAse.Shoot();
134
135        if (ammus != null)
136        {
137            ammus.Size *= 0.9;
138        }
139    }
140
141    void luoEste(Vector paikka, double leveys, double korkeus)
142    {
143        este = PhysicsObject.CreateStaticObject(30, 30);
144        este.Position = paikka;
145        este.Tag = "este";
146        Add(este);
147    }
148
149    void luoVihu(Vector paikka, double leveys, double korkeus)
150    {
151        vihu = new PhysicsObject(30, 30);
152        vihu.Position = paikka;
153        vihu.Tag = "vihu";
154        AddCollisionHandler(vihu, "pelaaja", pelaajaaOsui);
155        vihu.CanRotate = false;
156        Add(vihu);
157
158        LabyrinthWandererBrain labyrinttiAivot = new LabyrinthWandererBrain(Ruudun_Koko);
159        labyrinttiAivot.Speed = 100;
160        labyrinttiAivot.LabyrinthWallTag = "este";
161
162        vihu.Brain = labyrinttiAivot;
163    }
164
165    void luoPommi(Vector paikka, double leveys, double korkeus)
166    {
167        pommi = new PhysicsObject(30, 30);
168        pommi.Position = paikka;
169        pommi.Color = Color.Green;
170        //pommi.IsVisible = false;
171        pommi.Tag = "pommi";
172        Add(pommi);
173    }
174
175    void ammusOsui(PhysicsObject ammus, PhysicsObject kohde)
176    {
177        ammus.Destroy();
178        if(kohde.Tag == "vihu")
179        {
180            kohde.Destroy();
181            pisteLaskuri.Value += 100;
182        }
183    }
184
185    void pelaajaaOsui(PhysicsObject pelaaja, PhysicsObject kohde)
186    {
187        if (kohde.Tag == "vihu")
188        {
189            kohde.Destroy();
190            pelaaja.Destroy();
191            pisteLaskuri.Value -= 500;
192        }
193
194        else if (kohde.Tag == "pommi")
195        {
196            pelaaja.Destroy();
197            kohde.Destroy();
198            Explosion rajahdys = new Explosion(60);
199            rajahdys.Position = kohde.Position;
200            Add(rajahdys);
201        }
202    }
203
204    void tahtaa(AnalogState hiirenLiike)
205    {
206        Vector tahtays = (Mouse.PositionOnWorld - pelaajanAse.AbsolutePosition).Normalize();
207        pelaajanAse.Angle = tahtays.Angle;
208    }
209}
Note: See TracBrowser for help on using the repository browser.