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

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