source: 2015/27/MiroS/Raiskintapeli/Raiskintapeli/Raiskintapeli/TankkiPeli.cs @ 6780

Revision 6780, 7.3 KB checked in by miausilj, 4 years ago (diff)

Kenttiä

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class TankkiPeli : PhysicsGame
10{
11    Image tankkikuva = LoadImage("Tankki");
12    Image Vihulainen = LoadImage("Vihulainen");
13
14    PhysicsObject tankki;
15    IntMeter healthit;
16    public IntMeter tuhotutTankit;
17    int vaikeusaste = 1;
18    int tankkienLkm = 4;
19    String kentanNimi = "kentta1";
20
21    public override void Begin()
22    {
23   
24        //IsFullScreen = true;
25        ClearAll();     
26       
27        Level.Width = Screen.Width;
28        Level.Height = Screen.Height;
29
30        //Level.CreateBorders();
31        LuoKentta(kentanNimi); 
32        LisaaOhjaimet();
33
34        Camera.Follow(tankki);
35        LuoMappi(vaikeusaste);
36    }
37    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
38    {
39        tankki = new PhysicsObject(50, 50);
40        tankki.Position = paikka;
41        tankki.Image = tankkikuva;
42        tankki.LinearDamping = 0.1;
43        tankki.AngularDamping = 0.1;
44        tankki.Tag = "tankki";
45        healthit = new IntMeter(500, 0, 500);
46        healthit.LowerLimit += delegate { 
47            tankki.Destroy();
48            Explosion raj = new Explosion(100.0);
49            raj.Position = tankki.Position;
50            Add(raj);
51            ClearControls();
52            Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
53        };
54        Add(tankki);
55    }
56
57    void LuoVihulainen()
58    {
59        Vihu vihu = new Vihu(Vihulainen.Width,Vihulainen.Height);
60        vihu.Size = vihu.Size * 0.1;
61        vihu.Position = new Vector(RandomGen.NextDouble(Level.Left, Level.Right), RandomGen.NextDouble(Level.Bottom, Level.Top));
62        vihu.CanRotate = false;
63        vihu.Image = Vihulainen;
64        vihu.Tag = "vihu";
65        Add(vihu,1);
66
67        RandomMoverBrain aivot = new RandomMoverBrain();
68        aivot.WanderRadius = 200.0;
69        aivot.ChangeMovementSeconds = 10.0;
70        vihu.Brain = aivot;
71     
72
73        AssaultRifle vihunAse = new AssaultRifle(20.0, 20.0);
74        vihunAse.ProjectileCollision = AmmusOsui;
75        vihunAse.IsVisible = false;
76        vihu.Add(vihunAse);
77       
78        Timer vihunAjastin = new Timer();
79        vihunAjastin.Interval = 1.0;
80        vihunAjastin.Timeout += delegate { VihuAmpuu(vihunAse); };
81        vihunAjastin.Start();
82        vihu.Ajastin = vihunAjastin;
83
84       
85
86
87
88    }
89   public void LuoRajahdys(Vector paikka)
90    {
91        Explosion rajahdys = new Explosion(100);
92        rajahdys.Position = paikka;
93        Add(rajahdys);
94
95
96    }
97
98    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
99    {
100        ammus.Destroy();
101        if (kohde == tankki)
102        {
103            healthit.Value -= 50;
104        }
105        else if (kohde.Tag.ToString() == "vihu")
106        {
107            ((Vihu)kohde).ElamaLaskuri.Value--;
108           
109        }
110       
111    }
112
113    void JättääPommin(PhysicsObject tankki)
114    {
115        PhysicsObject pommi = new PhysicsObject(10.0, 10.0);
116        pommi.Position = tankki.Position;
117        Add(pommi);
118        pommi.Color = Color.Blue;
119        pommi.CanRotate = false;
120        Timer.SingleShot(2.0, delegate
121        {         
122            Explosion raj = new Explosion(300.0);
123            raj.Speed = 900.0;
124            raj.Tag = "pommi";
125            raj.Position = pommi.Position;
126         
127            raj.AddShockwaveHandler("tankki", delegate(IPhysicsObject olio, Vector shokki)
128            {
129                healthit.Value -= 1;
130            });
131
132            raj.AddShockwaveHandler("vihu", delegate(IPhysicsObject olio, Vector shokki)
133            {
134                ((Vihu)olio).ElamaLaskuri.Value-=3;
135            });
136            pommi.Destroy();
137            Add(raj);
138        });
139
140    }
141    void Ampuu(PhysicsObject tankki)
142    {
143        PhysicsObject ammus = new PhysicsObject(9.0, 9.0);
144        ammus.Position = tankki.Position;
145            Add(ammus);
146            ammus.Color = Color.Yellow;
147            ammus.Hit(tankki.Angle.GetVector()*3000);
148            Timer.SingleShot(0.50, delegate
149        {
150            ammus.Destroy();
151           
152        });
153
154        AddCollisionHandler(ammus, AmmusOsui); 
155
156    }
157    void LuoMappi(int vaikeusaste)
158    {
159        for (int i = 0; i < tankkienLkm * vaikeusaste; i++)
160        {
161            LuoVihulainen();
162        }
163
164        this.tuhotutTankit = new IntMeter(0, 0, vaikeusaste * 1);
165
166        //this.tuhotutTankit.UpperLimit += delegate {
167        //    SeuraavaKentta();
168        //    vaikeusaste++;
169        //    Begin();
170        //};
171
172        tuhotutTankit.AddTrigger(vaikeusaste * (tankkienLkm - 1), TriggerDirection.Up, delegate (int arvo) {
173            SeuraavaKentta();
174            vaikeusaste++;
175            Begin();
176        });
177    }
178    void SeuraavaKentta()
179    {
180        if (kentanNimi == "kentta1")
181        {
182            kentanNimi = "kentta2";
183        }
184        else if (kentanNimi == "kentta2")
185        {
186            kentanNimi = "kentta3";
187        }
188        else
189        {
190            Exit();
191        }
192    }
193    void LisaaOhjaimet()
194    {
195       
196        Mouse.Listen(MouseButton.Right, ButtonState.Pressed, JättääPommin, "Jättää pommin", tankki);
197        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, Ampuu, "Ampuu tykillä", tankki);
198        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
199
200        Mouse.ListenMovement(0.0, Tahtaa, "");
201        Mouse.IsCursorVisible = true;
202        Keyboard.Listen(Key.W, ButtonState.Down, LiikuWASD, "LiikutaYlos");
203    }
204    void Tahtaa(AnalogState hiirenTila)
205    {
206        tankki.Angle = (Mouse.PositionOnWorld - tankki.Position).Angle;
207    }
208    void LiikuWASD()
209    {
210        tankki.Push(Vector.FromLengthAndAngle(9000, tankki.Angle));
211    }
212    void VihuAmpuu(AssaultRifle ase)
213    {
214        ase.AbsoluteAngle = (tankki.Position - ase.Parent.Position).Angle;
215        PhysicsObject panos=ase.Shoot();
216
217        if(panos !=null)
218        {
219            panos.MaximumLifetime = TimeSpan.FromSeconds(1.0);
220
221        }
222
223    }
224    void LuoKentta(String kentanNimi)
225    {
226        ColorTileMap kentta = ColorTileMap.FromLevelAsset(kentanNimi);
227
228        kentta.SetTileMethod(Color.Black, LuoSeina);
229        kentta.SetTileMethod(Color.FromHexCode("4CFF00"), LisaaPelaaja);
230
231        kentta.Execute(20, 20);
232       
233       
234       
235        Level.Background.Color = Color.Orange;
236
237
238    }
239    void LuoSeina(Vector paikka, double leveys, double korkeus)
240    {
241        PhysicsObject seina = PhysicsObject.CreateStaticObject(leveys, korkeus);
242        seina.Position = paikka;
243        seina.Color = Color.Blue;
244        Add(seina);
245    }
246}
247class Vihu : PhysicsObject
248{
249    private IntMeter elamaLaskuri = new IntMeter(3, 0, 3);
250    public  IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
251
252    public Timer Ajastin { get; set; }
253    public Vihu(double leveys, double korkeus)
254        : base(leveys, korkeus)
255    {
256        elamaLaskuri.LowerLimit += delegate { 
257            this.Ajastin.Stop();
258            ((TankkiPeli)Game.Instance).LuoRajahdys(this.Position);
259            this.Destroy();
260            ((TankkiPeli)Game.Instance).tuhotutTankit.Value++;
261        };
262
263    }
264}
Note: See TracBrowser for help on using the repository browser.