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

Revision 7355, 5.4 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 tarkistaLaskuri()
92    {
93        if (pisteLaskuri > 900)
94        {
95            kenttaNro++;
96            seuraavaKentta();
97        }
98    }
99
100    void luoAjastin()
101    {
102        Timer ajasti = new Timer();
103        ajasti.Interval = 1;
104        ajasti.Timeout += tarkistaLaskuri;
105        ajasti.Start();
106    }
107
108    void nappaimet()
109    {
110        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
111        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
112        Keyboard.Listen(Key.W, ButtonState.Down, liikkuminen, null, new Vector(0, 100));
113        Keyboard.Listen(Key.S, ButtonState.Down, liikkuminen, null, new Vector(0, -100));
114        Keyboard.Listen(Key.A, ButtonState.Down, liikkuminen, null, new Vector(-100, 0));
115        Keyboard.Listen(Key.D, ButtonState.Down, liikkuminen, null, new Vector(100, 0));
116        Mouse.Listen(MouseButton.Left, ButtonState.Down, ammu, "", pelaajanAse);
117        Mouse.ListenMovement(0.1, tahtaa, "");
118    }
119
120    void liikkuminen(Vector suunta)
121    {
122        pelaaja.Push(suunta);
123    }
124
125    void ammu(AssaultRifle pelaajanAse)
126    {
127        PhysicsObject ammus = pelaajanAse.Shoot();
128
129        if (ammus != null)
130        {
131            ammus.Size *= 0.9;
132        }
133    }
134
135    void luoEste(Vector paikka, double leveys, double korkeus)
136    {
137        este = PhysicsObject.CreateStaticObject(30, 30);
138        este.Position = paikka;
139        este.Tag = "este";
140        Add(este);
141    }
142
143    void luoVihu(Vector paikka, double leveys, double korkeus)
144    {
145        vihu = new PhysicsObject(30, 30);
146        vihu.Position = paikka;
147        vihu.Tag = "vihu";
148        AddCollisionHandler(vihu, "pelaaja", pelaajaaOsui);
149        vihu.CanRotate = false;
150        Add(vihu);
151
152        LabyrinthWandererBrain labyrinttiAivot = new LabyrinthWandererBrain(Ruudun_Koko);
153        labyrinttiAivot.Speed = 100;
154        labyrinttiAivot.LabyrinthWallTag = "este";
155
156        vihu.Brain = labyrinttiAivot;
157    }
158
159    void luoPommi(Vector paikka, double leveys, double korkeus)
160    {
161        pommi = new PhysicsObject(30, 30);
162        pommi.Position = paikka;
163        pommi.Color = Color.Green;
164        //pommi.IsVisible = false;
165        pommi.Tag = "pommi";
166        Add(pommi);
167    }
168
169    void ammusOsui(PhysicsObject ammus, PhysicsObject kohde)
170    {
171        ammus.Destroy();
172        if(kohde.Tag == "vihu")
173        {
174            kohde.Destroy();
175            pisteLaskuri.Value += 100;
176        }
177    }
178
179    void pelaajaaOsui(PhysicsObject pelaaja, PhysicsObject kohde)
180    {
181        if (kohde.Tag == "vihu")
182        {
183            kohde.Destroy();
184            pelaaja.Destroy();
185            pisteLaskuri.Value -= 500;
186        }
187
188        else if (kohde.Tag == "pommi")
189        {
190            pelaaja.Destroy();
191            kohde.Destroy();
192            Explosion rajahdys = new Explosion(60);
193            rajahdys.Position = kohde.Position;
194            Add(rajahdys);
195        }
196    }
197
198    void tahtaa(AnalogState hiirenLiike)
199    {
200        Vector tahtays = (Mouse.PositionOnWorld - pelaajanAse.AbsolutePosition).Normalize();
201        pelaajanAse.Angle = tahtays.Angle;
202    }
203}
Note: See TracBrowser for help on using the repository browser.