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

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