source: 2013/30/RikoV/PerusPeli4/PerusPeli3/PerusPeli3/PerusPeli3.cs.r4625 @ 4706

Revision 4706, 5.7 KB checked in by rikvalko, 6 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 PerusPeli3 : PhysicsGame
10{
11    Image pelaajanKuva = LoadImage("poliisi1");
12    Image vihollisenkuva = LoadImage("poliisi2");
13    Pyssymies pelaaja;
14
15    public override void Begin()
16    {
17        alkuvalikko();
18    }
19
20    void aloitapeli()
21    {
22        Mouse.IsCursorVisible = true;
23        Level.BackgroundColor = Color.Black;
24
25        Luokentta();
26        Camera.Follow(pelaaja);
27
28        Keyboard.Listen(Key.Escape, ButtonState.Pressed, pausevalikko, "Lopeta peli");
29
30        Keyboard.Listen(Key.Up, ButtonState.Down, Liikutapelaajaa, "liikuttaa pelaajaa", pelaaja, new Vector(0, 30));
31        Keyboard.Listen(Key.Down, ButtonState.Down, Liikutapelaajaa, "liikuttaa pelaajaa", pelaaja, new Vector(0, -30));
32        Keyboard.Listen(Key.Left, ButtonState.Down, Liikutapelaajaa, "liikuttaa pelaajaa", pelaaja, new Vector(-30, 0));
33        Keyboard.Listen(Key.Right, ButtonState.Down, Liikutapelaajaa, "liikuttaa pelaajaa", pelaaja, new Vector(30, 0));
34
35        Mouse.ListenMovement(0.0, KuunteleLiiketta, null);
36        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, Ammu, "Ammu aseella.", pelaaja.Ase);
37    }
38
39    void pausevalikko()
40    {
41        Pause();
42        MultiSelectWindow pausevalikko = new MultiSelectWindow("taukovalikko", "Jatka peliä", "lopeta");
43        Add(pausevalikko);
44        pausevalikko.AddItemHandler(0, Pause);
45        pausevalikko.AddItemHandler(1, alkuvalikko);
46           
47    }
48
49    void alkuvalikko()
50    {
51        ClearAll();
52        MultiSelectWindow alkuValikko = new MultiSelectWindow("Alkuvalikko", "Aloita peli", "Parhaat pisteet", "Lopeta");
53        alkuValikko.DefaultCancel = 2;
54        Add(alkuValikko);
55       
56        alkuValikko.AddItemHandler(0, aloitapeli);
57        //alkuValikko.AddItemHandler(1, ParhaatPisteet);
58        alkuValikko.AddItemHandler(2, Exit);
59    }
60
61    void KuunteleLiiketta(AnalogState hiirenTila)
62    {
63        pelaaja.Angle = (Mouse.PositionOnWorld - pelaaja.Position).Angle;
64    }
65
66    void Liikutapelaajaa(PhysicsObject pelaaja, Vector suunta)
67    {
68        pelaaja.Hit(suunta);
69    }
70
71    void Luokentta()
72    {
73        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("kentta4");
74
75        ruudut.SetTileMethod(Color.Black, LuoTaso);
76        ruudut.SetTileMethod("4CFF00", LuoPelaaja);
77        ruudut.SetTileMethod("FF0000", luovihollinen);
78        ruudut.Execute(60, 60);
79
80        LuoElamaLaskuri();
81    }
82
83    void LuoElamaLaskuri()
84    {
85        ProgressBar elamaPalkki = new ProgressBar(150, 20);
86        elamaPalkki.X = Screen.Left + 150;
87        elamaPalkki.Y = Screen.Top - 20;
88        elamaPalkki.BindTo(pelaaja.ElamaLaskuri);
89        Add(elamaPalkki);
90    }
91
92    void ElamaLoppui()
93    {
94        MessageDisplay.Add("Elämät loppuivat, voi voi.");
95    }
96
97    void luovihollinen(Vector paikka, double levelys, double korkeus)
98    {
99        Pyssymies vihollinen = new Pyssymies(levelys, korkeus);
100        vihollinen.Shape = Shape.Circle;
101        vihollinen.Position = paikka;
102        vihollinen.Image = vihollisenkuva;
103        vihollinen.LinearDamping = 0.8;
104        Add(vihollinen);
105        vihollinen.Ase.ProjectileCollision = AmmusOsui;
106
107        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja");
108        seuraajanAivot.Speed = 300;     
109        seuraajanAivot.DistanceFar = 600;
110        seuraajanAivot.DistanceClose = 200;
111        seuraajanAivot.StopWhenTargetClose = true;
112
113        vihollinen.Brain = seuraajanAivot;
114
115        Timer ajastin = new Timer();
116        ajastin.Interval = 1.0;
117        ajastin.Timeout += delegate {
118            if (!vihollinen.IsDestroyed)
119                vihollinen.Ase.Shoot();
120        };
121        ajastin.Start();
122    }
123
124    void LuoPelaaja(Vector paikka, double levelys, double korkeus)
125    {
126        pelaaja = new Pyssymies(levelys, korkeus);
127        pelaaja.Shape = Shape.Circle;
128        pelaaja.Position = paikka;
129        pelaaja.Image = pelaajanKuva;
130        pelaaja.LinearDamping = 0.8;
131        pelaaja.Tag = "pelaaja";
132        Add(pelaaja);
133        pelaaja.Ase.ProjectileCollision = AmmusOsui;
134        pelaaja.ElamaLaskuri.LowerLimit += pelaajakuoli;
135    }
136
137    void pelaajakuoli()
138    {
139        Label teksti = new Label("Game Over");
140        Add(teksti);
141        teksti.TextColor = Color.Red;
142        Timer.SingleShot(3, alkuvalikko);
143    }
144
145    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
146    {
147        ammus.Destroy();
148        if (kohde is Pyssymies)
149        {
150            ((Pyssymies)kohde).ElamaLaskuri.Value--;
151        }
152    }
153
154    void LuoTaso(Vector paikka, double leveys, double korkeus)
155    {
156        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
157        taso.Position = paikka;
158        //taso.Image = groundImage;
159        taso.CollisionIgnoreGroup = 1;
160        Add(taso);
161    }
162
163    void Ammu(AssaultRifle ase)
164    {
165        PhysicsObject ammus = ase.Shoot();
166
167        if (ammus != null)
168        {
169            //ammus.Size *= 50000000000000;
170            //ammus.Image = ...
171            //ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
172        }
173
174
175    }
176}
177
178class Pyssymies : PhysicsObject
179{
180    private IntMeter elamaLaskuri = new IntMeter(10, 0, 30);
181    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
182
183    public AssaultRifle Ase;
184
185    public Pyssymies(double leveys, double korkeus)
186        : base(leveys, korkeus)
187    {
188        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
189
190        Ase = new AssaultRifle(30, 10);
191        Ase.Ammo.Value = 1000;
192        Add(Ase);
193
194}
195
196    }
Note: See TracBrowser for help on using the repository browser.