source: 2018/24/TOMASM/TomaksenPeli/TomaksenPeli/TomaksenPeli.cs @ 9754

Revision 9754, 5.3 KB checked in by tovitama, 20 months ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Widgets;
7
8public class TomaksenPeli : PhysicsGame
9{
10    PhysicsObject kolmio1;
11    PhysicsObject kolmio2;
12    Image alus2 = LoadImage("avaruusalus2");
13    Image alus1 = LoadImage("avaruusalus1");
14    Image ruoho = LoadImage("space");
15    int pelaajanTerveys = 7;
16    Image olionKuva = LoadImage("keltapallo");
17
18    AssaultRifle pelaajan1Ase;
19    AssaultRifle pelaajan2Ase;
20
21
22    public override void Begin()
23    {
24        Level.Background.Image = ruoho;
25        Level.Background.Size = Screen.Size;
26
27        kolmio1 = LuoPelaaja(35, new Vector(-120, 50), alus1);
28        kolmio2 = LuoPelaaja(35, new Vector(120, 50), alus2);
29        pelaajan1Ase = LuoPelaajanAse(kolmio1);
30        pelaajan2Ase = LuoPelaajanAse(kolmio2);
31        Level.AmbientLight = 0.3;
32
33
34
35       // Camera.Follow(kolmio1, kolmio2);
36
37
38
39        Keyboard.Listen(Key.A, ButtonState.Down, Rotate, "rotate to left", kolmio1, 3.0);
40        Keyboard.Listen(Key.D, ButtonState.Down, Rotate, "rotate to right", kolmio1, -3.0);
41        Keyboard.Listen(Key.W, ButtonState.Down, Thrust, "thrust forward", kolmio1, 300.0);
42
43        Keyboard.Listen(Key.A, ButtonState.Released, Rotate, "", kolmio1, 0.0);
44        Keyboard.Listen(Key.D, ButtonState.Released, Rotate, "", kolmio1, 0.0);
45
46        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", pelaajan1Ase);
47        Keyboard.Listen(Key.Enter, ButtonState.Down, AmmuAseella, "Ammu", pelaajan2Ase);
48
49
50        Keyboard.Listen(Key.Left, ButtonState.Down, Rotate, "rotate to left", kolmio2, 3.0);
51        Keyboard.Listen(Key.Right, ButtonState.Down, Rotate, "rotate to right", kolmio2, -3.0);
52        Keyboard.Listen(Key.Up, ButtonState.Down, Thrust, "thrust forward", kolmio2, 350.0);
53
54        Keyboard.Listen(Key.Left, ButtonState.Released, Rotate, "", kolmio2, 0.0);
55        Keyboard.Listen(Key.Right, ButtonState.Released, Rotate, "", kolmio2, 0.0);
56
57        AddCollisionHandler(kolmio2, "pahis", PelaajaTormasi);
58        AddCollisionHandler(kolmio1, "pahis", PelaajaTormasi);
59        AddCollisionHandler(kolmio1, "health", PelaajaParantuu);
60
61        Surfaces seinat = Level.CreateBorders(false);
62        seinat.Left.Tag = "seina";
63        seinat.Right.Tag = "seina";
64        seinat.Bottom.Tag = "seina";
65        seinat.Top.Tag = "seina";
66       
67        LuoRandomOlio();
68
69
70       
71
72        //foreach (Surface s in Level.CreateBorders(false)) s.Tag = "pahis";
73        // kolmio2.Tag = "pahis";
74        //kolmio1.Tag = "pahis";
75        //kolmio2.LifetimeLeft = TimeSpan.FromSeconds(3.0);
76
77
78        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
79    }
80
81    void Rotate(PhysicsObject kolmio1, double kiertonopeus)
82    {
83
84        kolmio1.AngularVelocity = kiertonopeus;
85
86    }
87    void Thrust(PhysicsObject kolmio1, double acceleration)
88    {
89        Vector playerDirection = Vector.FromLengthAndAngle(acceleration, kolmio1.Angle);
90        kolmio1.Push(playerDirection);
91
92    }
93
94    void PelaajaTormasi(PhysicsObject pelaaja, PhysicsObject kohde)
95    {
96        MessageDisplay.Add("HIT!");
97
98        pelaajanTerveys--;
99
100        if (pelaajanTerveys <= 0)
101            pelaaja.Destroy();
102
103
104    }
105    void LuoRandomOlio()
106    {
107
108        PhysicsObject olio = new PhysicsObject(45, 45);
109        olio.Image = olionKuva;
110
111        Add(olio);
112        FollowerBrain seuraajanAivot = new FollowerBrain(kolmio1)
113        {
114            Speed = 50,
115            Active = true,
116            DistanceFar = 600
117    };
118        olio.Brain = seuraajanAivot;
119        //AddCollisionHandler(olio, "hyvis", OlioonOsui);
120        olio.Tag = "pahis";
121
122    }
123 
124   
125
126
127
128    PhysicsObject LuoPelaaja(double koko, Vector sijainti, Image avaruusalus)
129    {
130        PhysicsObject pelaaja = new PhysicsObject(koko, koko)
131        {
132            Tag = "pelaaja",
133            Position = sijainti,
134            Image = avaruusalus
135        };
136        Add(pelaaja,1);
137        return pelaaja;
138    }
139    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
140    {
141        if (kohde.Tag != "pelaaja" && kohde.Tag != "seina") 
142        kohde.Destroy();
143        ammus.Destroy();
144    }
145
146    void PelaajaParantuu(PhysicsObject kolmio1, PhysicsObject kohde)
147    {
148        pelaajanTerveys++;
149    }
150
151
152    void AmmuAseella(AssaultRifle ase)
153    {
154       
155        PhysicsObject ammus = ase.Shoot();
156     
157        if (ammus != null)
158            ammus.Tag = "hyvis";
159        {
160            //ammus.Size *= 3;
161            //ammus.Image = ...
162            //ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
163        }
164    }
165    AssaultRifle LuoPelaajanAse(PhysicsObject omistaja)
166    {
167        AssaultRifle ase = new AssaultRifle(30, 10);
168
169        // Jos et halua ammusten määrän rajoitusta, vaan loputtomat panokset,
170        // niin älä lisää seuraavaa riviä ollenkaan:
171        //pelaajan1Ase.Ammo.Value = 1000; // Ammusten määrä aluksi
172        ase.InfiniteAmmo = true;
173        // Mitä tapahtuu kun ammus osuu johonkin?
174        ase.ProjectileCollision = AmmusOsui;
175        ase.FireRate = 7.0;
176        ase.Power.DefaultValue = 500.0;
177        omistaja.Add(ase);
178        return ase;
179    }
180}
181
182
183
184       
Note: See TracBrowser for help on using the repository browser.