source: 2014/24/IlariR/FysiikkaPeli1/FysiikkaPeli1/FysiikkaPeli1/FysiikkaPeli1.cs @ 4979

Revision 4979, 6.7 KB checked in by ilkarist, 5 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 FysiikkaPeli1 : PhysicsGame
10{
11    Image olionKuva = LoadImage("akukuva");
12    PhysicsObject hirviniemi;
13    AssaultRifle hirviniemiase;
14    Image munamieskuva = LoadImage("munamieskuva");
15    Image gigakuva = LoadImage("gigapudding");
16    Image ammuksenkuva = LoadImage("nakki");
17    Image tahtaimenkuva = LoadImage("tahtain");
18    IntMeter elamaLaskuri = new IntMeter(10, 0, 10);
19    int vihollistenKasvuLkm = 1;
20    int vihollistenAlkuLkm = 2;
21    int vihollistenLkm = 2;
22
23    public override void Begin()
24    {
25        MediaPlayer.Play("taustamusiikki");
26        MediaPlayer.IsRepeating = true;
27
28        SmoothTextures = false;
29        Image taustaKuva = LoadImage("planeettataustakuva");
30        Level.Background.Image = taustaKuva;
31        Level.Background.Color = Color.Black;
32
33        Camera.ZoomToLevel();
34        Camera.Follow(hirviniemi);
35        Camera.Zoom(1.5);
36        elamaLaskuri.LowerLimit += delegate { hirviniemi.Destroy(); };
37
38        LuoKentta();
39       
40
41
42        Mouse.IsCursorVisible = true;
43       
44
45
46        GameObject tahtain = new GameObject(20, 20);
47        tahtain.Image = tahtaimenkuva;
48        Add(tahtain);
49
50
51
52        Timer tahtaimenLiikutus = new Timer();
53        tahtaimenLiikutus.Interval = 0.01;
54        tahtaimenLiikutus.Timeout += delegate { tahtain.Position = Mouse.PositionOnWorld; };
55        tahtaimenLiikutus.Start();
56
57
58
59        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
60        Keyboard.Listen(Key.A, ButtonState.Down, AsetaNopeus, null, hirviniemi, new Vector(-400, 0));
61        Keyboard.Listen(Key.D, ButtonState.Down, AsetaNopeus, null, hirviniemi, new Vector(400, 0));
62        Keyboard.Listen(Key.W, ButtonState.Down, AsetaNopeus, null, hirviniemi, new Vector(0, 400));
63        Keyboard.Listen(Key.S, ButtonState.Down, AsetaNopeus, null, hirviniemi, new Vector(0, -400));
64        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
65        Mouse.Listen(MouseButton.Left, ButtonState.Down, AmmuAseella, "Ammu", hirviniemi);
66
67        Keyboard.Listen(Key.LeftControl, ButtonState.Down, MuutaAmpumaNopeutta, null, false);
68        Keyboard.Listen(Key.LeftControl, ButtonState.Up, MuutaAmpumaNopeutta, null, true);
69
70        Mouse.ListenMovement(0.1, Tahtaa, "Tähtää aseella");
71    }
72
73
74    void MuutaAmpumaNopeutta(bool arvo)
75    {
76        if(arvo) hirviniemiase.TimeBetweenUse = TimeSpan.FromMilliseconds(500);
77        else hirviniemiase.TimeBetweenUse = TimeSpan.FromMilliseconds(1);
78    }
79
80
81    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
82    {
83        ammus.Destroy();
84        if (kohde.Tag != "seinä" && !kohde.IsDestroying)
85        {
86            kohde.Destroy();
87            vihollistenLkm--;
88
89            if (vihollistenLkm <= 0)
90            {
91                int i = 0;
92                vihollistenAlkuLkm += vihollistenKasvuLkm;
93                while (i < vihollistenAlkuLkm)
94                {
95                    LuoVihollinen();
96                    i++;
97                }
98                vihollistenLkm = (vihollistenAlkuLkm*2);
99            }
100        }
101    }
102    void Tahtaa(AnalogState hiirenLiike)
103    {
104        Vector suunta = (Mouse.PositionOnWorld - hirviniemiase.AbsolutePosition).Normalize();
105        hirviniemiase.Angle = suunta.Angle;
106    }
107
108    void AmmuAseella(PhysicsObject hirviniemi)
109    {
110        PhysicsObject ammus = hirviniemiase.Shoot();
111        if (ammus != null)
112            ammus.Image = ammuksenkuva;
113    }
114
115    void AsetaNopeus(PhysicsObject hirviniemi, Vector nopeus)
116    {
117        hirviniemi.Velocity = nopeus;
118    }
119
120    void LiikutaPelaajaa(PhysicsObject hirviniemi, Vector vektori)
121    {
122        hirviniemi.Push(vektori);
123    }
124
125    void LuoKentta()
126    {
127        //1. Luetaan kuva uuteen ColorTileMappiin, kuvan nimen perässä ei .png-päätettä.
128
129        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("kentta");
130
131        //2. Kerrotaan mitä aliohjelmaa kutsutaan, kun tietyn värinen pikseli tulee vastaan kuvatiedostossa.
132        ruudut.SetTileMethod(Color.FromHexCode("00FF80"), LuoPelaaja);
133        ruudut.SetTileMethod(Color.Black, LuoTaso);
134        //ruudut.SetTileMethod(Color.Yellow, LuoTahti);
135
136        //3. Execute luo kentän
137        //   Parametreina leveys ja korkeus
138        ruudut.Execute(20, 20);
139        LuoVihollinen();
140
141    }
142
143
144    void LuoPelaaja(Vector paikka, double leveys, double korkeus)
145    {
146        hirviniemi = new PhysicsObject(30, 30);
147        hirviniemi.Position = paikka;
148        hirviniemi.CanRotate = false;
149        //AddCollisionHandler(hirviniemi, "tahti", TormaaTahteen);
150
151        hirviniemi.Image = olionKuva;
152        hirviniemi.LinearDamping = 0.90;
153        hirviniemiase = new AssaultRifle(30, 10);
154        hirviniemiase.Ammo.Value = 100000;
155        hirviniemiase.TimeBetweenUse = TimeSpan.FromMilliseconds(500);
156        //hirviniemiase.ProjectileCollision = AmmusOsui;
157        hirviniemiase.IsVisible = false;
158        hirviniemiase.ProjectileCollision = AmmusOsui;
159        AddCollisionHandler(hirviniemi, "vihollinen", PelaajaanOsuu);
160        hirviniemi.Add(hirviniemiase);
161        Add(hirviniemi);
162    }
163
164    void LuoTaso(Vector paikka, double leveys, double korkeus)
165    {
166        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
167        taso.Position = paikka;
168        //taso.Image = groundImage;
169        taso.CollisionIgnoreGroup = 1;
170        taso.Color = Color.Transparent;
171        taso.Tag = "seinä";
172        Add(taso);
173    }
174    void LuoVihollinen()
175    {
176        PhysicsObject vihollinen = new PhysicsObject(30, 30);
177        vihollinen.Image = munamieskuva;
178        vihollinen.Position = new Vector(RandomGen.NextDouble(Level.Left +30, Level.Right-30), RandomGen.NextDouble(Level.Bottom +30, Level.Top -30));
179        vihollinen.Tag = "vihollinen";
180        Add(vihollinen);
181        FollowerBrain seuraajanAivot = new FollowerBrain(hirviniemi);
182        vihollinen.Brain = seuraajanAivot;
183
184        PhysicsObject vihollinen2 = new PhysicsObject(30, 30);
185        vihollinen2.Image = gigakuva;
186        vihollinen2.Position = new Vector(RandomGen.NextDouble(Level.Left +30, Level.Right-30), RandomGen.NextDouble(Level.Bottom +30, Level.Top -30));
187        vihollinen2.Tag = "vihollinen";
188        Add(vihollinen2);
189        FollowerBrain seuraajanAivot2 = new FollowerBrain(hirviniemi);
190        vihollinen2.Brain = seuraajanAivot2;
191
192    }
193
194    void PelaajaanOsuu(PhysicsObject pelaaja, PhysicsObject kohde)
195    {
196        elamaLaskuri.Value--;
197        kohde.Destroy();
198        LuoVihollinen();
199    }
200}
Note: See TracBrowser for help on using the repository browser.