source: 2010/30/lijiolva/Teh Bus Game/Peli.cs @ 1442

Revision 1442, 7.8 KB checked in by lijiolva, 11 years ago (diff)
Line 
1using System;
2using Jypeli;
3using Jypeli.Widgets;
4using Jypeli.Assets;
5using System.Collections.Generic;
6
7public class Peli : TopDownPhysicsGame
8{
9    Vector Vektori = new Vector();
10    List<Vector> bussinReitti;
11    List<GameObject> bussiReitinPisteet;
12    GameObject viimeisinPisteAlla;
13    PhysicsObject bussi;
14    int minuutti = 0;
15    int tunti = 0;
16    int id = 0;
17    int talojenlukumäärä = 0;
18    GameObject[] talotaulukko = new GameObject[100];
19    Dictionary<PhysicsObject, int> ihmisiaPysakilla = new Dictionary<PhysicsObject,int>();
20    int matkustajat = 0;
21    bool onkoPisteAlla;
22
23
24    protected override void Begin()
25    {
26
27       
28        bussinReitti = new List<Vector>();
29        bussiReitinPisteet = new List<GameObject>();
30       
31        KineticFriction = 0.8; // Asetetaan kitka
32       
33        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
34        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu");
35       
36        LuoBussi("Doublebus", 0, 0);
37
38        AsetaOhjaimet();
39        //IsFullScreen = true;
40       
41        Timer ajastin = new Timer();
42        ajastin.Interval = 5;
43        ajastin.Trigger += paivitaKello;
44        ajastin.Start();
45       
46        LuoTalo();
47        LuoTalo();
48        LuoTalo();
49        LuoTalo();
50        LuoTalo();
51        LuoTalo();
52        LuoTalo();
53        LuoTalo();
54        LuoTalo();
55        LuoTalo();
56        LuoTalo();
57        LuoTalo();
58        LuoTalo();
59        LuoTalo();
60        LuoTalo();
61        LuoTalo();
62        LuoTalo();
63       
64        Label kello = new Label();
65        kello.Text = tunti.ToString() + ":" + minuutti.ToString();
66        kello.TextColor = Color.Black;
67        kello.X = Screen.Right - 50;
68        kello.Y = Screen.Top - 25;
69        Add(kello);
70
71        ajastin.Tag = kello;
72       
73        ihmisiaPysakilla = new Dictionary<PhysicsObject, int>();
74        LuoLaatikko();
75       
76    }
77    void LuoTalo()
78    {
79        GameObject talo = new GameObject(80.0, 80.0);
80        talo.Position = RandomGen.NextVector(Level.Right, Level.Bottom, Level.Left, Level.Top);
81        talo.Tag = "talo";
82        talo.Color = Color.Yellow;
83        talotaulukko[talojenlukumäärä] = talo;
84        talojenlukumäärä++;
85        Add(talo);
86    }
87    void AsetaOhjaimet()
88    {
89        Mouse.IsCursorVisible = true;
90        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, LisaaReittipiste, "Siirry", bussi);
91        Mouse.Listen(MouseButton.Right, ButtonState.Pressed, PoistaReittipiste, "");
92        Mouse.ListenMovement(1.0, HiirenLiikutus, null);
93    }
94
95    void HiirenLiikutus(AnalogState hiirenTila)
96    {
97        bool onkoPaalla;
98        foreach (GameObject piste in bussiReitinPisteet)
99        {
100            onkoPaalla = Mouse.IsCursorOn(piste);
101            if (onkoPaalla)
102            {
103                piste.Color = Color.Green;
104                viimeisinPisteAlla = piste;
105                onkoPisteAlla = true;
106                continue;
107            }
108            else
109            {
110                piste.Color = Color.Red;
111                onkoPisteAlla = false;
112            }
113        }
114        MessageDisplay.Add(onkoPisteAlla.ToString());
115    }
116
117
118
119    void LisaaReittipiste(PhysicsObject auto)
120    { 
121        Vektori = Mouse.PositionOnWorld;
122        LisaaBussireitinPiste(Mouse.PositionOnWorld);
123        MessageDisplay.Add("Lisättiin " + bussinReitti[bussinReitti.Count - 1].X + " " + bussinReitti[bussinReitti.Count - 1].Y);
124    }
125
126    void PoistaReittipiste()
127    {
128        Vektori = Mouse.PositionOnWorld;
129        //auto.Push(Vektori);
130        //auto.Angle = Vektori.Angle;
131        if (onkoPisteAlla)
132        {
133            MessageDisplay.Add("poistetaan " + viimeisinPisteAlla.Position.X + " " + viimeisinPisteAlla.Position.Y);
134            bussiReitinPisteet.Remove(viimeisinPisteAlla);
135            bussinReitti.Remove(viimeisinPisteAlla.Position);
136            viimeisinPisteAlla.Destroy();
137            onkoPisteAlla = false;
138        }
139    }
140
141    void LisaaBussireitinPiste(Vector paikka)
142    {
143        bussinReitti.Add(paikka);
144        PhysicsObject piste = new PhysicsObject(5, 5);
145        piste.Tag = "piste";
146        piste.Color = Color.Red;
147        piste.Position = paikka;
148        piste.IgnoresCollisionResponse = true;
149        piste.IgnoresExplosions = true;
150        piste.IgnoresPhysicsLogics = true;
151        Add(piste);
152        bussiReitinPisteet.Add(piste);
153        AddCollisionHandler(piste, autoPoisto);
154    }
155
156    void LuoBussi(string tyyppi, double x, double y)
157    {
158        int kapasiteetti;
159        bussi = new PhysicsObject(40, 20);
160        PathFollowerBrain polkuaivot = new PathFollowerBrain();
161        LisaaBussireitinPiste(new Vector(x, y));
162        polkuaivot.Path = bussinReitti;
163        bussi.Brain = polkuaivot;
164        polkuaivot.Active = true;
165        polkuaivot.Speed = 150;
166        id += 1;
167        bussi.Mass = 5.0;
168        bussi.Color = new Color(10, 50, 60);
169        bussi.Tag = id;
170
171        if (tyyppi == "Smallbus") kapasiteetti = 30;
172        if (tyyppi == "Longbus") kapasiteetti = 60;
173        if (tyyppi == "Doublebus") kapasiteetti = 80;
174        Add(bussi);
175        AddCollisionHandler(bussi, kasittele);
176    }
177    void paivitaKello(Timer ajastin)
178    {
179        minuutti += 1;
180        if (minuutti == 60)
181        {
182            tunti += 1;
183            minuutti = 0;
184        }
185        if (tunti == 24)
186        {
187            tunti = 0;
188        }
189
190        Label kello = (Label)ajastin.Tag;
191        kello.Text = tunti.ToString() + ":" + minuutti.ToString();
192    }
193
194    void LuoLaatikko()
195    {
196        PhysicsObject laatikko = new PhysicsObject(40.0, 40.0);
197        laatikko.Position = RandomGen.NextVector(Level.Right, Level.Bottom, Level.Left, Level.Top);
198        laatikko.Tag = "laatikko";
199        laatikko.IgnoresCollisionResponse = true;
200        laatikko.IgnoresPhysicsLogics = true;
201        Add(laatikko);
202
203        int ihmisia = 0;
204        for (int a = 0; a < talojenlukumäärä; a++)
205        {
206            double talonXetaisyys = laatikko.Position.X - talotaulukko[a].Position.X;
207            double talonYetaisyys = laatikko.Position.Y - talotaulukko[a].Position.Y;
208
209            if (talonXetaisyys < 0)
210            {
211                talonXetaisyys = talonXetaisyys * -1;
212            }
213            if (talonYetaisyys < 0)
214            {
215                talonYetaisyys = talonYetaisyys * -1;
216            }
217            double talonEtaisyys = talonXetaisyys + talonYetaisyys;
218            if (talonEtaisyys < 300)
219            {
220                ihmisia++;
221            }
222        }
223        ihmisiaPysakilla.Add(laatikko, ihmisia);
224        MessageDisplay.Add("Hemmoja jollakin pysäkillä: " + ihmisiaPysakilla.ToString());
225    }
226
227    void kasittele(GameObject auto, PhysicsObject kohde)
228    {
229
230        if (kohde.Tag == "laatikko")
231        {
232            MessageDisplay.Add("Ihmisia pysäkillä" + ihmisiaPysakilla[kohde].ToString());
233            MessageDisplay.Add("Matkustajia linja-autossa" + matkustajat.ToString());
234
235            if (ihmisiaPysakilla[kohde] > 0)
236            {
237                matkustajat = matkustajat + ihmisiaPysakilla[kohde];
238                ihmisiaPysakilla[kohde] = 0;
239            }
240            else
241            {
242                MessageDisplay.Add("Tämä pysäkki on tyhjä");
243            }
244            MessageDisplay.Add("Ihmisia pysäkillä" + ihmisiaPysakilla[kohde].ToString());
245            MessageDisplay.Add("Matkustajia linja-autossa" + matkustajat.ToString());
246
247        }
248        if (kohde.Tag == "talo")
249            {
250                MessageDisplay.Add("Reitti on epäkelpo");
251
252            }
253       }
254    void autoPoisto(GameObject piste, PhysicsObject kohde)
255    { 
256   
257    }
258     
259
260}
Note: See TracBrowser for help on using the repository browser.