source: 2016/24/JesseH/Cubes/Cubes/Cubes/Cubes.cs @ 7378

Revision 7378, 7.6 KB checked in by karkaite, 3 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Cubes : PhysicsGame
10{
11    const double nopeus = 200;
12    const double hyppyNopeus = 700;
13    const int RUUDUN_KOKO = 40;
14
15    List<Hahmo> pelaajat = new List<Hahmo>();
16    GameObject maski;
17    int aktiivinenPelaaja = 0;
18    Image fredKuva = LoadImage("Fred");
19    Image avainKuva = LoadImage("avain");
20    Image lulaKuva = LoadImage("Lula");
21    Image brandonKuva = LoadImage("Brandon");
22    Image oviKuva = LoadImage("Ovi");
23    Image VasenKuva = LoadImage("Vasen");
24    Image OikeaKuva = LoadImage("Oikea");
25    Image maskiKuva = LoadImage("maski");
26    IntMeter pelaajiaMaalissa;
27
28    SoundEffect maaliAani = LoadSoundEffect("maali");
29
30    public override void Begin()
31    {
32        ClearAll();
33
34        MultiSelectWindow alkuValikko = new MultiSelectWindow("Cubes",
35"Aloitapeli", "PelinOhjeet", "Exit");
36        Add(alkuValikko);
37
38        alkuValikko.AddItemHandler(0, AloitaPeli);
39        alkuValikko.AddItemHandler(1, PelinOhjeet);
40        alkuValikko.AddItemHandler(2, Exit);
41        Level.Background.CreateGradient(Color.DarkGray, Color.Black);
42    }
43   
44    void PelinOhjeet()
45    {
46        ClearAll();
47        IsMouseVisible = true;
48        Label tekstikentta = new Label("Käytä Toisia Palikoita apuna. Vaihda pelaajaa Alt Näppäimestä");
49        Add(tekstikentta);
50        GameObject nappula = new GameObject(LoadImage("Nappula"));
51        nappula.Position = new Vector(0, -100);
52        Add(nappula);
53        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, Klikkaus, null, nappula);
54        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Begin, "Palaa valikkoon");
55   
56
57    }
58
59    void Klikkaus(GameObject nappula)
60    {
61        if (Mouse.IsCursorOn(nappula)) Begin();
62    }
63
64   
65    void AloitaPeli()
66    {
67        Gravity = new Vector(0, -1000);
68
69        LuoKentta();
70        LisaaNappaimet();
71        LuoPistelaskuri();
72        Camera.Follow(pelaajat[aktiivinenPelaaja]);
73        Camera.ZoomFactor = 1.2;
74        Camera.StayInLevel = true;
75    }
76    void LuoKentta()
77    {
78        TileMap kentta = TileMap.FromLevelAsset("kentta1");
79        kentta.SetTileMethod('#', LisaaTaso);
80        kentta.SetTileMethod('D', LisaaPortti);
81        kentta.SetTileMethod('Q', LisaaAvain);
82        kentta.SetTileMethod('*', LisaaOvi);
83        kentta.SetTileMethod('N', LisaaPelaaja, fredKuva, 0.5, hyppyNopeus * 0.5, "fred");
84        kentta.SetTileMethod('K', LisaaPelaaja, lulaKuva, 1.0, hyppyNopeus * 1.0, "lula");
85        kentta.SetTileMethod('L', LisaaPelaaja, brandonKuva, 1.5, hyppyNopeus * 1.5, "brandon");
86        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
87        Level.CreateBorders();
88        Level.Background.CreateGradient( Color.DarkGray, Color.Black);
89
90
91        maski = new GameObject(1600, 1600);
92        maski.Image = this.maskiKuva;
93        pelaajat[aktiivinenPelaaja].Add(maski);
94       
95    }
96
97    void LisaaTaso(Vector paikka, double leveys, double korkeus)
98    {
99        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
100        taso.Position = paikka;
101        taso.Color = Color.Black;
102        Add(taso);
103    }
104    void LisaaPortti(Vector paikka, double leveys, double korkeus)
105    {
106        PhysicsObject Portti = PhysicsObject.CreateStaticObject(leveys, korkeus);
107        Portti.Position = paikka;
108        Portti.Color = Color.Black;
109        Add(Portti);
110        Portti.Tag = "Portti";
111    }
112
113    void LisaaOvi(Vector paikka, double leveys, double korkeus)
114    {
115        PhysicsObject ovi = PhysicsObject.CreateStaticObject(leveys, korkeus);
116        ovi.IgnoresCollisionResponse = true;
117        ovi.Position = paikka;
118        ovi.Image = oviKuva;
119        ovi.Tag = "Ovi";
120        Add(ovi);
121    }
122
123
124    void LisaaPelaaja(Vector paikka, double leveys, double korkeus, Image kuva, double kerroin, double hyppyNopeus, string nimi)
125    {
126        Hahmo pelaaja = new Hahmo(leveys * kerroin, korkeus * kerroin);
127        pelaaja.Position = paikka;
128        pelaaja.Mass = 1.0;
129        pelaaja.Image = kuva;
130        pelaaja.Tag = nimi;
131        AddCollisionHandler(pelaaja, "Ovi", TormaaMaaliin);
132        AddCollisionHandler(pelaaja, "Avain", TormaaAvaimeen);
133        Add(pelaaja);
134        pelaajat.Add(pelaaja);
135        pelaaja.Hyppynopeus = hyppyNopeus;
136
137    }
138
139
140    void LuoPistelaskuri()
141    {
142        pelaajiaMaalissa = new IntMeter(0);
143
144        Label pelaajaNaytto = new Label();
145        pelaajaNaytto.X = Screen.Left + 100;
146        pelaajaNaytto.Y = Screen.Top - 100;
147        pelaajaNaytto.TextColor = Color.White;
148        pelaajaNaytto.Color = Color.Transparent;
149
150        pelaajaNaytto.BindTo(pelaajiaMaalissa);
151        Add(pelaajaNaytto);
152    }
153
154    void LisaaNappaimet()
155    {
156        Keyboard.Listen(Key.LeftAlt, ButtonState.Pressed, VaihdaPelaajaa, "vaihda pelaaja");
157        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
158        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
159
160        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", -nopeus);
161        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", nopeus);
162        Keyboard.Listen(Key.Space, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää");
163        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää");
164
165
166
167
168
169    }
170    void VaihdaPelaajaa()
171    {
172        pelaajat[aktiivinenPelaaja].Remove(maski);
173        aktiivinenPelaaja++;
174        if (aktiivinenPelaaja > pelaajat.Count - 1)
175        {
176            aktiivinenPelaaja = 0;
177        }
178        Camera.Follow(pelaajat[aktiivinenPelaaja]);
179       
180        pelaajat[aktiivinenPelaaja].Add(maski);
181    }
182    void Liikuta(double nopeus)
183    {
184        pelaajat[aktiivinenPelaaja].Walk(nopeus);
185    }
186
187    void Hyppaa()
188    {
189        pelaajat[aktiivinenPelaaja].Jump(pelaajat[aktiivinenPelaaja].Hyppynopeus);
190    }
191
192    void TormaaMaaliin(PhysicsObject hahmo, PhysicsObject tahti)
193    {
194        if (pelaajat[aktiivinenPelaaja].Equals(hahmo))
195        {
196            pelaajat.Remove(pelaajat[aktiivinenPelaaja]);
197            VaihdaPelaajaa();
198        }
199        else
200        {
201            for (int i = 0; i < pelaajat.Count-1; i++)
202            {
203                if (pelaajat[i].Equals(hahmo)) pelaajat.Remove(pelaajat[i]);
204            }
205        }
206        hahmo.Destroy();
207        pelaajiaMaalissa.Value++;
208
209        if (pelaajiaMaalissa.Value >= 3)
210        {
211            MessageDisplay.Add("You Win!");
212            tahti.Destroy();
213            Timer.SingleShot(3, LoppuValikko);
214       
215        }
216    }
217    void LisaaAvain(Vector paikka, double leveys, double korkeus)
218    {
219
220        PhysicsObject Avain = PhysicsObject.CreateStaticObject(leveys, korkeus);
221        Avain.Position = paikka;
222        Avain.Color = Color.Black;
223        Add(Avain);
224        Avain.Image = avainKuva;
225        Avain.Tag = "Avain";
226    }
227    void TormaaAvaimeen(PhysicsObject hahmo, PhysicsObject Avain)
228    {
229        List<GameObject> portit = GetObjects(o => o.Tag.ToString() == "Portti");
230        portit.ForEach(o => o.Destroy());
231    }
232    void LoppuValikko()
233    {
234        MultiSelectWindow alkuValikko = new MultiSelectWindow("valikko", "Again? ","Exit?");
235        Add(alkuValikko);
236        alkuValikko.AddItemHandler(0, Again);
237        alkuValikko.AddItemHandler(1, Exit);
238    }
239    void Again()
240    {
241        ClearAll();
242        pelaajat.Clear();
243        Begin();
244    }
245}
Note: See TracBrowser for help on using the repository browser.