source: 2009/sara_h/Labyrintti_2/Peli.cs @ 8092

Revision 174, 10.2 KB checked in by samafrha, 11 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 Labyrintti_2
20{
21    public class Peli : PhysicsGame
22    {
23        PhysicsObject pallo1;
24        PhysicsObject pallo2;
25       
26        Meter<int> pistelaskuri;  // pitää yllä pisteitä
27        ValueDisplay pisteNaytto;  // näyttää pisteet
28        Meter<int> pistelaskuri2;  // pitää yllä pisteitä
29        ValueDisplay pisteNaytto2;  // näyttää pisteet
30
31        int keratytLuut;
32
33        protected override void LoadContent()
34        {
35            keratytLuut = 0;
36            pistelaskuri = new Meter<int>(0, 0, 16);                // oletusarvona on 0, minimiarvona on myös 0 ja maksimiarvona on 100.
37            pistelaskuri.UpperLimit += new Meter<int>.OnLimitHandler(LuutKeratty);  // liitetään tapahtuma, kun maksimiarvo on saavutettu eli kun 100 pistettä on täynnä
38
39            pisteNaytto = new ValueDisplay(this);                    // luodaan pisteNaytto
40            pisteNaytto.HorizontalOrigin = HorizontalAlignment.Left;   // asetetaan pisteNayton nollakohdaksi vasen reuna
41            pisteNaytto.VerticalOrigin = VerticalAlignment.Top;        // ja yläreuna
42            pisteNaytto.Text = "Pelaaja 1: Luita kerätty ";                           // teksti, jonka näyttö näyttää
43            pisteNaytto.X = Screen.RightSafe - 250;                    // asetetaan pistenäytön x-koordinaatiksi ruudun oikea reuna, josta on vähennetty 250 pikseliä, jotta näyttö sopii ruudulle
44            pisteNaytto.Y = Screen.TopSafe;                            // asetetaan pistenäytön y-koordinaatiksi ruudun yläreuna
45            pisteNaytto.BindTo(pistelaskuri);                        // liitetään pisteNaytto pistelaskuriin
46            Add(pisteNaytto);
47
48            pistelaskuri2 = new Meter<int>(0, 0, 16);                // oletusarvona on 0, minimiarvona on myös 0 ja maksimiarvona on 100.
49            pistelaskuri2.UpperLimit += new Meter<int>.OnLimitHandler(LuutKeratty);  // liitetään tapahtuma, kun maksimiarvo on saavutettu eli kun 100 pistettä on täynnä
50
51            pisteNaytto2 = new ValueDisplay(this);                    // luodaan pisteNaytto
52            pisteNaytto2.HorizontalOrigin = HorizontalAlignment.Left;   // asetetaan pisteNayton nollakohdaksi vasen reuna
53            pisteNaytto2.VerticalOrigin = VerticalAlignment.Top;        // ja yläreuna
54            pisteNaytto2.Text = "Pelaaja 2: Luita kerätty ";                           // teksti, jonka näyttö näyttää
55            pisteNaytto2.X = Screen.RightSafe - 250;                    // asetetaan pistenäytön x-koordinaatiksi ruudun oikea reuna, josta on vähennetty 250 pikseliä, jotta näyttö sopii ruudulle
56            pisteNaytto2.Y = Screen.TopSafe - 30;                            // asetetaan pistenäytön y-koordinaatiksi ruudun yläreuna
57            pisteNaytto2.BindTo(pistelaskuri2);                        // liitetään pisteNaytto pistelaskuriin
58            Add(pisteNaytto2);   
59           
60            pallo1 = LuoPallo(Level.Left + 25, Level.Top - 25);
61            pallo2 = LuoPallo(-80, -40);
62            pallo1.Texture = Content.Load<Texture2D>("koira 1");
63            pallo2.Texture = Content.Load<Texture2D>("koira 2");
64           
65
66            // Tehdään seinät: leveys, korkeus, x-koordinaatti, y-koordinaatti
67            LuoSeina(180, 40, -500, 325 );
68            LuoSeina(40, 150, -570, 380);           
69            LuoSeina(40, 100, -480, 465);
70            LuoSeina(40, 135, -390, 330);
71            LuoSeina(180, 40, -320, 400);
72            LuoSeina(40, 115, -250, 360);
73            LuoSeina(90, 40, -275, 300);
74            LuoSeina(40, 135, -160, 350);
75            LuoSeina(40, 150, -70, 350);
76            LuoSeina(40, 160, -570, 130);
77            LuoSeina(40, 50, -570, 280);
78            LuoSeina(40, 50, -340, 500);
79            LuoSeina(40, 50, -250, 500);
80            LuoSeina(160, 40, -130, 200);
81            LuoSeina(40, 40, -20, 100);
82            LuoSeina(40, 100, -20, -20);
83            LuoSeina(40, 90, -300, 180);
84            LuoSeina(120, 40, -100, -90);
85            LuoSeina(40, 150, -180, 70);
86            LuoSeina(40, 40, -100, 100);
87            LuoSeina(150, 40, -320, 15);
88            LuoSeina(40, 130, -375, -40);
89            LuoSeina(40, 100, -390, 150);
90            LuoSeina(60, 40, -470, 20);
91            LuoSeina(40, 100, -490, 50);
92            LuoSeina(40, 40, -460, -85);
93            LuoSeina(40, 40, -490, -85);
94            LuoSeina(40, 65, -530, -30);
95            LuoSeina(40, 50, -615, 25);
96
97            LuoSeina(40, 635, 20, 205);//reuna
98            LuoSeina(690, 40, -305, -125);
99           
100
101
102            LuoLuu(-15, 50);
103            LuoLuu(-210, 135);
104            LuoLuu(-300, 330);
105            LuoLuu(-280, 370);
106            LuoLuu(-360, 370);
107            LuoLuu(-370, 505);
108            LuoLuu(-310, 505);
109            LuoLuu(-30, 505);
110            LuoLuu(-510, 505);
111            LuoLuu(-420, 355);
112            LuoLuu(-420, 295);
113            LuoLuu(-460, 50);
114            LuoLuu(-460, -55);
115            LuoLuu(-500, -10);
116            LuoLuu(-600, 60);
117            LuoLuu(-630, 60);
118            LuoLuu(-520, 20);
119            LuoLuu(-620, -85);
120            LuoLuu(-530, -85);
121            LuoLuu(-330, -80);
122            LuoLuu(-300, -80);
123            LuoLuu(-300, 50);
124
125            AsetaOhjaimet();
126            Level.CreateBorder();
127           
128        }
129
130        void AsetaOhjaimet()
131        {
132
133            //Pelaajan 1 näppäimet
134            Controls.Listen(Keys.Up, ButtonPosition.Down, LiikutaPalloa, "Pelaaja 1 liikkuu ylöspäin", pallo1, new Vector2D(0, 1000));
135            //Controls.Listen(Keys.W, ButtonPosition.Released, PysaytaLiike, null, pallo1);
136            Controls.Listen(Keys.Down, ButtonPosition.Down, LiikutaPalloa, "Pelaaja 1 liikkuu alaspäin", pallo1, new Vector2D(0, -1000));
137            Controls.Listen(Keys.Left, ButtonPosition.Down, LiikutaPalloa, "Pelaaja 1 liikkuu vasemmalle", pallo1, new Vector2D(-1000, 0));
138            Controls.Listen(Keys.Right, ButtonPosition.Down, LiikutaPalloa, "Pelaaja 1 liikkuu oikealle", pallo1, new Vector2D(1000, 0));
139
140            //Pelaajan 1 näppäimet
141            Controls.Listen(Keys.W, ButtonPosition.Down, LiikutaPalloa, "Pelaaja 2 liikkuu ylöspäin", pallo2, new Vector2D(0, 1000));
142            //Controls.Listen(Keys.W, ButtonPosition.Released, PysaytaLiike, null, pallo1);
143            Controls.Listen(Keys.S, ButtonPosition.Down, LiikutaPalloa, "Pelaaja 2 liikkuu alaspäin", pallo2, new Vector2D(0, -1000));
144            Controls.Listen(Keys.A, ButtonPosition.Down, LiikutaPalloa, "Pelaaja 2 liikkuu vasemmalle", pallo2, new Vector2D(-1000, 0));
145            Controls.Listen(Keys.D, ButtonPosition.Down, LiikutaPalloa, "Pelaaja 2 liikkuu oikealle", pallo2, new Vector2D(1000, 0));
146
147
148        }
149
150        PhysicsObject LuoLuu(double x, double y)
151    {
152            IShape suorakaide = Shapes.CreateRectangle(20.0, 20.0);
153            PhysicsObject luu = new PhysicsObject(10.0, suorakaide);
154            luu.Color = Color.Chocolate;
155            luu.X = x;
156            luu.Y = y;
157            Level.Objects.Add(luu);
158            AddCollisionHandler(luu, OsuttiinLuuhun);
159            luu.Texture = Content.Load<Texture2D>("luu");           
160            return luu;
161    }
162
163        PhysicsObject LuoPallo(double x, double y)
164        {
165            IShape ympyra = Shapes.CreateCircle(20.0);
166            PhysicsObject pallo = new PhysicsObject(5,ympyra);
167            pallo.Body.LinearDamping = 0.95;
168            pallo.X = x;
169            pallo.Y = y;
170            //pallo.Restitution = 1.0;
171            Level.Objects.Add(pallo);
172            return pallo;
173        }
174
175        void LuoSeina(double leveys, double korkeus, double x, double y)
176        {
177            IShape suorakulmio = Shapes.CreateRectangle(leveys, korkeus);
178            PhysicsObject seina = PhysicsObject.CreateStaticObject(suorakulmio);
179            seina.X = x;
180            seina.Y = y;
181            Level.Objects.Add(seina);
182        }
183
184        Boolean LiikutaPalloa(ControlEvent e)
185        {
186            PhysicsObject pallo = e.Parameter0.ToPhysicsObject();
187            Vector2D suunta = e.Parameter1.ToVector2D();
188            pallo.Push(suunta);
189            return false; 
190
191           
192        }
193        PhysicsObject LuoMaali()
194        {
195            IShape ympyra = Shapes.CreateCircle(20.0);
196            PhysicsObject pallo = new PhysicsObject(10.0, ympyra);
197            Level.Objects.Add(pallo);
198            return pallo;
199        }
200
201        void OsuttiinLuuhun(Collision c)
202        {
203            if (c.Other == pallo1)
204            {
205                c.Obj.Lifetime.IsExpired = true;
206                pistelaskuri.Value++;       // lisää yhden pisteen               
207            }
208
209            if (c.Other == pallo2)
210            {
211                c.Obj.Lifetime.IsExpired = true;
212                pistelaskuri2.Value++;
213            }
214           
215            keratytLuut++;
216            /*
217            if (keratytLuut == 21)
218            {
219                MessageDisplay.Add("Pelaaja 1 keräsi " + pistelaskuri.Value + " luuta, pelaaja 2 keräsi " + pistelaskuri2.Value + " luuta.");
220                if (pistelaskuri.Value > pistelaskuri2.Value)
221                {
222                    MessageDisplay.Add("Pelaaja 1 voitti!");
223                }
224                else if (pistelaskuri.Value == pistelaskuri2.Value)
225                {
226                    MessageDisplay.Add("Tasapeli");
227                }
228                else
229                {
230                    MessageDisplay.Add("Pelaaja 2 voitti!");
231                }
232            }
233             */
234        }
235
236        private void LuutKeratty(Meter<int> po)
237        {
238            MessageDisplay.Add("Hienoa, kaikki luut on kerätty!");    // näytetään viestinäytöllä viesti
239        }
240
241    }
242}
Note: See TracBrowser for help on using the repository browser.