source: 2010/23/hniemi/ShootEmUp/ShootEmUp/Peli.cs @ 719

Revision 719, 6.2 KB checked in by hniemi, 10 years ago (diff)

Shootemupin runko lisätty.

Line 
1using System;
2using Jypeli;
3using Jypeli.ScreenObjects;
4using Jypeli.Assets;
5using System.Collections.Generic;
6
7namespace ShootEmUp
8{
9    public class Peli : PhysicsGame
10    {
11        private Alus pelaajaAlus;
12        private PhysicsObject exitZone;
13
14        private const double nopeus = 300;
15        private Vector nopeusPysty = new Vector(0,nopeus);
16        private Vector nopeusVaaka = new Vector(nopeus, 0);
17
18        private PhysicsObject vasenLaita;
19        private PhysicsObject oikeaLaita;
20
21        protected override void Begin()
22        {
23           
24            LataaKentta();
25        }
26
27        void LataaKentta()
28        {
29            Level.Width = 600;
30            Level.Height = 800;
31
32            vasenLaita = Level.CreateLeftBorder();
33            oikeaLaita = Level.CreateRightBorder();
34
35           
36
37            exitZone = PhysicsObject.CreateStaticObject(Level.Width, 200);
38            exitZone.Position = new Vector(Level.Center.X, Level.Bottom - exitZone.Size.Y/2 - 5);
39            Add(exitZone);
40
41            LuoPelaaja();
42            LataaKontrollit(pelaajaAlus);
43            //LataaTausta();
44            LataaViholliset();
45        }
46
47        void LuoPelaaja()
48        {
49            pelaajaAlus = new Alus(40, 50, 10);
50            pelaajaAlus.Shape = Shapes.Triangle;
51            pelaajaAlus.Image = LoadImage("pelaajaAlus");
52
53            pelaajaAlus.Y = Level.Bottom + 40;
54            pelaajaAlus.Color = Color.Black;
55            pelaajaAlus.CanRotate = false;
56            pelaajaAlus.KineticFriction = 1;
57            pelaajaAlus.Mass = 100000;
58
59            AddCollisionHandler(pelaajaAlus, PelaajaTormaa);
60            Add(pelaajaAlus);
61        }
62
63        /// <summary>
64        /// Asettaa kontrollit ohjaamaan haluttua alusta
65        /// </summary>
66        /// <param name="pelaaja">Alus, jota halutaan ohjata</param>
67        void LataaKontrollit(Alus pelaaja)
68        {
69            Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Lopettaa pelin");
70            Keyboard.Listen(Key.Up, ButtonState.Down, Liikuta, "Liikuttaa alusta ylös", pelaaja, nopeusPysty);
71            Keyboard.Listen(Key.Up, ButtonState.Released, pelaaja.StopVertical, null);
72            Keyboard.Listen(Key.Down, ButtonState.Down, Liikuta, "Liikuttaa alusta alas", pelaaja, -nopeusPysty);
73            Keyboard.Listen(Key.Down, ButtonState.Released, pelaaja.StopVertical, null);
74            Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikuttaa alusta vasemmalle", pelaaja, -nopeusVaaka);
75            Keyboard.Listen(Key.Left, ButtonState.Released, pelaaja.StopHorizontal, null);
76            Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikuttaa alusta oikealle", pelaaja, nopeusVaaka);
77            Keyboard.Listen(Key.Right, ButtonState.Released, pelaaja.StopHorizontal, null);
78        }
79
80        void Liikuta(Alus alus, Vector suunta)
81        {
82            if (-nopeus < alus.Velocity.Y && alus.Velocity.Y < nopeus && suunta.Y != 0)
83            {
84                alus.Velocity += suunta;
85            }
86            if (-nopeus < alus.Velocity.X && alus.Velocity.X < nopeus && suunta.X != 0)
87            {
88                alus.Velocity += suunta;
89            }
90           
91        }
92
93        void LataaViholliset()
94        {
95            List<AikaTapahtuma> vihollistenTuloajat = new List<AikaTapahtuma>();
96            vihollistenTuloajat.Add(new AikaTapahtuma(3, LahetaPerusvihollinen));
97
98
99            foreach (AikaTapahtuma tapahtuma in vihollistenTuloajat)
100            {
101                Timer ajastin = new Timer();
102                ajastin.LimitTimes(1);
103                ajastin.Interval = tapahtuma.Aika;
104                ajastin.Trigger += tapahtuma.Tapahtuma;
105                Add(ajastin);
106                ajastin.Start();
107            }
108        }
109
110        /// <summary>
111        /// Luo alukset ja lähettää ne matkaan
112        /// </summary>
113        /// <param name="sender">Ei käytössä</param>
114        void LahetaPerusvihollinen(Timer sender)
115        {
116
117
118            List<Alus> alukset = new List<Alus>();
119
120            Image vihollisenKuva = LoadImage("vihollinen" + 1);
121
122            for (int i = 0; i < 10; i++)
123            {
124                alukset.Add(new Alus(50, 50, 1));
125                alukset[i].Shape = Shapes.Rectangle;
126                alukset[i].Color = Color.Black;
127                alukset[i].Image = vihollisenKuva;
128                Add(alukset[i]);
129                AddCollisionHandler(alukset[i], VihollinenPoistuu);
130            }
131
132            List<Vector> reitti = new List<Vector>();
133            reitti.Add(new Vector(Level.Center.X, Level.Top + alukset[0].Size.Y / 2 + 10));
134            reitti.Add(new Vector(-40, 0));
135            reitti.Add(new Vector(100, 0));
136            reitti.Add(new Vector(Level.Center.X, Level.Bottom - alukset[0].Size.Y / 2 - 20));
137
138            Muodostelma muodostelma = new Muodostelma(alukset, reitti, LuoLahettaja());
139            muodostelma.MovingSpeed = 100;
140            muodostelma.Start();
141        }
142
143        void PelaajaTormaa(PhysicsObject tormaaja, PhysicsObject kohde)
144        {
145            if (kohde != vasenLaita && oikeaLaita != kohde) 
146            {
147                ((Alus)tormaaja).takeHit(5);
148                if (kohde is Alus) ((Alus)kohde).takeHit(20);
149            }
150        }
151
152        void VihollinenPoistuu(PhysicsObject tormaaja, PhysicsObject kohde)
153        {
154            if (kohde == exitZone) tormaaja.Destroy();
155        }
156
157        /// <summary>
158        /// Luo ajastimen, joka on triggeröi sekunnin välein.
159        /// Lisää myös ajastimen, joten voidaan kutsua suoraan Muodostelman muodostajassa.
160        /// </summary>
161        /// <returns></returns>
162        Timer LuoLahettaja()
163        {
164            Timer ajastin = new Timer();
165            ajastin.Interval = 1;
166            Add(ajastin);
167            return ajastin;
168        }
169
170    }
171
172    public class AikaTapahtuma 
173    {
174        public int Aika;
175        public Timer.TriggerHandler Tapahtuma;
176
177        public AikaTapahtuma(int aika, Timer.TriggerHandler tapahtuma)
178        {
179            this.Aika = aika;
180            this.Tapahtuma = tapahtuma;
181        }
182    }
183}
Note: See TracBrowser for help on using the repository browser.