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

Revision 8403, 7.2 KB checked in by tesatapa, 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    Alus vihreealus;
41    Alus oranssialus;
42
43    public override void Begin()
44    {
45        SmoothTextures = false;
46        Level.Size = new Vector(1900, 1000);
47
48        vihreealus = TeeAlus(400, 0, vihreealuskuva, Screen.Right - 150, Color.LightGreen);
49        vihreealus.Tag = "vihreealus";
50
51        oranssialus = TeeAlus(-400, 0, oranssialuskuva, Screen.Left + 150, Color.Orange);
52        oranssialus.Tag = "oranssialus";
53
54        PhoneBackButton.Listen(ConfirmExit, "Quit");
55        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Quit");
56        Keyboard.Listen(Key.Up, ButtonState.Down, Liiku, "Liiku", vihreealus, 800.0);
57        Keyboard.Listen(Key.Up, ButtonState.Released, Sammutatuli, null, vihreealus);
58        Keyboard.Listen(Key.Right, ButtonState.Down, Kaanny, "Käänny", vihreealus, -8000.0);
59        Keyboard.Listen(Key.Left, ButtonState.Down, Kaanny, "Käänny", vihreealus, 8000.0);
60        Keyboard.Listen(Key.RightControl, ButtonState.Pressed, ammu, "Ammu", vihreealus);
61
62        Keyboard.Listen(Key.W, ButtonState.Down, Liiku, "Liiku", oranssialus, 800.0);
63        Keyboard.Listen(Key.D, ButtonState.Down, Kaanny, "Käänny", oranssialus, -8000.0);
64        Keyboard.Listen(Key.W, ButtonState.Released, Sammutatuli, null, oranssialus);
65        Keyboard.Listen(Key.A, ButtonState.Down, Kaanny, "Käänny", oranssialus, 8000.0);
66        Keyboard.Listen(Key.LeftControl, ButtonState.Pressed, ammu, "Ammu", oranssialus);
67
68        Keyboard.Listen(Key.F1, ButtonState.Pressed, Konsoli, null);
69
70        Timer meteorcreater = new Timer();
71        meteorcreater.Interval = RandomGen.NextDouble(6, 16);
72        meteorcreater.Timeout += delegate
73        {
74            PhysicsObject meteoriitti = TeeMeteoriitti(100, 100);
75            meteoriitti.Velocity = (RandomGen.NextVector(-75, -75, 75, 75));
76            meteoriitti.AngularVelocity = RandomGen.NextDouble(-2, 2);
77            meteorcreater.Interval = RandomGen.NextDouble(6, 14);
78        };
79        meteorcreater.Start();
80
81        Level.Background.Color = Color.Black;
82        Timer ajastin = new Timer();
83        ajastin.Interval = 0.1;
84        ajastin.Timeout += delegate
85        {
86            if (vihreealus.X < Level.Left)
87                vihreealus.X = Level.Right;
88            if (vihreealus.X > Level.Right)
89                vihreealus.X = Level.Left;
90            if (vihreealus.Y > Level.Top)
91                vihreealus.Y = Level.Bottom;
92            if (vihreealus.Y < Level.Bottom)
93                vihreealus.Y = Level.Top;
94
95            if (oranssialus.X < Level.Left)
96                oranssialus.X = Level.Right;
97            if (oranssialus.X > Level.Right)
98                oranssialus.X = Level.Left;
99            if (oranssialus.Y > Level.Top)
100                oranssialus.Y = Level.Bottom;
101            if (oranssialus.Y < Level.Bottom)
102                oranssialus.Y = Level.Top;
103        };
104        ajastin.Start();
105    }
106
107    void Konsoli()
108    {
109        InputWindow kysymysIkkuna = new InputWindow("Konsoli");
110        kysymysIkkuna.TextEntered += ProcessInput;
111        Add(kysymysIkkuna);
112    }
113    void ProcessInput(InputWindow ikkuna)
114    {
115        string[] vastaus = ikkuna.InputBox.Text.Split(' ');
116       
117        if (vastaus [0] == "SUPER")
118        {
119//            Keyboard.Listen(Key.LeftControl, ButtonState.Down, ammu, "Ammu", oranssialus);
120            Keyboard.Listen(Key.RightControl, ButtonState.Down, ammu, "Ammu", vihreealus);
121        }
122    }
123    void ammu(PhysicsObject pelaaja)
124    {
125        PhysicsObject ammus = new PhysicsObject(10, 7);
126        if (pelaaja.Tag.Equals("vihreealus"))
127        {
128            ammus.Image = vihreeammuskuva;
129        }
130        else
131        {
132            ammus.Image = oranssiammuskuva;
133        }
134        ammus.Angle = pelaaja.Angle + Angle.FromDegrees(90);
135        ammus.Velocity = pelaaja.Velocity + Vector.FromLengthAndAngle(700, pelaaja.Angle + Angle.FromDegrees(90));
136        ammus.Position = pelaaja.Position + Vector.FromLengthAndAngle(pelaaja.Width * 1.0, pelaaja.Angle + Angle.FromDegrees(90));
137        ammus.Tag = "ammus";
138        ammus.LifetimeLeft = TimeSpan.FromSeconds(10);
139        Add(ammus);
140    }
141    Alus TeeAlus(double x, double y, Image aluskuva, double xpalkinpaikka, Color palkinvari)
142    {
143        Alus alus = new Alus(50, 70, alustulenkuva);
144        alus.Position = new Vector(x, y);
145        alus.Shape = Shape.FromImage(mustaluskuva);
146        alus.Image = aluskuva;
147        alus.LinearDamping = 0.98;
148        alus.AngularDamping = 0.98;
149        Add(alus);
150        AddCollisionHandler(alus, "ammus", TormaaAmmukseen);
151        ProgressBar elamaPalkki = new ProgressBar(150, 20);
152        elamaPalkki.BarColor = palkinvari;
153        elamaPalkki.X = xpalkinpaikka;
154        elamaPalkki.Y = Screen.Top - 20;
155        elamaPalkki.BindTo(alus.ElamaLaskuri);
156        Add(elamaPalkki);
157        return alus;
158    }
159    void Liiku(Alus alus, double nopeus)
160    {
161        alus.Push((alus.Angle + Angle.FromDegrees(90)).GetVector() * nopeus);
162        alus.Alustuli.IsVisible = true;
163    }
164    void Sammutatuli(Alus alus)
165    {
166        alus.Alustuli.IsVisible = false;
167    }
168    void Kaanny(PhysicsObject alus, double nopeus)
169    {
170        alus.ApplyTorque(nopeus);
171    }
172    PhysicsObject TeeMeteoriitti(double leveys, double korkeus)
173    {
174        PhysicsObject meteoriitti = new PhysicsObject(leveys, korkeus);
175        meteoriitti.Mass = 100;
176        meteoriitti.Image = meteoriittikuva;
177        Add(meteoriitti);
178        return meteoriitti;
179    }
180    void TormaaAmmukseen(PhysicsObject alus, PhysicsObject ammus)
181    {
182
183        ammus.Destroy();
184        ((Alus)alus).ElamaLaskuri.Value -= 1;
185        if (((Alus)alus).ElamaLaskuri.Value == ((Alus)alus).ElamaLaskuri.MinValue)
186        {
187            if (alus.Tag.Equals("vihreealus"))
188            {
189                Keyboard.Disable(Key.RightControl);
190            }
191            if (alus.Tag.Equals("oranssialus"))
192            {
193                Keyboard.Disable(Key.LeftControl);
194            }
195        }
196    }
197}
Note: See TracBrowser for help on using the repository browser.