source: 2014/23/EliasK/Don't die ;)/FysiikkaPeli1/FysiikkaPeli1/FysiikkaPeli1.cs @ 4875

Revision 4875, 5.7 KB checked in by anlakane, 7 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 FysiikkaPeli1 : PhysicsGame
10{
11    PhysicsObject pelaaja;
12    PhysicsObject hirvio;
13   
14    AssaultRifle pelaajan1Ase;
15    RandomMoverBrain satunnaisAivot = new RandomMoverBrain(200);
16    FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja");
17    Image Pelaajakuva = LoadImage("Pelaaja");
18    Image Maailmakuva = LoadImage("Untitled");
19    Image Hirviokuva = LoadImage("Hirviö");
20    Image groundImage = LoadImage("Kivi");
21    Image Ammuskuva = LoadImage("Ammus");
22    Image taustaKuva = LoadImage("Background");
23    Image AseKuva = LoadImage("AK47");
24    class Vihu : PhysicsObject
25    {
26        private IntMeter elamaLaskuri = new IntMeter(3, 0, 3);
27        public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
28
29        public Vihu(double leveys, double korkeus)
30            : base(leveys, korkeus)
31        {
32            elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
33        }
34
35    }
36
37    public override void Begin()
38    {
39        // TODO: Kirjoita ohjelmakoodisi tähän
40        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko",
41"Aloita peli", "Parhaat pisteet", "Lopeta");
42       
43        Add(alkuValikko);
44        LuoKentta();
45        Mouse.IsCursorVisible = true;
46        Camera.Follow(pelaaja);
47        Camera.Zoom(3);
48        Camera.StayInLevel = true;
49        pelaajan1Ase.Image = AseKuva;
50        Keyboard.Listen(Key.A, ButtonState.Down,
51    LiikutaPelaajaa, null, new Vector(-1000, 0));
52        Keyboard.Listen(Key.D, ButtonState.Down,
53          LiikutaPelaajaa, null, new Vector(1000, 0));
54        Keyboard.Listen(Key.W, ButtonState.Down,
55          LiikutaPelaajaa, null, new Vector(0, 1000));
56        Keyboard.Listen(Key.S, ButtonState.Down,
57          LiikutaPelaajaa, null, new Vector(0, -1000));
58        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, AmmuAseella, "Ammu", pelaajan1Ase);
59        Vector pelaajanSuunta = Vector.FromLengthAndAngle(500.0, pelaaja.Angle);
60        pelaaja.Push(pelaajanSuunta);
61        pelaaja.LinearDamping = 0.95;
62        pelaaja.MaxVelocity = 200;
63        pelaaja.Restitution = 0.0;
64        pelaaja.AngularDamping = 0.5;
65        Level.Background.Image = taustaKuva;
66        Level.Background.FitToLevel();
67
68        Mouse.ListenMovement(0.1, Tahtaa, "Tähtää aseella");
69        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
70        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
71    }
72    void LuoKentta()
73    {
74        //1. Luetaan kuva uuteen ColorTileMappiin, kuvan nimen perässä ei .png-päätettä.
75        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("Untitled");
76
77        //2. Kerrotaan mitä aliohjelmaa kutsutaan, kun tietyn värinen pikseli tulee vastaan kuvatiedostossa.
78        ruudut.SetTileMethod(Color.FromHexCode("00FF00"), LuoPelaaja);
79        ruudut.SetTileMethod(Color.Black, LuoTaso);
80        ruudut.SetTileMethod(Color.Red, LuoHirvio);
81
82        //3. Execute luo kentän
83        //   Parametreina leveys ja korkeus
84        ruudut.Execute(20, 20);
85    }
86
87    void LuoPelaaja(Vector paikka, double leveys, double korkeus)
88    {
89        pelaaja = new Vihu(leveys, korkeus);
90        pelaaja.Position = paikka;
91        pelaaja.Image = Pelaajakuva;
92        pelaajan1Ase = new AssaultRifle(30, 10);
93        pelaaja.Tag = ("pelaaja");
94
95        //Ammusten määrä aluksi:
96        pelaajan1Ase.Ammo.Value = 1000;
97
98        //Mitä tapahtuu kun ammus osuu johonkin?
99        pelaajan1Ase.ProjectileCollision = AmmusOsui;
100        pelaajan1Ase.Position = new Vector(10, 5);
101        pelaaja.Add(pelaajan1Ase);
102       
103        Add(pelaaja);
104    }
105    void LuoHirvio(Vector paikka, double leveys, double korkeus)
106    {
107        hirvio = new Vihu(leveys, korkeus);
108        hirvio.Image = Hirviokuva;
109        hirvio.Position = paikka;
110        Add(hirvio);
111        hirvio.Tag = "hirvio";
112       
113       
114        seuraajanAivot.Speed = 300;                 // Millä nopeudella kohdetta seurataan
115        seuraajanAivot.DistanceFar = 600;           // Etäisyys jolla aletaan seurata kohdetta
116        seuraajanAivot.DistanceClose = 5;         // Etäisyys jolloin ollaan lähellä kohdetta
117        seuraajanAivot.StopWhenTargetClose = true;  // Pysähdytään kun ollaan lähellä kohdetta
118        seuraajanAivot.FarBrain = satunnaisAivot;
119        satunnaisAivot.ChangeMovementSeconds = 3;
120        seuraajanAivot.Active = true;
121        seuraajanAivot.TurnWhileMoving = true;
122        satunnaisAivot.TurnWhileMoving = true;
123        hirvio.Brain = seuraajanAivot;
124
125
126    }
127
128    void LuoTaso(Vector paikka, double leveys, double korkeus)
129    {
130        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
131        taso.Position = paikka;
132        taso.Image = groundImage;
133        taso.CollisionIgnoreGroup = 1;
134        Add(taso);
135    }
136    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
137    {
138        ammus.Destroy();
139    }
140    void Tahtaa(AnalogState hiirenLiike)
141    {
142        Vector suunta = (Mouse.PositionOnWorld - pelaajan1Ase.AbsolutePosition).Normalize();
143       
144        pelaaja.Angle = suunta.Angle;
145    }
146    void LiikutaPelaajaa(Vector vektori)
147    {
148        pelaaja.Push(vektori);
149    }
150    void AmmuAseella(AssaultRifle ase)
151    {
152        PhysicsObject ammus = ase.Shoot();
153
154        if (ammus != null)
155        {
156            ammus.Image = Ammuskuva;
157            //ammus.Size *= 3;
158            //ammus.Image = ...
159            //ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
160
161        }
162    }
163}
Note: See TracBrowser for help on using the repository browser.