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

Revision 6757, 5.1 KB checked in by miausilj, 4 years ago (diff)

kenhttä

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    Image rajahdys = LoadImage("Rajahdys");
14    Image pommi1 = LoadImage("Pommi");
15
16    PhysicsObject tankki;
17    IntMeter healthit;
18
19    public override void Begin()
20    {
21   
22        //IsFullScreen = true;
23
24       
25       
26        Level.Width = Screen.Width;
27        Level.Height = Screen.Height;
28
29        //Level.CreateBorders();
30        LuoKentta(); 
31        LisaaOhjaimet();
32
33        Camera.Follow(tankki);
34
35        LuoMappi(1);
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        healthit = new IntMeter(400, 0, 400);
45        healthit.LowerLimit += delegate { 
46            tankki.Destroy();
47            ClearControls();
48            Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
49        };
50        Add(tankki);
51    }
52     
53    void LuoVihulainen()
54    {
55        PhysicsObject vihu = new PhysicsObject(Vihulainen);
56        vihu.Size = vihu.Size * 0.1;
57        vihu.Position = new Vector(RandomGen.NextDouble(Level.Left, Level.Right), RandomGen.NextDouble(Level.Bottom, Level.Top));
58        vihu.CanRotate = false;
59        Add(vihu);
60
61        RandomMoverBrain aivot = new RandomMoverBrain();
62        aivot.WanderRadius = 200.0;
63        aivot.ChangeMovementSeconds = 40.0;
64        vihu.Brain = aivot;
65
66        AssaultRifle vihunAse = new AssaultRifle(20.0, 20.0);
67        vihunAse.ProjectileCollision = AmmusOsui;
68        vihunAse.IsVisible = false;
69        vihu.Add(vihunAse);
70
71        Timer vihunAjastin = new Timer();
72        vihunAjastin.Interval = 1.0;
73        vihunAjastin.Timeout += delegate { VihuAmpuu(vihunAse); };
74        vihunAjastin.Start();
75
76         healthit = new IntMeter(40, 0, 40);
77        healthit.LowerLimit += delegate { 
78            vihu.Destroy();
79            ClearControls();
80
81    }
82    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
83    {
84        ammus.Destroy();
85        if (kohde == tankki)
86        {
87            healthit.Value -= 50;
88        }
89       
90    }
91
92    void JättääPommin(PhysicsObject tankki)
93    {
94        PhysicsObject pommi = new PhysicsObject(30.0, 30.0);
95        pommi.Position = tankki.Position;
96        Add(pommi);
97        pommi.Color = Color.Blue;
98        pommi.CanRotate = false;
99        pommi.Image = pommi1;
100        Timer.SingleShot(2.0, delegate
101        {
102            pommi.Destroy();
103            Explosion raj = new Explosion(300.0);
104            raj.Speed = 900.0;
105            raj.Position = pommi.Position;
106            raj.Image = rajahdys;
107            Add(raj);
108        });
109
110    }
111    void Ampuu(PhysicsObject tankki)
112    {
113        PhysicsObject ammus = new PhysicsObject(9.0, 9.0);
114        ammus.Position = tankki.Position;
115            Add(ammus);
116            ammus.Color = Color.Yellow;
117            ammus.Hit(tankki.Angle.GetVector()*3000);
118            Timer.SingleShot(0.50, delegate
119        {
120            ammus.Destroy();
121           
122        });
123           
124           
125
126    }
127    void LuoMappi(int vaikeusaste)
128    {
129        for (int i = 0; i < 3*vaikeusaste; i++)
130        {
131            LuoVihulainen();
132        }
133    }
134    void LisaaOhjaimet()
135    {
136       
137        Mouse.Listen(MouseButton.Right, ButtonState.Pressed, JättääPommin, "Jättää pommin", tankki);
138        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, Ampuu, "Ampuu tykillä", tankki);
139        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
140
141        Mouse.ListenMovement(0.0, Tahtaa, "");
142        Mouse.IsCursorVisible = true;
143        Keyboard.Listen(Key.W, ButtonState.Down, LiikuWASD, "LiikutaYlos");
144    }
145    void Tahtaa(AnalogState hiirenTila)
146    {
147        tankki.Angle = (Mouse.PositionOnWorld - tankki.Position).Angle;
148    }
149    void LiikuWASD()
150    {
151        tankki.Push(Vector.FromLengthAndAngle(9000, tankki.Angle));
152    }
153    void VihuAmpuu(AssaultRifle ase)
154    {
155        ase.AbsoluteAngle = (tankki.Position - ase.Parent.Position).Angle;
156        PhysicsObject panos=ase.Shoot();
157
158        if(panos !=null)
159        {
160            panos.MaximumLifetime = TimeSpan.FromSeconds(1.0);
161
162        }
163
164    }
165    void LuoKentta()
166    {
167        ColorTileMap kentta = ColorTileMap.FromLevelAsset("kentta1");
168
169        kentta.SetTileMethod(Color.Black, LuoSeina);
170        kentta.SetTileMethod(Color.FromHexCode("4CFF00"), LisaaPelaaja);
171
172        kentta.Execute(20, 20);
173       
174       
175       
176        Level.Background.Color = Color.Black;
177
178
179    }
180    void LuoSeina(Vector paikka, double leveys, double korkeus)
181    {
182        PhysicsObject seina = PhysicsObject.CreateStaticObject(leveys, korkeus);
183        seina.Position = paikka;
184        Add(seina);
185    }
186}
Note: See TracBrowser for help on using the repository browser.