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

Revision 9751, 4.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
17    AssaultRifle pelaajan1Ase;
18    AssaultRifle pelaajan2Ase;
19
20
21    public override void Begin()
22    {
23        Level.Background.Image = ruoho;
24        Level.Background.Size = Screen.Size;
25
26        kolmio1 = LuoPelaaja(35, new Vector(-120, 50), alus1);
27        kolmio2 = LuoPelaaja(35, new Vector(120, 50), alus2);
28        pelaajan1Ase = LuoPelaajanAse(kolmio1);
29        pelaajan2Ase = LuoPelaajanAse(kolmio2);
30        Level.AmbientLight = 0.3;
31
32
33
34
35
36
37
38        Keyboard.Listen(Key.A, ButtonState.Down, Rotate, "rotate to left", kolmio1, 3.0);
39        Keyboard.Listen(Key.D, ButtonState.Down, Rotate, "rotate to right", kolmio1, -3.0);
40        Keyboard.Listen(Key.W, ButtonState.Down, Thrust, "thrust forward", kolmio1, 300.0);
41
42        Keyboard.Listen(Key.A, ButtonState.Released, Rotate, "", kolmio1, 0.0);
43        Keyboard.Listen(Key.D, ButtonState.Released, Rotate, "", kolmio1, 0.0);
44
45        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", pelaajan1Ase);
46        Keyboard.Listen(Key.Enter, ButtonState.Down, AmmuAseella, "Ammu", pelaajan2Ase);
47
48
49        Keyboard.Listen(Key.Left, ButtonState.Down, Rotate, "rotate to left", kolmio2, 3.0);
50        Keyboard.Listen(Key.Right, ButtonState.Down, Rotate, "rotate to right", kolmio2, -3.0);
51        Keyboard.Listen(Key.Up, ButtonState.Down, Thrust, "thrust forward", kolmio2, 350.0);
52
53        Keyboard.Listen(Key.Left, ButtonState.Released, Rotate, "", kolmio2, 0.0);
54        Keyboard.Listen(Key.Right, ButtonState.Released, Rotate, "", kolmio2, 0.0);
55
56        AddCollisionHandler(kolmio2, "pahis", PelaajaTormasi);
57        AddCollisionHandler(kolmio1, "pahis", PelaajaTormasi);
58        AddCollisionHandler(kolmio1, "health", PelaajaParantuu);
59        foreach (Surface s in Level.CreateBorders(false)) s.Tag = "pahis";
60
61        kolmio2.Tag = "pahis";
62        kolmio1.Tag = "pahis";
63
64        //kolmio2.LifetimeLeft = TimeSpan.FromSeconds(3.0);
65
66        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
67    }
68    void Rotate(PhysicsObject kolmio1, double kiertonopeus)
69    {
70
71        kolmio1.AngularVelocity = kiertonopeus;
72
73    }
74    void Thrust(PhysicsObject kolmio1, double acceleration)
75    {
76        Vector playerDirection = Vector.FromLengthAndAngle(acceleration, kolmio1.Angle);
77        kolmio1.Push(playerDirection);
78
79    }
80
81    void PelaajaTormasi(PhysicsObject pelaaja, PhysicsObject kohde)
82    {
83        MessageDisplay.Add("HIT!");
84
85        pelaajanTerveys--;
86
87        if (pelaajanTerveys <= 0)
88            pelaaja.Destroy();
89
90
91    }
92    PhysicsObject LuoPelaaja(double koko, Vector sijainti, Image avaruusalus)
93    {
94        PhysicsObject pelaaja = new PhysicsObject(koko, koko)
95        {
96            Position = sijainti,
97            Image = avaruusalus
98
99
100        };
101
102
103
104        Add(pelaaja);
105        return pelaaja;
106
107    }
108    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
109    {
110        ammus.Destroy();
111    }
112
113    void PelaajaParantuu(PhysicsObject kolmio1, PhysicsObject kohde)
114    {
115        pelaajanTerveys++;
116    }
117
118
119    void AmmuAseella(AssaultRifle ase)
120    {
121        PhysicsObject ammus = ase.Shoot();
122
123        if (ammus != null)
124        {
125            //ammus.Size *= 3;
126            //ammus.Image = ...
127            //ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
128        }
129    }
130    AssaultRifle LuoPelaajanAse(PhysicsObject omistaja)
131    {
132        AssaultRifle ase = new AssaultRifle(30, 10);
133
134        // Jos et halua ammusten määrän rajoitusta, vaan loputtomat panokset,
135        // niin älä lisää seuraavaa riviä ollenkaan:
136        //pelaajan1Ase.Ammo.Value = 1000; // Ammusten määrä aluksi
137        ase.InfiniteAmmo = true;
138        // Mitä tapahtuu kun ammus osuu johonkin?
139        ase.ProjectileCollision = AmmusOsui;
140        ase.FireRate = 7.0;
141        ase.Power.DefaultValue = 200.0;
142        omistaja.Add(ase);
143        return ase;
144    }
145}
146
147
148
149       
Note: See TracBrowser for help on using the repository browser.