source: 2013/30/RikoV/PerusPeli3/PerusPeli3/PerusPeli3/PerusPeli3.cs @ 4617

Revision 4617, 6.1 KB checked in by rikvalko, 10 years ago (diff)

Talletus.

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