source: arho_m/Avaruuspeli2/Peli.cs @ 294

Revision 294, 7.6 KB checked in by armahlam, 10 years ago (diff)
Line 
1#region Usings
2using System;
3using System.Collections.Generic;
4using System.Linq;
5using Microsoft.Xna.Framework;
6using Microsoft.Xna.Framework.Audio;
7using Microsoft.Xna.Framework.Content;
8using Microsoft.Xna.Framework.Graphics;
9using Microsoft.Xna.Framework.Input;
10using Microsoft.Xna.Framework.Media;
11using Jypeli;
12using Jypeli.ScreenObjects;
13using Jypeli.Assets;
14using AdvanceMath;
15using Physics2DDotNet;
16using Physics2DDotNet.Shapes;
17#endregion
18
19namespace Avaruuspeli2
20{
21    public class Peli : PhysicsGame
22    {
23        #region Muuttujat
24        BattleObject pelaaja1;
25        PlasmaCannon ase;
26        BarGauge hitpointNaytto;
27        #endregion
28
29        #region Alustukset
30        protected override void LoadContent()
31        {
32            alustaNaytot();
33            lataaUusiKentta();
34        }
35
36        private void alustaNaytot()
37        {
38            // viestinäytön tekstin väriksi valkoinen
39            MessageDisplay.TextColor = Color.White;
40
41            // luodaan elämänäyttö
42            hitpointNaytto = new BarGauge(this);
43            hitpointNaytto.Size = new Vector2D(30, 250);
44            hitpointNaytto.Angle = Angle.Radians(Math.PI / 2);
45            hitpointNaytto.ValueColor = Color.LightGreen;
46            hitpointNaytto.BackColor = Color.Red;
47            hitpointNaytto.Max = 5;
48            hitpointNaytto.Position = new Vector2D(Screen.RightSafe - 300, Screen.TopSafe - 170);
49            Add(hitpointNaytto);
50        }
51        #endregion
52
53        #region KentänLataus
54        private void lataaUusiKentta()
55        {
56            ClearPhysics();
57            Gravity = new Vector2D(-300, 0);
58
59            Level = luoKentta();
60
61            lisaaNappaimet();
62            Camera.Follow(pelaaja1);
63        }
64
65        Level luoKentta()
66        {
67            Level kentta = new Level(this, 800, 600);
68            kentta.CreateBorder();
69            kentta.BackgroundColor = Color.Black;
70
71            Texture2D bgtex = Content.Load<Texture2D>("bgtex");
72            kentta.Background.Image = bgtex;
73
74            lisaaPelaajat(kentta);
75
76            return kentta;
77        }
78
79        private void lisaaPelaajat(Level kentta)
80        {
81            Texture2D alus = Content.Load<Texture2D>("alus");
82            IShape pelaaja_shape = Shapes.CreateFromTexture(alus, new Vector2D(alus.Width, alus.Height), 8.0);
83
84            pelaaja1 = new BattleObject(pelaaja_shape, 15, 5);
85            pelaaja1.Texture = alus;
86
87            hitpointNaytto.BindTo(pelaaja1.HitPoints);
88            pelaaja1.HitpointsReachedZero += new EventHandler(rajahdys);
89
90            pelaaja1.MomentOfInertia = double.PositiveInfinity;
91            pelaaja1.IgnoresGravity = true;
92            pelaaja1.Restitution = 1.0;
93
94            AddCollisionHandler(pelaaja1, tormays);
95            kentta.Objects.Add(pelaaja1);
96
97            // luodaan ase
98            ase = new PlasmaCannon(new PlasmaParticle());
99            ase.SetOwner(pelaaja1, kentta);
100            ase.Visible = true;
101            ase.Size = new Vector2D(0, 0);
102            ase.Color = Color.SteelBlue;
103            ase.FireRate = 8;
104            ase.Power = new Meter<double>(5000, 5000, 5000);
105            ase.IgnoresGravity = true;
106            kentta.Objects.Add(ase);
107        }
108
109        void asetaAjastimet()
110        {
111            // esteiden luominen
112            Timer tm = new Timer();
113            tm.Interval = 2.0;
114            tm.Trigger += new Timer.TriggerHandler(spawnEste);
115            tm.Start();
116            AddTimer(tm);
117
118            // viholliset
119            Timer tm2 = new Timer();
120            tm2.Interval = 0.8;
121            tm2.Trigger += new Timer.TriggerHandler(spawnVihu);
122            tm2.Start();
123            AddTimer(tm2);
124        }
125
126        #endregion
127
128        #region Näppäimet
129
130        private void lisaaNappaimet()
131        {
132            ClearControls();
133
134            //Yleiset näppäimet
135            Controls.Listen(Keys.Enter, ButtonPosition.Pressed, UusiPeli);
136
137            // Pelaajan 1 näppäimet
138            const double nopeus = 450.0;
139            Controls.Listen(Keys.Left, ButtonPosition.Down, LiikuX, null, pelaaja1, -nopeus);
140            Controls.Listen(Keys.Right, ButtonPosition.Down, LiikuX, null, pelaaja1, nopeus);
141            Controls.Listen(Keys.Up, ButtonPosition.Down, LiikuY, null, pelaaja1, nopeus);
142            Controls.Listen(Keys.Down, ButtonPosition.Down, LiikuY, null, pelaaja1, -nopeus);
143            Controls.Listen(Keys.Space, ButtonPosition.Down, Ammu);
144        }
145
146        private Boolean UusiPeli(ControlEvent e)
147        {
148            lataaUusiKentta();
149            return true;
150        }
151
152        private Boolean Ammu(ControlEvent e)
153        {
154            // luodaan ammus
155            Projectile ammus = ase.Use();
156            if (ammus == null)
157                return false;
158
159            ammus.Position = ammus.Position + (Vector2D.FromLengthAndAngle(40, ase.Angle.Radian));
160            ammus.Push(ammus.Velocity); //?
161            ammus.IgnoresExplosions = true;
162
163            Level.Objects.Add(ammus);
164
165            return false;
166        }
167
168        private Boolean LiikuY(ControlEvent e)
169        {
170            PhysicsObject pelaaja = e.Parameter0.ToPhysicsObject();
171            double nopeus = e.Parameter1.ToDouble();
172
173            Vector2D v = new Vector2D(0, nopeus);
174            pelaaja.Hit(v);
175
176            return false;
177        }
178
179        private Boolean LiikuX(ControlEvent e)
180        {
181            PhysicsObject pelaaja = e.Parameter0.ToPhysicsObject();
182            double nopeus = e.Parameter1.ToDouble();
183
184            Vector2D v = new Vector2D(nopeus,0);
185            pelaaja.Hit(v);
186
187            return false;
188        }
189
190        //<--- näppäimiin liitetyt toiminnot loppuivat
191        #endregion
192
193        #region Tapahtumat
194
195        void rajahdys(object sender, EventArgs e)
196        {
197            PhysicsObject po = sender.ToPhysicsObject();
198            Explosion ex = new Explosion(po.Width * 1.25);
199            ex.Position = po.Position;
200            ex.Force = 2000;
201            Level.Objects.Add(ex);
202            po.Destroy();
203
204            if (po == pelaaja1)
205                ase.Destroy();
206        }
207
208        void tormays(Collision collision)
209        {
210            if (!(collision.Obj is BattleObject && collision.Other is BattleObject)) return;
211
212            BattleObject bo1 = (collision.Obj as BattleObject);
213            bo1.TakeDamage(new Damage(1));
214            BattleObject bo2 = (collision.Other as BattleObject);
215            bo2.TakeDamage(new Damage(1));
216        }
217
218        void spawnEste(Timer timer)
219        {
220            Texture2D tex = Content.Load<Texture2D>("laatikko");
221
222            IShape shape = Shapes.CreateFromTexture(
223                tex,
224                new Vector2D(
225                    RandomGen.NextDouble(20, 30),
226                    RandomGen.NextDouble(40, 120)
227                ),
228                10.0f
229            );
230
231            BattleObject obj = new BattleObject(shape,200,100);
232            obj.Texture = tex;
233
234            obj.X = Level.Right - (obj.Width / 2);
235            obj.Y = RandomGen.NextDouble(Level.Bottom+(obj.Height/2.0), Level.Top-(obj.Height/2.0));
236            obj.MomentOfInertia = double.PositiveInfinity;
237
238            AddCollisionHandler(obj, vasen_reuna_destroy);
239            Level.Objects.Add(obj);
240        }
241
242        void spawnVihu(Timer timer)
243        {
244        }
245
246        void vasen_reuna_destroy(Collision c)
247        {
248            if (c.Other == Level.LeftBorder)
249                c.Obj.Destroy();
250        }
251
252        #endregion
253    }
254}
Note: See TracBrowser for help on using the repository browser.