source: 2016/26/JonniN/TankHero/TankHero/TankHero/TankHero.cs @ 7616

Revision 7616, 6.9 KB checked in by jonnurmi, 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 TankHero : PhysicsGame
10{
11   
12    Cannon torni;
13    Image leopard2a4 = LoadImage("leopard2a4");
14    Image torninKuva = LoadImage("leopard2a4valmistorni");
15    Image kartanKuva = LoadImage("kartta");
16    Image puuKuva = LoadImage("puu");
17    Image hiekanKuva = LoadImage("hiekka");
18    Image bottiRunko = LoadImage("t90runko");
19    Image bottiTorni = LoadImage("t90torni");
20    PhysicsObject pelaaja;
21    PhysicsObject botti;
22    Vector spawn = new Vector(-1400, -1300);
23
24    public override void Begin()
25    {
26        MultiSelectWindow alkuValikko = new MultiSelectWindow("Main Menu", "Start game", "Quit the game");
27        alkuValikko.AddItemHandler(0, AloitaPeli);
28        alkuValikko.AddItemHandler(1, Exit);
29        Add(alkuValikko);
30    }
31
32   
33    void AloitaPeli()
34    {
35        Mouse.IsCursorVisible = true;
36
37        Vector kursoriruudulla = Mouse.PositionOnScreen;
38        Vector paikkakentällä = Mouse.PositionOnWorld;
39        LuoKentta();
40        LuoPelaaja();
41        LuoOhjaimet();
42        MediaPlayer.Play("684240_Zound---Metallic");
43
44
45        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
46        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
47    }
48
49    void LuoPelaaja()
50    {
51        pelaaja = new PhysicsObject(150, 200);
52        pelaaja.Shape = Shape.FromImage(leopard2a4);
53        pelaaja.Image = leopard2a4;
54        pelaaja.LinearDamping = 0.90;
55        pelaaja.AngularDamping = 0.99;
56        pelaaja.Position = spawn;
57        pelaaja.Tag = "pelaaja1";
58        Add(pelaaja);
59        Camera.Zoom(1.5);
60        Camera.Follow(pelaaja);
61        //Camera.ZoomToAllObjects();
62        pelaaja.IgnoresExplosions = true;
63
64
65        torni = new Cannon(180, 100);
66        torni.Shape = Shape.FromImage(torninKuva);
67        torni.Image = torninKuva;
68        torni.Position = new Vector(-7, -37);
69        torni.Ammo.Value = 10000;
70        pelaaja.Add(torni);
71
72    }
73
74   
75    void LuoBotti(Vector paikka, double leveys, double korkeus)
76    {
77        PhysicsObject botti = new PhysicsObject(leveys*1.7, korkeus*1.7);
78        botti.Image = bottiRunko;
79        botti.Position = paikka;
80        botti.LinearDamping = 0.90;
81        botti.AngularDamping = 0.99;
82        Add(botti);
83
84        Cannon botintorni = new Cannon(220, 70);
85        botintorni.Image = bottiTorni;
86        botintorni.Position += new Vector(-8, 12);
87        botintorni.Ammo.Value = 100;
88        botintorni.ProjectileCollision = AmmusOsuu;
89        botti.Add(botintorni);
90
91        /*
92        RandomMoverBrain torninAivot = new RandomMoverBrain();
93        torninAivot.Speed = 100;
94        botintorni.Brain = torninAivot;
95        torninAivot.Active = true;
96        */
97
98        Timer ajaastin = new Timer();
99        ajaastin.Interval = 3;
100        ajaastin.Timeout += delegate { VihollinenAmpuu(botintorni); };
101        ajaastin.Start();
102
103        FollowerBrain botinaivot = new FollowerBrain("pelaaja1");
104        botinaivot.Speed = 200;
105        botti.Brain = botinaivot;
106        botinaivot.DistanceClose = 300;
107        botinaivot.DistanceFar = 800;
108        botinaivot.StopWhenTargetClose = true;
109        botinaivot.TurnWhileMoving = true;
110
111        Timer ajastin = new Timer();
112        ajastin.Interval = 0.02;
113        ajastin.Timeout += delegate { botintorni.AbsoluteAngle = (pelaaja.Position - botintorni.AbsolutePosition).Angle; };
114        ajastin.Start();
115
116
117
118    }
119
120    void VihollinenAmpuu(Cannon botintorni)
121    {
122        //botintorni.AbsoluteAngle = (botintorni.Position - pelaaja.Position).Angle;
123
124        PhysicsObject ammus = botintorni.Shoot();
125
126        if (ammus != null)
127        {
128            ammus.Size *= 1;
129            //tykki.FireRate = 10;
130            Explosion rajahdys = new Explosion(60);
131            rajahdys.Position = botintorni.AbsolutePosition + botintorni.AbsoluteAngle.GetVector().Normalize() * 115;
132            rajahdys.Speed = 500;
133            rajahdys.UseShockWave = false;
134            Add(rajahdys);
135        }
136    }
137   
138
139    void LuoKentta()
140    {
141        Level.Background.Color = Color.LightGreen;
142        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("kartta");
143        ruudut.SetTileMethod(Color.FromHexCode("FFD800"), LuoHiekka);
144        ruudut.SetTileMethod(Color.FromHexCode("4CFF00"), LuoPuu);
145        ruudut.SetTileMethod(Color.FromHexCode("FFFF0000"), LuoBotti);
146        ruudut.Execute(100, 100);
147       
148
149    }
150
151    void LuoHiekka(Vector paikka, double leveys, double korkeus)
152    {
153        GameObject hiekka = new GameObject(100, 100);
154        hiekka.Image = hiekanKuva;
155        hiekka.Position = paikka;
156        Add(hiekka); 
157    }
158    void LuoPuu(Vector paikka, double leveys, double korkeus)
159    {
160        PhysicsObject puu = PhysicsObject.CreateStaticObject(leveys, korkeus);
161        puu.Position = paikka;
162        puu.Image = puuKuva;
163        Add(puu);
164    }
165
166    void LuoOhjaimet()
167    {
168        Keyboard.Listen(Key.W, ButtonState.Down, Aja, null, new Vector(0, 1200));
169        Keyboard.Listen(Key.S, ButtonState.Down, Aja, null, new Vector(0, -400));
170        Keyboard.Listen(Key.A, ButtonState.Down, Kaanny, null, 1);
171        Keyboard.Listen(Key.D, ButtonState.Down, Kaanny, null, -1);
172
173        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, AmmuTykilla, "Ammu", torni);
174        Mouse.ListenMovement(0.1, TorninLiike, "Käännä tornia");
175
176       
177
178    }
179    void AmmuTykilla(Cannon tykki)
180    {
181        PhysicsObject ammus = tykki.Shoot();
182
183        if(ammus !=null)
184        {
185            ammus.Size *= 1;
186            tykki.FireRate = 10;
187            Explosion rajahdys = new Explosion(60);
188            rajahdys.Position = torni.AbsolutePosition + torni.AbsoluteAngle.GetVector().Normalize() * 95;
189            rajahdys.Speed = 500;
190            rajahdys.UseShockWave = false;
191            Add(rajahdys);
192        }
193        tykki.ProjectileCollision = AmmusOsuu;
194    }
195    void AmmusOsuu(PhysicsObject ammus, PhysicsObject kohde)
196    {
197        ammus.Destroy();
198        kohde.Destroy();
199       
200    }
201    void TorninLiike(AnalogState hiirenLiike)
202    {
203        Vector suunta = (Mouse.PositionOnWorld - torni.AbsolutePosition).Normalize();
204        torni.AbsoluteAngle = suunta.Angle;
205    }
206    void Aja(Vector suunta)
207    {
208        Vector menosuunta = Vector.FromLengthAndAngle(suunta.Y, pelaaja.Angle);
209        pelaaja.Push(menosuunta);
210
211    }
212    void Kaanny(int kaannos)
213    {
214        pelaaja.Angle += Angle.FromDegrees(kaannos);
215    }
216}
217class Pelaaja : PhysicsObject
218{
219    private IntMeter elamalaskuri = new IntMeter(5, 0, 5);
220    public IntMeter ElamaLaskuri { get { return elamalaskuri; } }
221    public Pelaaja(double leveys, double korkeus)
222        : base(leveys, korkeus)
223    {
224        elamalaskuri.LowerLimit += delegate { this.Destroy(); };
225    }
226}
Note: See TracBrowser for help on using the repository browser.