source: zhipeng_j/Avaruuspeli1/Peli.cs @ 310

Revision 310, 6.4 KB checked in by zhjiang, 12 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 Avaruuspeli1
20{
21    public class Peli : PhysicsGame
22    {
23        #region Muuttujat
24        BattleObject pelaaja1;
25        PlasmaCannon ase;
26
27        BarGauge hitpointNaytto;
28        Timer ajastin;
29        #endregion
30
31        #region Alustukset
32        protected override void LoadContent()
33        {
34            alustaNaytot();
35            lataaUusiKentta();
36        }
37
38        private void alustaNaytot()
39        {
40            // viestinäytön tekstin väriksi valkoinen
41            MessageDisplay.TextColor = Color.White;
42
43
44            // luodaan elämänäyttö
45            hitpointNaytto = new BarGauge(this);
46            hitpointNaytto.Size = new Vector2D(30, 250);
47            hitpointNaytto.Angle = Angle.Radians(Math.PI / 2);
48            hitpointNaytto.ValueColor = Color.LightGreen;
49            hitpointNaytto.BackColor = Color.Red;
50            hitpointNaytto.Max = 5;
51            hitpointNaytto.Position = new Vector2D(Screen.RightSafe - 300, Screen.TopSafe - 170);
52            Add(hitpointNaytto);
53        }
54        #endregion
55
56        #region KentänLataus
57        private void lataaUusiKentta()
58        {
59            ClearPhysics();
60
61            Level = luoKentta();
62
63            lisaaNappaimet();
64            Camera.Follow(pelaaja1);
65
66            MessageDisplay.Add("(Paina F1, niin saat näppäinohjeet.)");
67        }
68
69        Level luoKentta()
70        {
71            Level kentta = new Level(this, 4000, 4000);
72            kentta.CreateBorder();
73            kentta.Background.CreateStars();
74
75            lisaaPelaajat(kentta);
76
77            LuoLentokone(kentta);
78
79            return kentta;
80        }
81
82        private void lisaaPelaajat(Level kentta)
83        {
84            // Pelaaja 1
85            Texture2D alus = Content.Load<Texture2D>("sukellusvene");
86            pelaaja1 = new BattleObject(Shapes.CreateFromTexture(alus, new Vector2D(200, 100), 10), 10, 5);
87            pelaaja1.Texture = alus;
88            hitpointNaytto.BindTo(pelaaja1.HitPoints);
89            pelaaja1.HitpointsReachedZero += new EventHandler(rajahdys);
90
91            // Estää tahattoman pyörimisen
92            pelaaja1.MomentOfInertia = double.PositiveInfinity;
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.Color = Color.SteelBlue;
102            ase.FireRate = 1000;
103            ase.Power = new Meter<double>(5000, 5000, 5000);
104            kentta.Objects.Add(ase);
105        }
106        PhysicsObject LuoLentokone(Level kentta)
107        {
108            IShape ympyra = Shapes.CreateCircle(20.0);
109            PhysicsObject lentokone=new PhysicsObject (10.0 ,ympyra );
110            kentta .Objects .Add(lentokone );
111            lentokone.Texture = Content.Load<Texture2D>("lentokone" );
112            return lentokone;
113
114        }
115        #endregion
116
117        #region Näppäimet
118
119        private void lisaaNappaimet()
120        {
121            ClearControls();
122
123            //Yleiset näppäimet
124            Controls.Listen(Keys.Enter, ButtonPosition.Pressed, UusiPeli, "Aloittaa uuden pelin");
125
126            // Pelaajan 1 näppäimet
127            Controls.Listen(Keys.Left, ButtonPosition.Down, PyoritaAlusta, null, pelaaja1, Angle.Radians(0.05f));
128            Controls.Listen(Keys.Right, ButtonPosition.Down, PyoritaAlusta, null, pelaaja1, Angle.Radians(-0.05f));
129            Controls.Listen(Keys.Up, ButtonPosition.Down, KaytaMoottoria, "Käytä moottoria", pelaaja1, 500);
130            Controls.Listen(Keys.Space, ButtonPosition.Down, Ammu);
131
132            Controls.AddHelpText(PyoritaAlusta, "Pyörittää alusta");
133            Controls.AddHelpText(Ammu, "Ampuu");
134        }
135
136        // Näppäimiin liitetyt toiminnot alkavat tästä -->
137        private Boolean NaytaOhjeet(ControlEvent e)
138        {
139            ShowControlHelp(MessageDisplay);
140            return false;
141        }
142
143        private Boolean UusiPeli(ControlEvent e)
144        {
145            lataaUusiKentta();
146            return true;
147        }
148
149        private Boolean Ammu(ControlEvent e)
150        {
151            // luodaan ammus
152            Projectile ammus = ase.Use();
153            ammus.Position = ammus.Position + (Vector2D.FromLengthAndAngle(40, ase.Angle.Radian));
154            ammus.Push(ammus.Velocity); //?
155            ammus.IgnoresExplosions = true;
156
157            Level.Objects.Add(ammus);
158
159            return false;
160        }
161
162        private Boolean PyoritaAlusta(ControlEvent e)
163        {
164            PhysicsObject pelaaja = e.Parameter0.ToPhysicsObject();
165            pelaaja.Angle = pelaaja.Angle += e.Parameter1.ToAngle();
166            ase.Angle = pelaaja.Angle;
167            return false;
168        }
169
170        private Boolean KaytaMoottoria(ControlEvent e)
171        {
172            PhysicsObject pelaaja = e.Parameter0.ToPhysicsObject();
173            pelaaja.Hit(Vector2D.FromLengthAndAngle(e.Parameter1.ToDouble(), pelaaja.Angle.Radian));
174            return false;
175        }
176
177        //<--- näppäimiin liitetyt toiminnot loppuivat
178        #endregion
179
180        #region Tapahtumat
181       
182
183        void rajahdys(object sender, EventArgs e)
184        {
185            PhysicsObject po = sender.ToPhysicsObject();
186            Explosion ex = new Explosion(po.Width * 2);
187            ex.Position = po.Position;
188            ex.Force = 4000;
189            Level.Objects.Add(ex);
190            po.Destroy();
191        }
192
193        void tormays(Collision collision)
194        {
195            if (!(collision.Obj is BattleObject && collision.Other is BattleObject)) return;
196
197            BattleObject bo1 = (collision.Obj as BattleObject);
198            bo1.TakeDamage(new Damage(1));
199            BattleObject bo2 = (collision.Other as BattleObject);
200            bo2.TakeDamage(new Damage(1));
201        }
202        #endregion
203    }
204}
Note: See TracBrowser for help on using the repository browser.