Ignore:
Timestamp:
2015-06-25 15:01:59 (4 years ago)
Author:
komihovi
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • 2015/26/KonstaH/Tower Defense/Tower Defense/Tower Defense/Tower_Defense.cs

    r6261 r6377  
    1010{ 
    1111    Image tykkikuva = LoadImage("Tykki"); 
     12    public Image Parempiammus = LoadImage("Parempiammus"); 
     13    public Image Ammus = LoadImage("Ammus"); 
     14    Image Paivitetyntykinkuva = LoadImage("Parempitykki"); 
     15    Image Vihollisenkuva = LoadImage("Vihollinen"); 
     16   public SoundEffect RahaAani = LoadSoundEffect("Pickup_Coin23"); 
    1217    const double tykinLeveys = 80; 
    1318    const double tykinKorkeus = 40; 
    14     Image Ammus = LoadImage("Ammus"); 
    15     Image Paivitetyntykinkuva = LoadImage("Parempitykki"); 
    16     
    17       
    18  
    19      
     19    const double VihollinenLeveys = 40; 
     20    const double Vihujennopeus = -75; 
     21    const double VihollinenKorkeus = 20; 
     22 
     23    PhysicsObject reuna; 
     24    PhysicsObject Suojeltava; 
    2025    enum TykinTyyppi 
    2126    { 
     
    2530        ViritettyTykki 
    2631    } 
     32    int kierrosNro = 0; 
     33 
     34    int[] Aallot = new int[] {30, 60, 120, 240, 480, 960, 1920, 3840, 7680, 15360  }; 
     35    Timer Spawner; 
    2736 
    2837    TykinTyyppi valittuTykki = TykinTyyppi.EiTykki; 
    2938 
    30     IntMeter rahaa = new IntMeter(200, 0, 999); 
     39   public IntMeter rahaa = new IntMeter(100, 0, 999999999); 
    3140 
    3241 
    3342    public override void Begin() 
    3443    { 
    35         SetWindowSize(800, 600); 
    36  
    37         Level.Width = 800; 
    38         Level.Height = 600; 
     44        IsFullScreen = true;  
     45 
     46        Level.Width = 1920; 
     47        LuoKentta(); 
     48            
     49         
    3950        LuoKassakone(); 
    4051        Camera.ZoomToLevel(); 
    41  
    42         PhysicsObject tykki = LisaaTykki(new Vector(Level.Right - tykinLeveys, Level.Top - tykinKorkeus*4),tykkikuva, false ); 
     52       // LisaaVihollinen(); 
     53         
     54        PhysicsObject tykki = LisaaTykki(new Vector(Level.Right - tykinLeveys, Level.Top - tykinKorkeus*4),tykkikuva, false, 1, Ammus  ); 
    4355        Mouse.ListenOn(tykki, MouseButton.Left, ButtonState.Pressed, OtaTykki, "Laita tykki paikoilleen.", TykinTyyppi.Perustykki); 
    4456 
    45         PhysicsObject Paivitettytykki = LisaaTykki(new Vector(Level.Right - tykinLeveys, Level.Top - tykinKorkeus * 6), Paivitetyntykinkuva, false); 
     57        PhysicsObject Paivitettytykki = LisaaTykki(new Vector(Level.Right - tykinLeveys, Level.Top - tykinKorkeus * 6), Paivitetyntykinkuva, false, 5, Parempiammus ); 
    4658        Mouse.ListenOn(Paivitettytykki, MouseButton.Left, ButtonState.Pressed, OtaTykki, "Laita tykki paikoilleen.", TykinTyyppi.PaivitettyTykki); 
    4759         
     
    4961        IsMouseVisible = true; 
    5062        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli"); 
     63        Keyboard.Listen(Key.Space, ButtonState.Pressed, AloitaAalto, "ALOITTAAALLON!"); 
     64    } 
     65    void AloitaAalto() 
     66    { 
     67        Spawner.Start(Aallot[kierrosNro]); 
    5168    } 
    5269    void OtaTykki(TykinTyyppi Tyyppi) 
     
    5471        valittuTykki = Tyyppi; 
    5572 
     73    } 
     74    void LuoKentta() 
     75    { 
     76       reuna = Level.CreateRightBorder(); 
     77       reuna.Color = Color.Red; 
     78       reuna.IsVisible = true; 
     79       reuna.Width = 1200; 
     80       reuna.Height = 50; 
     81       reuna.X = 800; 
     82 
     83       Suojeltava = Level.CreateRightBorder(); 
     84       Suojeltava.Color = Color.Blue; 
     85       Suojeltava.IsVisible = true; 
     86       Suojeltava.Width = 1200; 
     87       Suojeltava.Height = 50; 
     88       Suojeltava.X = -950; 
     89 
     90       AddCollisionHandler(Suojeltava, "Vihollinen", Havisitpelin); 
     91 
     92        
     93 
     94        Spawner = new Timer(); 
     95       Spawner.Interval = 1; 
     96       Spawner.Timeout += LisaaVihollinen; 
    5697    } 
    5798    void LuoKassakone() 
     
    63104        pisteNaytto.Color = Color.Transparent; 
    64105        pisteNaytto.BindTo(rahaa); 
    65         pisteNaytto.Font = LoadFont("Rahafontti"); 
     106        pisteNaytto.Font = LoadFont("Rahafontti");  
    66107        Add(pisteNaytto); 
    67108    } 
     
    71112        if (rahaa.Value >= 10 && valittuTykki == TykinTyyppi.Perustykki) 
    72113        { 
    73             rahaa.Value -= 10; 
    74  
    75             LisaaTykki(Mouse.PositionOnWorld, tykkikuva, true); 
     114            rahaa.Value -= 15; 
     115 
     116            LisaaTykki(Mouse.PositionOnWorld, tykkikuva, true, 1, Ammus ); 
    76117        } 
    77118        else if(rahaa.Value >= 50 && valittuTykki == TykinTyyppi.PaivitettyTykki) 
    78119        { 
    79             rahaa.Value -= 50; 
    80  
    81             LisaaTykki(Mouse.PositionOnWorld, Paivitetyntykinkuva, true ); 
     120            rahaa.Value -= 100; 
     121 
     122            LisaaTykki(Mouse.PositionOnWorld, Paivitetyntykinkuva, true, 5, Parempiammus ); 
    82123        } 
    83124         
     
    85126    } 
    86127 
    87     PhysicsObject LisaaTykki(Vector paikka, Image Tykinkuva, bool pystyykoAmpumaan) 
    88     { 
    89         PhysicsObject tykki = new PhysicsObject(tykinLeveys, tykinKorkeus); 
     128    Tykki LisaaTykki(Vector paikka, Image Tykinkuva, bool pystyykoAmpumaan, int damage, Image panoksenkuva) 
     129    { 
     130        Tykki tykki = new Tykki(tykinLeveys, tykinKorkeus, damage); 
    90131        Add(tykki); 
     132        tykki.MakeStatic(); 
    91133        tykki.Image = Tykinkuva; 
    92134        tykki.Tag = "Tykki"; 
    93135        tykki.Position = paikka; 
    94  
    95          
     136        tykki.Panoksenkuva = panoksenkuva; 
    96137 
    97138        if (pystyykoAmpumaan) 
    98139        { 
    99             Timer AmpumisAjastin = new Timer(); AmpumisAjastin.Interval = 0.5; 
     140            Timer AmpumisAjastin = new Timer(); AmpumisAjastin.Interval = 1.0; 
    100141            AmpumisAjastin.Timeout += delegate { Tykkiampuu(tykki); }; 
    101142            AmpumisAjastin.Start(); 
     
    104145        return tykki; 
    105146    } 
    106     void Tykkiampuu(PhysicsObject tykki) 
     147    void Tykkiampuu(Tykki tykki) 
    107148    { 
    108149        PhysicsObject panos = new PhysicsObject(Ammus.Width, Ammus.Height); 
    109         panos.Image = Ammus; 
     150        panos.Image = tykki.Panoksenkuva; 
    110151        Add(panos); 
     152        panos.Tag = "panos"; 
    111153        panos.Position = tykki.Position; 
     154        panos.CollisionIgnoreGroup = 3; 
    112155        panos.Hit(new Vector(200, 0)); 
    113     } 
     156        AddCollisionHandler(panos, "Vihollinen", delegate(PhysicsObject a, PhysicsObject b) { Panostormaaviholliseen(a, b, tykki.Damage); panos.Destroy();}); 
     157         
     158        panos.LifetimeLeft = TimeSpan.FromSeconds(6.5); 
     159 
     160         
     161        FollowerBrain seuraajanAivot = new FollowerBrain("Vihollinen"); 
     162        panos.Brain = seuraajanAivot; 
     163        seuraajanAivot.DistanceFar = 2000; 
     164        seuraajanAivot.DistanceClose = 200;  
     165 
     166 
     167        
     168    } 
     169    void Havisitpelin(PhysicsObject seina, PhysicsObject panos) 
     170    { 
     171        Exit(); 
     172    } 
     173    void LisaaVihollinen() 
     174    { 
     175        Vihu Vihollinen = new Vihu(VihollinenLeveys, VihollinenKorkeus); 
     176        Vihollinen.MakeStatic(); 
     177        Vihollinen.Image = Vihollisenkuva; 
     178        Vihollinen.ElamaLaskuri.Value = Vihollinen.ElamaLaskuri.Value - 0; 
     179        Vihollinen.Tag = "Vihollinen"; 
     180        Vihollinen.Arvo = 5; 
     181        Vihollinen.X = reuna.X; 
     182        Vihollinen.Y = RandomGen.NextDouble(Level.Bottom + VihollinenKorkeus/2,Level.Top - VihollinenKorkeus/2); 
     183        Vihollinen.Velocity = new Vector (Vihujennopeus, 0); 
     184         
     185        Add(Vihollinen); 
     186 
     187        
     188 
     189          
     190 
     191         
     192 
     193       
     194    } 
     195    void Panostormaaviholliseen(PhysicsObject panos, PhysicsObject Vihollinen, int damage) 
     196    { 
     197        ((Vihu)Vihollinen).ElamaLaskuri.Value -= damage; 
     198    } 
     199 
    114200 
    115201} 
    116  
     202class Vihu : PhysicsObject 
     203{ 
     204    private int arvo = 0; 
     205    public int Arvo 
     206    { 
     207        set { arvo = value; } 
     208        get { return arvo; } 
     209    } 
     210 
     211    private IntMeter elamaLaskuri = new IntMeter(5, 0, 10 ); 
     212    public IntMeter ElamaLaskuri 
     213    { 
     214        set { elamaLaskuri = value; } 
     215        get { return elamaLaskuri; } } 
     216 
     217    public Vihu(double leveys, double korkeus) 
     218        : base(leveys, korkeus) 
     219    { 
     220        Tower_Defense peli = this.Game as Tower_Defense; 
     221        elamaLaskuri.LowerLimit += delegate { this.Destroy(); peli.rahaa.Value += arvo; peli.RahaAani.Play(); }; 
     222         
     223    } 
     224     
     225 
     226} 
     227 
     228class Tykki : PhysicsObject 
     229{ 
     230    private Image panoksenkuva; 
     231    public Image Panoksenkuva 
     232    { 
     233        set { panoksenkuva = value; } 
     234        get { return panoksenkuva; } 
     235    } 
     236 
     237         
     238    private int damage = 0; 
     239    public int Damage 
     240    { 
     241        set { damage = value; } 
     242        get { return damage; } 
     243    } 
     244 
     245    public Tykki(double leveys, double korkeus, int damage) 
     246        : base(leveys, korkeus) 
     247    { 
     248        Damage = damage; 
     249    } 
     250} 
Note: See TracChangeset for help on using the changeset viewer.