source: 2016/koodauskerho/OttoK/peli2/peli2/peli2/peli2.cs @ 8396

Revision 8396, 6.6 KB checked in by sieerinn, 2 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
9class Alus : PhysicsObject
10{
11    private IntMeter elamaLaskuri = new IntMeter(10, 0, 20);
12    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
13
14    private GameObject alustuli;
15    public GameObject Alustuli { get { return alustuli; } }
16
17
18    public Alus(double leveys, double korkeus, Image alustulenkuva)
19        : base(leveys, korkeus)
20    {
21        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
22
23        alustuli = new GameObject(10, 15);
24        alustuli.Image = alustulenkuva;
25        this.Add(alustuli);
26        alustuli.Position = new Vector(0, -35);
27        alustuli.IsVisible = false;
28    }
29}
30public class peli2 : PhysicsGame
31{
32    Image oranssialuskuva = LoadImage("oranssialus");
33    Image vihreealuskuva = LoadImage("vihreealus");
34    Image mustaluskuva = LoadImage("mustalus");
35    Image alustulenkuva = LoadImage("alustuli");
36    Image vihreeammuskuva = LoadImage("vihreepanos");
37    Image oranssiammuskuva = LoadImage("oranssipanos");
38    Image meteoriittikuva = LoadImage("meteoriitti");
39
40    public override void Begin()
41    {
42        SmoothTextures = false;
43        Level.Size = new Vector(1900, 1000);
44
45        Alus vihreealus = TeeAlus(400, 0, vihreealuskuva, Screen.Right - 150, Color.LightGreen);
46        vihreealus.Tag = "vihreealus";
47
48        Alus oranssialus = TeeAlus(-400, 0, oranssialuskuva, Screen.Left + 150, Color.Orange);
49        oranssialus.Tag = "oranssialus";
50
51        PhoneBackButton.Listen(ConfirmExit, "Quit");
52        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Quit");
53        Keyboard.Listen(Key.Up, ButtonState.Down, Liiku, "Liiku", vihreealus, 800.0);
54        Keyboard.Listen(Key.Up, ButtonState.Released, Sammutatuli, null, vihreealus);
55        Keyboard.Listen(Key.Right, ButtonState.Down, Kaanny, "Käänny", vihreealus, -8000.0);
56        Keyboard.Listen(Key.Left, ButtonState.Down, Kaanny, "Käänny", vihreealus, 8000.0);
57        Keyboard.Listen(Key.RightControl, ButtonState.Pressed, ammu, "Ammu", vihreealus);
58
59        Keyboard.Listen(Key.W, ButtonState.Down, Liiku, "Liiku", oranssialus, 800.0);
60        Keyboard.Listen(Key.D, ButtonState.Down, Kaanny, "Käänny", oranssialus, -8000.0);
61        Keyboard.Listen(Key.W, ButtonState.Released, Sammutatuli, null, oranssialus);
62        Keyboard.Listen(Key.A, ButtonState.Down, Kaanny, "Käänny", oranssialus, 8000.0);
63        Keyboard.Listen(Key.LeftControl, ButtonState.Pressed, ammu, "Ammu", oranssialus);
64
65        Timer meteorcreater = new Timer();
66        meteorcreater.Interval = RandomGen.NextDouble(6, 16);
67        meteorcreater.Timeout += delegate
68        {
69            PhysicsObject meteoriitti = TeeMeteoriitti(100, 100);
70            meteoriitti.Velocity = (RandomGen.NextVector(-75, -75, 75, 75));
71            meteoriitti.AngularVelocity = RandomGen.NextDouble(-2, 2);
72            meteorcreater.Interval = RandomGen.NextDouble(6, 14);
73        };
74        meteorcreater.Start();
75
76        Level.Background.Color = Color.Black;
77        Level.Background.CreateStars();
78        Timer ajastin = new Timer();
79        ajastin.Interval = 0.1;
80        ajastin.Timeout += delegate
81        {
82            if (vihreealus.X < Level.Left)
83                vihreealus.X = Level.Right;
84            if (vihreealus.X > Level.Right)
85                vihreealus.X = Level.Left;
86            if (vihreealus.Y > Level.Top)
87                vihreealus.Y = Level.Bottom;
88            if (vihreealus.Y < Level.Bottom)
89                vihreealus.Y = Level.Top;
90
91            if (oranssialus.X < Level.Left)
92                oranssialus.X = Level.Right;
93            if (oranssialus.X > Level.Right)
94                oranssialus.X = Level.Left;
95            if (oranssialus.Y > Level.Top)
96                oranssialus.Y = Level.Bottom;
97            if (oranssialus.Y < Level.Bottom)
98                oranssialus.Y = Level.Top;
99        };
100        ajastin.Start();
101    }
102
103    void ammu(PhysicsObject pelaaja)
104    {
105        PhysicsObject ammus = new PhysicsObject(10, 7);
106        if (pelaaja.Tag.Equals("vihreealus"))
107        {
108            ammus.Image = vihreeammuskuva;
109        }
110        else
111        {
112            ammus.Image = oranssiammuskuva;
113        }
114        ammus.Angle = pelaaja.Angle + Angle.FromDegrees(90);
115        ammus.Velocity = Vector.FromLengthAndAngle(700, pelaaja.Angle + Angle.FromDegrees(90));
116        ammus.Position = pelaaja.Position + Vector.FromLengthAndAngle(pelaaja.Width * 0.75, pelaaja.Angle + Angle.FromDegrees(90));
117        ammus.Tag = "ammus";
118        ammus.LifetimeLeft = TimeSpan.FromSeconds(10);
119        Add(ammus);
120    }
121    Alus TeeAlus(double x, double y, Image aluskuva, double xpalkinpaikka, Color palkinvari)
122    {
123        Alus alus = new Alus(60, 70, alustulenkuva);
124        alus.Position = new Vector(x, y);
125        alus.Shape = Shape.FromImage(mustaluskuva);
126        alus.Image = aluskuva;
127        alus.LinearDamping = 0.98;
128        alus.AngularDamping = 0.98;
129        Add(alus);
130        AddCollisionHandler(alus, "ammus", TormaaAmmukseen);
131        ProgressBar elamaPalkki = new ProgressBar(150, 20);
132        elamaPalkki.BarColor = palkinvari;
133        elamaPalkki.X = xpalkinpaikka;
134        elamaPalkki.Y = Screen.Top - 20;
135        elamaPalkki.BindTo(alus.ElamaLaskuri);
136        Add(elamaPalkki);
137        return alus;
138    }
139    void Liiku(Alus alus, double nopeus)
140    {
141        alus.Push((alus.Angle + Angle.FromDegrees(90)).GetVector() * nopeus);
142        alus.Alustuli.IsVisible = true;
143    }
144    void Sammutatuli(Alus alus)
145    {
146        alus.Alustuli.IsVisible = false;
147    }
148    void Kaanny(PhysicsObject alus, double nopeus)
149    {
150        alus.ApplyTorque(nopeus);
151    }
152    PhysicsObject TeeMeteoriitti(double leveys, double korkeus)
153    {
154        PhysicsObject meteoriitti = new PhysicsObject(leveys, korkeus);
155        meteoriitti.Mass = 100;
156        meteoriitti.Image = meteoriittikuva;
157        Add(meteoriitti);
158        return meteoriitti;
159    }
160    void TormaaAmmukseen(PhysicsObject alus, PhysicsObject ammus)
161    {
162
163        ammus.Destroy();
164        ((Alus)alus).ElamaLaskuri.Value -= 1;
165        if (((Alus)alus).ElamaLaskuri.Value == ((Alus)alus).ElamaLaskuri.MinValue)
166        {
167            if (alus.Tag.Equals("vihreealus"))
168            {
169                Keyboard.Disable(Key.RightControl);
170            }
171            if (alus.Tag.Equals("oranssialus"))
172            {
173                Keyboard.Disable(Key.LeftControl);
174            }
175        }
176    }
177}
Note: See TracBrowser for help on using the repository browser.