Ignore:
Timestamp:
2011-08-03 14:55:37 (12 years ago)
Author:
tenituun
Message:

Talletus.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 2011/31/TeemuT/Diamond TD/Diamond TD/Diamond TD/Peli.cs

    r2500 r2529  
    1010{ 
    1111    List<Vector> polku = new List<Vector>(); 
     12    Vector[] reitti; 
    1213 
     14    GameObject start; 
     15    PhysicsObject maali; 
    1316 
     17    bool asetetaanTykkia = false; 
    1418 
    1519    public override void Begin() 
    1620    { 
    1721        TeeKentta(); 
     22        TeeKayttoliittyma(); 
    1823        LuoPolku(); 
    19         LahetaViholline(); 
    20     
     24        Timer ajastin = new Timer(); 
     25        ajastin.Interval = 0.2; 
     26        ajastin.Timeout += LuoViholline; 
     27        ajastin.Start(10); 
     28        Mouse.IsCursorVisible = true; 
    2129    } 
    2230 
    2331    void TeeKentta() 
    2432    { 
    25         Level.BackgroundColor = Color.DarkGreen; 
     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); 
    2642    } 
     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 
    2772    void LuoPolku() 
    2873    { 
    29         polku.Add(new Vector (-200, 200)); 
    30         polku.Add(new Vector(-200, 0)); 
    31         polku.Add(new Vector( 200, 0)); 
    32         polku.Add(new 
    33         RoadMap tie = new RoadMap(polku.ToArray()); 
    34         tie.DefaultWidth = 100.0; 
    35         tie.Insert(); 
     74        reitti = ParsiReitti(start, polku); 
     75    } 
    3676 
     77    void LuoWaypoint(Vector paikka, double leveys, double korkeus) 
     78    { 
     79        polku.Add(paikka); 
     80    } 
    3781 
    38          
     82    void LuoStartti(Vector paikka, double leveys, double korkeus) 
     83    { 
     84        start = new GameObject(1, 1); 
     85        start.Position = paikka; 
     86    } 
    3987 
    40         for (int i = polku.Count-1; i > -1; i--) 
     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++) 
    41137        { 
    42             polku.Add(polku[i]); 
     138            v = FindNearest(waypoints, v); 
     139            waypoints.Remove(v); 
     140            reitti[i] = v; 
    43141        } 
     142 
     143        return reitti; 
    44144    } 
     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; 
    45163 
    46164 
    47165 
    48166 
    49     void LahetaViholline() 
    50     { 
    51         PhysicsObject vih = new PhysicsObject(20, 20); 
    52         vih.Position = polku[0]; 
    53  
    54         PathFollowerBrain testiaivot = new PathFollowerBrain(); 
    55         testiaivot.Path = polku; 
    56         testiaivot.Speed = 100; 
    57         testiaivot.Loop = true; 
    58         vih.Brain = testiaivot; 
    59         Add(vih); 
    60         vih.Color = Color.Red 
    61             ; 
    62         vih.Shape = Shape.Circle;        
    63          
    64     } 
    65167 
    66168 
     169    } 
    67170} 
    68          
     171 
Note: See TracChangeset for help on using the changeset viewer.