source: 2017/utsjoki/ÁndeN/msPaint/msPaint/msPaint/msPaint.cs @ 10334

Revision 9214, 8.4 KB checked in by otosjahn, 2 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using Jypeli;
6using Jypeli.Assets;
7using Jypeli.Controls;
8using Jypeli.Effects;
9using Jypeli.Widgets;
10
11public class msPaint : PhysicsGame
12{
13    Image taustaKuva = LoadImage("tausta");
14
15    Vector nopeusYlos = new Vector(0, 500);
16    Vector nopeusAlas = new Vector(0, -500);
17    Vector nopeusVasen = new Vector(-500, 0);
18    Vector nopeusOikea = new Vector(500, 0);
19
20    PhysicsObject pelaaja1;
21    PhysicsObject pelaaja2;
22
23    PhysicsObject vasenReuna;
24    PhysicsObject oikeaReuna;
25    PhysicsObject yläReuna;
26    PhysicsObject alaReuna;
27
28    SoundEffect splash = LoadSoundEffect("splash");
29   
30
31    public override void Begin()
32    {
33        LuoKentta();
34        AsetaOhjaimet();
35
36       
37    }
38
39    void LuoRuutu(Vector paikka, double leveys, double korkeus)
40    {
41        GameObject ruutu = new GameObject(leveys, korkeus);
42        ruutu.Position = paikka;
43        ruutu.Color = Color.Transparent;
44        Add(ruutu);
45    }
46
47    void LuoKentta()
48    {
49        TileMap kentta = TileMap.FromLevelAsset("kentta");
50        kentta.SetTileMethod('x', LuoRuutu);
51        kentta.Execute(50, 50);
52        LuoSanko1();
53        LuoSanko2();
54
55        pelaaja1 = LuoPelaaja1(RandomGen.NextDouble(Level.Left, Level.Right), RandomGen.NextDouble(Level.Bottom, Level.Top));
56        pelaaja2 = LuoPelaaja2(RandomGen.NextDouble(Level.Left, Level.Right), RandomGen.NextDouble(Level.Bottom, Level.Top));
57
58        vasenReuna = Level.CreateLeftBorder();
59        vasenReuna.Tag = "vasen";
60        vasenReuna.IsVisible = false;
61        vasenReuna.IgnoresCollisionResponse = true;
62
63        oikeaReuna = Level.CreateRightBorder();
64        oikeaReuna.Tag = "oikea";
65        oikeaReuna.IsVisible = false;
66        oikeaReuna.IgnoresCollisionResponse = true;
67
68        yläReuna = Level.CreateTopBorder();
69        yläReuna.Tag = "ylä";
70        yläReuna.IsVisible = false;
71        yläReuna.IgnoresCollisionResponse = true;
72
73        alaReuna = Level.CreateBottomBorder();
74        alaReuna.Tag = "ala";
75        alaReuna.IsVisible = false;
76        alaReuna.IgnoresCollisionResponse = true;
77
78        MediaPlayer.Play("moonlight3rd");
79
80        Level.Background.Image = taustaKuva;
81        Level.Background.TileToLevel();
82
83       
84
85        Camera.ZoomToLevel();
86    }
87
88    PhysicsObject LuoPelaaja1(double x, double y)
89    {
90        PhysicsObject pelaaja1 = new PhysicsObject(60.0, 60.0);
91        pelaaja1.Shape = Shape.Rectangle;
92        pelaaja1.X = x;
93        pelaaja1.Y = y;
94        pelaaja1.IsVisible = false;
95        Add(pelaaja1);
96        pelaaja1.Image = LoadImage("pelaaja1");
97        pelaaja1.CanRotate = false;
98        AddCollisionHandler(pelaaja1, "vasen", osuuVasempaan);
99        AddCollisionHandler(pelaaja1, "oikea", osuuOikeaan);
100        AddCollisionHandler(pelaaja1, "ylä", osuuYlös);
101        AddCollisionHandler(pelaaja1, "ala", osuuAlas);
102        AddCollisionHandler(pelaaja1, "sanko1", osuuSanko1);
103        AddCollisionHandler(pelaaja1, "sanko2", osuuSanko2);
104        GameObject kuva = new GameObject(60, 100);
105        kuva.Image = LoadImage("pelaaja1");
106        kuva.Y = 30;
107        pelaaja1.Add(kuva);
108
109
110        Timer ajastin = new Timer();
111        ajastin.Interval = 0.01;
112        ajastin.Timeout += delegate { Maalaa(pelaaja1); };
113        ajastin.Start();
114
115        return pelaaja1;
116    }
117
118    void osuuVasempaan(PhysicsObject pelaaja, PhysicsObject seinä)
119    {
120        pelaaja.X = oikeaReuna.Left - 50;
121    }
122
123    void osuuOikeaan(PhysicsObject pelaaja, PhysicsObject seinä)
124    {
125        pelaaja.X = vasenReuna.Right + 50;
126    }
127
128    void osuuYlös(PhysicsObject pelaaja, PhysicsObject seinä)
129    {
130        pelaaja.Y = alaReuna.Top + 70;
131    }
132
133    void osuuAlas(PhysicsObject pelaaja, PhysicsObject seinä)
134    {
135        pelaaja.Y = yläReuna.Bottom - 70;
136    }
137
138    PhysicsObject LuoPelaaja2(double x, double y)
139    {
140        PhysicsObject pelaaja2 = new PhysicsObject(60.0, 60.0);
141        pelaaja2.Shape = Shape.Rectangle;
142        pelaaja2.X = x;
143        pelaaja2.Y = y;
144        pelaaja2.IsVisible = false;
145        Add(pelaaja2);
146        pelaaja2.Image = LoadImage("pelaaja2");
147        pelaaja2.CanRotate = false;
148        AddCollisionHandler(pelaaja2, "vasen", osuuVasempaan);
149        AddCollisionHandler(pelaaja2, "oikea", osuuOikeaan);
150        AddCollisionHandler(pelaaja2, "ylä", osuuYlös);
151        AddCollisionHandler(pelaaja2, "ala", osuuAlas);
152        AddCollisionHandler(pelaaja2, "sanko1", osuuSanko1);
153        AddCollisionHandler(pelaaja2, "sanko2", osuuSanko2);
154        GameObject kuva = new GameObject(60, 100);
155        kuva.Image = LoadImage("pelaaja2");
156        kuva.Y = 30;
157        pelaaja2.Add(kuva);
158
159        Timer ajastin = new Timer();
160        ajastin.Interval = 0.01;
161        ajastin.Timeout += delegate { Maalaa(pelaaja2); };
162        ajastin.Start();
163
164        return pelaaja2;
165    }
166
167    void LuoSanko1()
168    {
169
170        PhysicsObject sanko = new PhysicsObject(50, 60);
171        sanko.X = RandomGen.NextDouble(Level.Left, Level.Right);
172        sanko.Y = RandomGen.NextDouble(Level.Bottom, Level.Top);
173        sanko.Image = LoadImage("sanko1");
174        Add(sanko);
175        sanko.IgnoresCollisionResponse = true;
176        sanko.MakeStatic();
177        sanko.Tag = "sanko1";
178
179       
180    }
181
182    void LuoSanko2()
183    {
184        PhysicsObject sanko = new PhysicsObject(50, 60);
185        sanko.X = RandomGen.NextDouble(Level.Left, Level.Right);
186        sanko.Y = RandomGen.NextDouble(Level.Bottom, Level.Top);
187        sanko.Image = LoadImage("sanko2");
188        Add(sanko);
189        sanko.IgnoresCollisionResponse = true;
190        sanko.MakeStatic();
191        sanko.Tag = "sanko2";
192    }
193
194    void osuuSanko1(PhysicsObject pelaaja, PhysicsObject sanko)
195    {
196        for (int y = -2; y < 3; y++)
197        {
198            for (int x = -2; x < 3; x++)
199            {
200                  MaalaaPaikka(pelaaja1, sanko.Position + new Vector(x, y) * 40);
201            }
202        }
203
204        sanko.X = RandomGen.NextDouble(Level.Left, Level.Right);
205        sanko.Y = RandomGen.NextDouble(Level.Bottom, Level.Top);
206
207        splash.Play();
208    }
209
210    void osuuSanko2(PhysicsObject pelaaja, PhysicsObject sanko)
211    {
212        for (int y = -2; y < 3; y++)
213        {
214            for (int x = -2; x < 3; x++)
215            {
216                MaalaaPaikka(pelaaja2, sanko.Position + new Vector(x, y) * 40);
217            }
218        }
219
220        splash.Play();
221
222        sanko.X = RandomGen.NextDouble(Level.Left, Level.Right);
223        sanko.Y = RandomGen.NextDouble(Level.Bottom, Level.Top);
224    }
225
226    void MaalaaPaikka(PhysicsObject pelaaja, Vector paikka)
227    {
228        GameObject ruutu = GetObjectAt(paikka);
229       
230        if(pelaaja==pelaaja1)
231        {
232            ruutu.Image = LoadImage("splat1");
233        }
234        if (pelaaja == pelaaja2)
235        {
236            ruutu.Image = LoadImage("splat2");
237        }
238    }
239
240    void Maalaa(PhysicsObject pelaaja)
241    {
242        MaalaaPaikka(pelaaja, pelaaja.Position + (pelaaja.Angle + Angle.FromDegrees(90)).GetVector() * 0);
243    }
244
245    void AsetaOhjaimet()
246    {
247        Keyboard.Listen(Key.W, ButtonState.Down, AsetaNopeus, null, pelaaja1, nopeusYlos, Angle.FromDegrees(0));
248        Keyboard.Listen(Key.S, ButtonState.Down, AsetaNopeus, null, pelaaja1, nopeusAlas, Angle.FromDegrees(180));
249        Keyboard.Listen(Key.A, ButtonState.Down, AsetaNopeus, null, pelaaja1, nopeusVasen, Angle.FromDegrees(90));
250        Keyboard.Listen(Key.D, ButtonState.Down, AsetaNopeus, null, pelaaja1, nopeusOikea, Angle.FromDegrees(270));
251
252        Keyboard.Listen(Key.Up, ButtonState.Down, AsetaNopeus, null, pelaaja2, nopeusYlos, Angle.FromDegrees(0));
253        Keyboard.Listen(Key.Down, ButtonState.Down, AsetaNopeus, null, pelaaja2, nopeusAlas, Angle.FromDegrees(180));
254        Keyboard.Listen(Key.Left, ButtonState.Down, AsetaNopeus, null, pelaaja2, nopeusVasen, Angle.FromDegrees(90));
255        Keyboard.Listen(Key.Right, ButtonState.Down, AsetaNopeus, null, pelaaja2, nopeusOikea, Angle.FromDegrees(270));
256
257        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
258        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
259       
260    }
261
262    void AsetaNopeus(PhysicsObject pelaaja, Vector nopeus, Angle kulma)
263    {
264        pelaaja.Velocity = nopeus;
265        pelaaja.Angle = kulma;
266    }
267}
Note: See TracBrowser for help on using the repository browser.