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

Revision 7341, 5.8 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    int aktiivinenPelaaja = 0;
17    Image fredKuva = LoadImage("Fred");
18    Image avainKuva = LoadImage("avain");
19    Image lulaKuva = LoadImage("Lula");
20    Image brandonKuva = LoadImage("Brandon");
21    Image oviKuva = LoadImage("Ovi");
22    Image VasenKuva = LoadImage("Vasen");
23    Image OikeaKuva = LoadImage("Oikea");
24    IntMeter pelaajiaMaalissa;
25
26    SoundEffect maaliAani = LoadSoundEffect("maali");
27
28    public override void Begin()
29    {
30        Gravity = new Vector(0, -1000);
31
32        LuoKentta();
33        LisaaNappaimet();
34        LuoPistelaskuri();
35        Camera.Follow(pelaajat[aktiivinenPelaaja]);
36        Camera.ZoomFactor = 1.2;
37        Camera.StayInLevel = true;
38    }
39
40    void LuoKentta()
41    {
42        TileMap kentta = TileMap.FromLevelAsset("kentta1");
43        kentta.SetTileMethod('#', LisaaTaso);
44        kentta.SetTileMethod('D', LisaaPortti);
45        kentta.SetTileMethod('Q', LisaaAvain);
46        kentta.SetTileMethod('*', LisaaOvi);
47        kentta.SetTileMethod('N', LisaaPelaaja, fredKuva, 0.5, hyppyNopeus * 0.5, "fred");
48        kentta.SetTileMethod('K', LisaaPelaaja, lulaKuva, 1.0, hyppyNopeus * 1.0, "lula");
49        kentta.SetTileMethod('L', LisaaPelaaja, brandonKuva, 1.5, hyppyNopeus * 1.5, "brandon");
50        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
51        Level.CreateBorders();
52        Level.Background.CreateGradient(Color.LightGray, Color.Gray);
53    }
54
55    void LisaaTaso(Vector paikka, double leveys, double korkeus)
56    {
57        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
58        taso.Position = paikka;
59        taso.Color = Color.Black;
60        Add(taso);
61    }
62    void LisaaPortti(Vector paikka, double leveys, double korkeus)
63    {
64        PhysicsObject Portti = PhysicsObject.CreateStaticObject(leveys, korkeus);
65        Portti.Position = paikka;
66        Portti.Color = Color.Black;
67        Add(Portti);
68        Portti.Tag = "Portti";
69    }
70
71    void LisaaOvi(Vector paikka, double leveys, double korkeus)
72    {
73        PhysicsObject ovi = PhysicsObject.CreateStaticObject(leveys, korkeus);
74        ovi.IgnoresCollisionResponse = true;
75        ovi.Position = paikka;
76        ovi.Image = oviKuva;
77        ovi.Tag = "Ovi";
78        Add(ovi);
79    }
80
81
82    void LisaaPelaaja(Vector paikka, double leveys, double korkeus, Image kuva, double kerroin, double hyppyNopeus, string nimi)
83    {
84        Hahmo pelaaja = new Hahmo(leveys * kerroin, korkeus * kerroin);
85        pelaaja.Position = paikka;
86        pelaaja.Mass = 1.0;
87        pelaaja.Image = kuva;
88        pelaaja.Tag = nimi;
89        AddCollisionHandler(pelaaja, "Ovi", TormaaTahteen);
90        AddCollisionHandler(pelaaja, "Avain", TormaaAvaimeen);
91        Add(pelaaja);
92        pelaajat.Add(pelaaja);
93        pelaaja.Hyppynopeus = hyppyNopeus;
94    }
95
96
97    void LuoPistelaskuri()
98    {
99        pelaajiaMaalissa = new IntMeter(0);
100
101        Label pelaajaNaytto = new Label();
102        pelaajaNaytto.X = Screen.Left + 100;
103        pelaajaNaytto.Y = Screen.Top - 100;
104        pelaajaNaytto.TextColor = Color.White;
105        pelaajaNaytto.Color = Color.Transparent;
106
107        pelaajaNaytto.BindTo(pelaajiaMaalissa);
108        Add(pelaajaNaytto);
109    }
110
111    void LisaaNappaimet()
112    {
113        Keyboard.Listen(Key.LeftAlt, ButtonState.Pressed, VaihdaPelaajaa, "vaihda pelaaja");
114        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
115        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
116
117        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", -nopeus);
118        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", nopeus);
119        Keyboard.Listen(Key.Space, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää");
120        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää");
121
122
123
124
125
126    }
127    void VaihdaPelaajaa()
128    {
129        aktiivinenPelaaja++;
130        if (aktiivinenPelaaja > pelaajat.Count - 1)
131        {
132            aktiivinenPelaaja = 0;
133        }
134        Camera.Follow(pelaajat[aktiivinenPelaaja]);
135    }
136    void Liikuta(double nopeus)
137    {
138        pelaajat[aktiivinenPelaaja].Walk(nopeus);
139    }
140
141    void Hyppaa()
142    {
143        pelaajat[aktiivinenPelaaja].Jump(pelaajat[aktiivinenPelaaja].Hyppynopeus);
144    }
145
146    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
147    {
148
149        hahmo.Destroy();
150        pelaajiaMaalissa.Value++;
151
152        if (pelaajiaMaalissa.Value >= 3)
153        {
154            MessageDisplay.Add("You Win!");
155            tahti.Destroy();
156            Timer.SingleShot(3, LoppuValikko);
157       
158        }
159    }
160    void LisaaAvain(Vector paikka, double leveys, double korkeus)
161    {
162
163        PhysicsObject Avain = PhysicsObject.CreateStaticObject(leveys, korkeus);
164        Avain.Position = paikka;
165        Avain.Color = Color.Black;
166        Add(Avain);
167        Avain.Image = avainKuva;
168        Avain.Tag = "Avain";
169    }
170    void TormaaAvaimeen(PhysicsObject hahmo, PhysicsObject Avain)
171    {
172        List<GameObject> portit = GetObjects(o => o.Tag.ToString() == "Portti");
173        portit.ForEach(o => o.Destroy());
174    }
175    void LoppuValikko()
176    {
177        MultiSelectWindow alkuValikko = new MultiSelectWindow("valikko", "Again? ","Exit?");
178        Add(alkuValikko);
179        alkuValikko.AddItemHandler(0, Again);
180        alkuValikko.AddItemHandler(1, Exit);
181    }
182    void Again()
183    {
184        ClearAll();
185        pelaajat.Clear();
186        Begin();
187    }
188}
Note: See TracBrowser for help on using the repository browser.