source: 2011/31/TeemuT/Diamond TD/Diamond TD/Diamond TD/Peli.cs @ 2529

Revision 2529, 4.2 KB checked in by tenituun, 8 years ago (diff)

Talletus.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Peli : PhysicsGame
10{
11    List<Vector> polku = new List<Vector>();
12    Vector[] reitti;
13
14    GameObject start;
15    PhysicsObject maali;
16
17    bool asetetaanTykkia = false;
18
19    public override void Begin()
20    {
21        TeeKentta();
22        TeeKayttoliittyma();
23        LuoPolku();
24        Timer ajastin = new Timer();
25        ajastin.Interval = 0.2;
26        ajastin.Timeout += LuoViholline;
27        ajastin.Start(10);
28        Mouse.IsCursorVisible = true;
29    }
30
31    void TeeKentta()
32    {
33        Level.BackgroundColor = Color.ForestGreen;
34        TileMap ruudut = TileMap.FromLevelAsset("kentta");
35        ruudut.SetTileMethod('=', LuoPalikka);
36        ruudut.SetTileMethod('o', LuoPalikka);
37        ruudut.SetTileMethod('a', LuoWaypoint);
38        ruudut.SetTileMethod('s', LuoStartti);
39        ruudut.SetTileMethod('l', LuoMaali);
40        ruudut.Execute(20, 20);
41        Level.CreateBorders(1.0, true);
42    }
43
44    void TeeKayttoliittyma()
45    {
46        Widget tykki = new Widget(50, 50);
47        tykki.Top = Level.Top;       
48        Add(tykki);
49        Mouse.ListenOn(tykki, MouseButton.Left, ButtonState.Pressed, TykkinappiPainettu, null, tykki);
50    }
51
52    void TykkinappiPainettu(Widget w)
53    {       
54        w.Color = Color.Black;
55        // Voit muuttaa kuvaa
56        asetetaanTykkia = true;
57        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, AsetaTykki, null, w);
58    }
59
60    void AsetaTykki(Widget w)
61    {
62        if (asetetaanTykkia)
63        {
64            GameObject tykki = new GameObject(20, 20);
65            Add(tykki);
66            tykki.Position = new Vector(Mouse.PositionOnWorld.X, Mouse.PositionOnWorld.Y);
67            asetetaanTykkia = false;
68            w.Color = Color.White;
69        }
70    }
71
72    void LuoPolku()
73    {
74        reitti = ParsiReitti(start, polku);
75    }
76
77    void LuoWaypoint(Vector paikka, double leveys, double korkeus)
78    {
79        polku.Add(paikka);
80    }
81
82    void LuoStartti(Vector paikka, double leveys, double korkeus)
83    {
84        start = new GameObject(1, 1);
85        start.Position = paikka;
86    }
87
88    void LuoMaali(Vector paikka, double lev, double korkeus)
89    {
90        maali = PhysicsObject.CreateStaticObject(20, 20);
91        polku.Add(paikka);
92        maali.Position = paikka;
93        Add(maali);
94        AddCollisionHandler(maali, KasitteleMaalinTormaus);
95        maali.IsVisible = false;
96
97    }
98
99    void KasitteleMaalinTormaus(PhysicsObject maali, PhysicsObject vih)
100    {
101        vih.Destroy();
102    }
103
104    void LuoViholline()
105    {
106        PhysicsObject vih = new PhysicsObject(20, 20);
107        vih.Position = start.Position;
108
109        PathFollowerBrain testiaivot = new PathFollowerBrain();
110        testiaivot.Path = reitti;
111        testiaivot.Speed = 200;
112        testiaivot.Loop = false;
113
114        vih.Brain = testiaivot;
115        Add(vih);
116        vih.Color = Color.Red;
117        vih.Shape = Shape.Circle;
118    }
119
120    void LuoPalikka(Vector paikka, double leveys, double korkeus)
121    {
122        PhysicsObject palikka = PhysicsObject.CreateStaticObject(leveys, korkeus);
123        palikka.Position = paikka;
124        palikka.Shape = Shape.Rectangle;
125        palikka.Color = Color.Gray;
126        Add(palikka);
127
128    }
129
130    Vector[] ParsiReitti(GameObject npc, List<Vector> waypoints)
131    {
132        int n = waypoints.Count;
133        Vector[] reitti = new Vector[n];
134        Vector v = npc.Position;
135
136        for (int i = 0; i < n; i++)
137        {
138            v = FindNearest(waypoints, v);
139            waypoints.Remove(v);
140            reitti[i] = v;
141        }
142
143        return reitti;
144    }
145
146    Vector FindNearest(IEnumerable<Vector> list, Vector vector)
147    {
148        Vector nearest = Vector.Zero;
149        double minDistance = double.PositiveInfinity;
150
151        foreach (Vector candidate in list)
152        {
153            double d = Vector.Distance(vector, candidate);
154
155            if (d < minDistance)
156            {
157                nearest = candidate;
158                minDistance = d;
159            }
160        }
161
162        return nearest;
163
164
165
166
167
168
169    }
170}
171
Note: See TracBrowser for help on using the repository browser.