source: elias_y/Ammuntapeli09/Peli.cs @ 149

Revision 149, 7.8 KB checked in by elalylon, 11 years ago (diff)

Tein Ammuntapeliä eteenpäin.

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 Ammuntapeli09
20{
21    public class Peli : PhysicsGame
22    {
23        const int aikaaKentassa = 30;
24
25        bool Pelikäynnissä = false;
26
27        int pisteidenmaara = 0;
28
29        GameObject Tähtäin;
30
31        Meter<double> aikaLaskuri;  // laskee aikaa
32
33        ValueDisplay aikaNaytto;    // näyttää ajan
34
35        HighScoreList Top5;
36
37        protected override void LoadContent()
38        {
39            AlustaPeli();
40
41            MessageDisplay.Add("Ammu " + aikaaKentassa + " sekunnissa niin monta palloa kuin pystyt. Paina Enter aloittaaksesi pelin.");
42
43            Controls.Listen(Keys.Enter, ButtonPosition.Down, AloitaPeli);
44
45            Top5 = HighScoreList.LoadOrCreate(this, "Top5Ammuntapeli.txt", 5);
46        }
47
48
49
50
51        private void AjanLaskenta()
52        {
53            aikaLaskuri = new Meter<double>(30, 0, aikaaKentassa);  // aikaLaskurin oletuksena on 30 sekuntia, minimiarvona 0 sekuntia ja maksimiarvona 30 sekuntia
54
55            aikaNaytto = new ValueDisplay(this);         // luo uuden aikaNayton
56
57            aikaNaytto.ValueColor = Color.Red;
58
59            aikaNaytto.Text = "Aikaa jäljellä: ";          // laitetaan näytöllä näkyvä teksti
60
61            aikaNaytto.TextColor = Color.Red;          // vaihdetaan tekstin väriä
62
63            aikaNaytto.FormatDouble(0, true);            // asetetaan näyttämään aika siten, ettei siinä näy yhtään (0) desimaalia
64
65            aikaNaytto.BindTo(aikaLaskuri);              // liitetään aikaNaytto aikaLaskuriin
66
67            aikaLaskuri.LowerLimit += new Meter<double>.OnLimitHandler(AikaLoppui);  // asetetaan tapahtuma, kun aikaLaskurin arvona on 0.
68
69            Add(aikaNaytto);                             // lisätään aikaNaytto peliin
70
71            aikaLaskuri.Reset();
72
73            aikaNaytto.Visible = true;
74        }
75
76
77
78        protected override void OnUpdate(GameTime time)
79        {
80            if (aikaLaskuri != null)
81            {
82                aikaLaskuri.Value -= time.ElapsedGameTime.TotalSeconds;      // päivittää aikalaskuria siten, että arvosta vähennetään kulunut aika
83            }
84
85            base.OnUpdate(time);
86        }
87
88
89
90        private void AikaLoppui(Meter<double> sender)
91        {
92            aikaLaskuri = null;
93
94            MessageDisplay.Position = new Vector2D( -75, 0 );
95
96            MessageDisplay.Clear();
97
98            MessageDisplay.Add("Aika loppui...\nSait " + pisteidenmaara + " pistettä.\nPaina Enter\npelataksesi uudelleen.");  // näytetään viestinäytöllä teksti
99
100            Pelikäynnissä = false;
101
102            InputQueryWindow PelaajanNimi = new InputQueryWindow(this);
103
104            PelaajanNimi.X = 0;
105
106            PelaajanNimi.Y = 200;
107           
108            PelaajanNimi.Title = "Kirjoita nimesi";
109
110            PelaajanNimi.InputConfirmed += new InputQueryWindow.InputHandler(Nimensyotto);
111
112            ShowWindow(PelaajanNimi);
113
114            foreach (var o in Level.Objects)
115            {
116                if (o is PhysicsObject)
117                {
118                    PhysicsObject pallo = o as PhysicsObject;
119
120                    pallo.Visible = false;
121
122                    pallo.IgnoresCollisionResponse = false;
123                }
124            }
125
126            aikaNaytto.Visible = false;
127
128            Top5.ScreenList.X = 0;
129
130            Top5.ScreenList.Y = -100;
131
132        }
133
134        void Nimensyotto(InputQueryWindow sender, string input)
135        {
136            Top5.AddScore(input, pisteidenmaara);
137
138            Top5.ScreenList.ItemColor = Color.Red;
139
140            Top5.Show();
141
142        }
143
144
145       
146
147        void LuoTähtäin()
148        {
149            IShape ympyra = Shapes.CreateCircle(20.0);
150
151            Tähtäin = new GameObject(ympyra);
152
153            Texture2D Tähtäinkuva = Content.Load<Texture2D>("Tähtäin (hiiri)");
154
155            Tähtäin.Texture = Tähtäinkuva;
156
157            Tähtäin.Size = new Vector2D(64, 64);
158
159            Level.Objects.Add(Tähtäin);
160
161            Controls.Listen(MouseButtons.None, ButtonPosition.Irrelevant, 0, Liikutatahtainta);
162
163            Controls.Mouse.UseCursor = true;
164        }
165
166
167
168
169        bool Liikutatahtainta(ControlEvent e)
170        {
171            Tähtäin.Position = Controls.Mouse.GetPositionOnWorld(Camera);
172
173            return false;
174        }
175
176
177        private void AlustaPeli()
178        {
179            Level.BackgroundColor = Color.Black;
180
181            MessageDisplay.TextColor = Color.Red;
182
183            MessageDisplay.MessageTimeInSeconds = 60;
184
185            MessageDisplay.X = -400;
186
187            MessageDisplay.Y = 0;
188           
189            Level.CreateBorder(1.0, false);
190
191            LuoTähtäin();
192
193            LuoPallo();
194
195        }
196
197
198
199        bool AloitaPeli(ControlEvent e)
200        {
201            pisteidenmaara = 0;
202
203            if (Pelikäynnissä)
204            {
205                return false;
206            }
207            Pelikäynnissä = true;
208
209            MessageDisplay.Clear();
210
211            MessageDisplay.X = -625;
212
213            MessageDisplay.Y = 500;
214
215            AjanLaskenta();
216
217           
218
219            foreach (var pallo in Level.Objects)
220            {
221                if (pallo is PhysicsObject)
222                {
223                    PallotLiikkeelle(pallo as PhysicsObject);
224                }
225            }
226
227            return false;
228        }
229
230        void LuoPallo()
231        {
232            for (int i = 0; i < 40; i++)
233            {
234                IShape ympyra = Shapes.CreateCircle(15.0);
235
236                PhysicsObject pallo = new PhysicsObject(10.0, ympyra);
237
238                Level.Objects.Add(pallo);
239
240                pallo.Restitution = 1.1;
241
242                Color vari = RandomGen.NextColor();
243
244                pallo.Color = vari;
245
246                pallo.Visible = false;
247
248                pallo.IgnoresCollisionResponse = true;
249
250                Controls.Listen(pallo, MouseButtons.Left, ButtonPosition.Pressed, 0, RajaytaPallo, null, pallo);
251            }
252        }
253
254        private void PallotLiikkeelle(PhysicsObject pallo)
255        {
256            pallo.Visible = true;   
257
258            pallo.IgnoresCollisionResponse = false;
259
260            SiirräKeskelle(pallo);
261
262            Vector2D PallotLiikkeelle = new Vector2D(RandomGen.NextInt(-2500, 2500), RandomGen.NextInt(-2500, 2500));
263
264            pallo.Hit(PallotLiikkeelle);                     
265        }
266
267
268
269
270        void SiirräKeskelle(PhysicsObject pallo)
271        {
272            pallo.X = 0;
273
274            pallo.Y = 0;
275        }
276
277
278
279
280        bool RajaytaPallo(ControlEvent e)
281        {
282            PhysicsObject pallo = e.GameObject.ToPhysicsObject();
283
284            if (!pallo.Visible)
285            {
286                return false;
287            }
288
289            Explosion rajahdys = new Explosion(60, 500, 0);
290
291            rajahdys.ShockwaveColor = Color.TransparentBlack;
292
293            rajahdys.Position = pallo.Position;
294
295            Level.Objects.Add(rajahdys);
296
297            pallo.Visible = false;
298
299            pallo.IgnoresCollisionResponse = true;
300
301            //Controls.DisableControls(0, pallo);
302
303            pisteidenmaara = pisteidenmaara + 15;
304
305            MessageDisplay.Clear();
306
307            MessageDisplay.Add("Pisteet:\n" + pisteidenmaara);
308
309            return false;
310        }
311
312    }
313}
Note: See TracBrowser for help on using the repository browser.