Changeset 7392


Ignore:
Timestamp:
2016-06-16 15:00:59 (3 years ago)
Author:
latukova
Message:
 
Location:
2016/24/LasseK
Files:
66 added
6 edited

Legend:

Unmodified
Added
Removed
  • 2016/24/LasseK/TankkiPeli/TankkiPeli/TankkiPeli/TankkiPeli.cs

    r7359 r7392  
    1 using System; 
     1 
     2using System; 
    23using System.Collections.Generic; 
    34using Jypeli; 
     
    910public class TankkiPeli : PhysicsGame 
    1011{ 
    11     Image Tykki2 = LoadImage("TykkiJonkaMuokkasit"); 
    12     //Image Tykkikuva = LoadImage("Tykki"); 
     12    Image Tykkikuva = LoadImage("Tykki"); 
    1313    Image TankkiRunko = LoadImage("VaununRunko"); 
    1414    Image Tornikuva = LoadImage("Tykkitorni"); 
     15    Image Tykki2 = LoadImage("TykkiJonkaMuokkasit"); 
     16    Image kokoTankki = LoadImage("kokotankki"); 
     17    Image Ammus1 = LoadImage("Ammus1"); 
     18    //hysicsObject Tankki; 
     19    //PhysicsObject Torni; 
     20    //PhysicsObject Tykki; 
    1521 
    16     Image kokoTankki = LoadImage("kokotankki"); 
    17  
    18     PhysicsObject Tankki; 
    19     PhysicsObject Torni; 
    20     PhysicsObject Tykki; 
     22    Tankki tankki; 
     23    Tankki kakkostankki; 
    2124    public override void Begin() 
    22  
    2325    { 
    2426        Kentta(); 
    2527        LuoTankki(); 
    2628        AsetaOhjaimet(); 
    27  
    2829    } 
    2930 
    30     void LiikutaTykkiä(PhysicsObject Tykki, double Suunta) 
     31    void LiikutaTykkiä(Tankki tankki, double Suunta) 
    3132    { 
     33        GameObject tykki = ((Tankki)tankki).Tykki; 
     34        tykki.Angle += Angle.FromRadians(Suunta) * (tankki.FacingDirection == Direction.Left ? -1 : 1); 
     35 
     36        if (tankki.Tykki.Angle.MainDirection != tankki.FacingDirection) 
     37        { 
     38            tykki.Angle -= Angle.FromRadians(Suunta); 
     39        } 
    3240 
    3341 
     
    3745    { 
    3846        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli"); 
    39         Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaTankkia, "Liikuttaa Tankkia Vasempaan", Tankki, new Vector(-800, 0)); 
    40         Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaTankkia, "Liikuttaa Tankkia Oikeaan", Tankki, new Vector(550, 0)); 
    4147 
    42         Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaTykkiä, "Liikuta Tykkiä Ylös", Tykki, 0.1); 
     48        Keyboard.Listen(Key.Left, ButtonState.Down, delegate () { tankki.Tykki.Angle = tankki.FacingDirection == Direction.Right ? Angle.FromDegrees(180) : tankki.Tykki.Angle; LiikutaTankkia(tankki, new Vector(-2500.0, 0)); 
     49            if (tankki.FacingDirection == Direction.Right) { tankki.MirrorImage(); } tankki.FacingDirection = Direction.Left; }, "Liikuttaa Tankkia Vasempaan"); 
     50        Keyboard.Listen(Key.Right, ButtonState.Down, delegate () { tankki.Tykki.Angle = tankki.FacingDirection == Direction.Left ? Angle.FromDegrees(0) : tankki.Tykki.Angle; LiikutaTankkia(tankki, new Vector(2000.0, 0)); if (tankki.FacingDirection == Direction.Left) { tankki.MirrorImage(); } tankki.FacingDirection = Direction.Right; }, "Liikuttaa Tankkia Oikealle"); 
     51 
     52        Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaTykkiä, "Liikuta Tykkiä Ylös", tankki, 0.1); 
     53        Keyboard.Listen(Key.Down, ButtonState.Down, LiikutaTykkiä, "Liikuta Tykkiä Alas", tankki, -0.1); 
     54 
     55        /* 
     56        Keyboard.Listen(Key.A, ButtonState.Down, delegate () { kakkostankki.Tykki.Angle = kakkostankki.FacingDirection == Direction.Right ? Angle.FromDegrees(180) : kakkostankki.Tykki.Angle; LiikutaTankkia(kakkostankki, -300.0); }, "Liikuttaa Tankkia Vasempaan"); 
     57        Keyboard.Listen(Key.D, ButtonState.Down, delegate () { kakkostankki.Tykki.Angle = kakkostankki.FacingDirection == Direction.Left ? Angle.FromDegrees(0) : kakkostankki.Tykki.Angle; LiikutaTankkia(kakkostankki, 300.0); }, "Liikuttaa Tankkia Vasempaan"); 
     58 
     59        Keyboard.Listen(Key.W, ButtonState.Down, LiikutaTykkiä, "Liikuta Tykkiä Ylös", kakkostankki, 0.1); 
     60        Keyboard.Listen(Key.S, ButtonState.Down, LiikutaTykkiä, "Liikuta Tykkiä Alas", kakkostankki, -0.1); 
     61        */ 
     62 
     63        Keyboard.Listen(Key.Space, ButtonState.Down, () => Ammu(tankki, "tankki2"), "Ammu tykillä"); 
     64        Keyboard.Listen(Key.LeftShift, ButtonState.Down, () => Ammu(kakkostankki, "tankki1"), "Ammu tykillä"); 
    4365 
    4466    } 
    4567 
    46     void Tahtaa(AnalogState hiirenLiike) 
     68    void Ammu(Tankki tankki, String tankinnimi) 
    4769    { 
    48         if (Mouse.PositionOnWorld.X > Tankki.Position.X) 
     70        PhysicsObject ammus = tankki.Ase.Shoot(); 
     71 
     72        if (ammus != null) 
    4973        { 
    50             Torni.Image = Image.Mirror(Tornikuva); 
    51             Tykki.Image = Image.Mirror(Tykki2); 
    52             Tykki.Position = Torni.Position + new Vector(10, 1); 
    53         } 
    54         else 
    55         { 
    56             Torni.Image = Tornikuva; 
    57             Tykki.Image = Image.Mirror(Tykki2); 
    58             Tykki.Position = Torni.Position + new Vector(-10, 1); 
     74            ammus.Image = Ammus1; 
     75            ammus.Size *= 2; 
     76            AddCollisionHandler(ammus, tankinnimi, delegate (PhysicsObject a, PhysicsObject b) { ((Tankki)b).ElamaLaskuri.Value--; }); 
     77            ammus.IgnoresCollisionWith(tankki); 
     78            ammus.IgnoresCollisionWith(tankki.Tykki); 
     79            ammus.Position = tankki.Tykki.Position + Vector.FromLengthAndAngle(tankki.Tykki.Width * 0.5, tankki.Tykki.Angle); 
     80 
     81            //ammus.Velocity = new Vector(100, 0); 
     82            /*tankki.Ase.Ammo.Value = 500; 
     83            tankki.Ase.Power.DefaultValue = 2000; 
     84            tankki.Ase.FireRate = 5.0; 
     85            tankki.Ase.AmmoIgnoresGravity = false; 
     86            tankki.Ase.AmmoIgnoresExplosions = true; 
     87            tankki.Ase.CanHitOwner = true;*/ 
    5988        } 
    6089 
    61  
    62         Angle suunta = ((Mouse.PositionOnWorld - Tykki.AbsolutePosition).Normalize()).Angle; 
    63         Tykki.Position = Vector.FromLengthAndAngle(Tykki.Width, suunta); 
    64         Tykki.Angle = suunta; 
    6590    } 
    6691 
     
    6893    void Kentta() 
    6994    { 
    70         Surface alaReuna = Surface.CreateBottom(Level, 299, 300, 100, 5); 
     95        /*PhysicsObject alataso = PhysicsObject.CreateStaticObject(Level.Width, 60); 
     96        alataso.Position = new Vector(0, Level.Bottom + alataso.Height / 2); 
     97        Add(alataso);*/ 
     98 
     99        Surface alaReuna = Surface.CreateBottom(Level, 600, 625, 100, 2); 
     100        alaReuna.Restitution = 0; 
    71101        Add(alaReuna); 
     102 
     103 
    72104        Level.CreateLeftBorder(0, true); 
    73105        Level.CreateRightBorder(0, true); 
    74         Gravity = new Vector(0, -500); 
     106 
     107        Gravity = new Vector(0, -550); 
     108 
     109    } 
     110    void LuoTankki() 
     111    { 
     112        
     113        tankki = new Tankki(150, 75, Image.Mirror(kokoTankki), Tykki2); 
     114        tankki.Position = new Vector(-200, 0); 
     115        tankki.Tag = "tankki1"; 
     116        Add(tankki); 
     117        tankki.Ase.ProjectileCollision += (PhysicsObject a, PhysicsObject b) => AmmusOsuu(a, b); 
     118 
     119        kakkostankki = new Tankki(150, 75, Image.Mirror(kokoTankki), Tykki2); 
     120        kakkostankki.Position = new Vector(200, 0); 
     121        kakkostankki.Tag = "tankki2"; 
     122        Add(kakkostankki); 
     123        kakkostankki.Ase.ProjectileCollision += (PhysicsObject a, PhysicsObject b) => AmmusOsuu(a, b); 
    75124 
    76125    } 
    77126 
     127    void LiikutaTankkia(Tankki Tankki, Vector nopeus) 
     128    { 
     129        Tankki.Push(nopeus); 
     130    } 
    78131 
     132    public void AmmusOsuu(PhysicsObject ammus, PhysicsObject kohde) 
     133    { 
     134        //ammus.Destroy(); 
     135    } 
     136} 
    79137 
     138class Tankki : PhysicsObject 
     139{ 
     140    private IntMeter elamaLaskuri = new IntMeter(3, 0, 3); 
     141    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } } 
    80142 
    81     void LuoTankki() 
     143    public Image Tykki2; 
     144 
     145    public Weapon Ase; 
     146 
     147    public Direction FacingDirection = Direction.Right; 
     148 
     149    public PhysicsObject Tykki; 
     150 
     151    public override void Update(Time time) 
    82152    { 
     153        Ase.AbsolutePosition = Tykki.Position; 
     154        Ase.AbsoluteAngle = Tykki.Angle; 
    83155 
    84         Tankki = new PhysicsObject(160, 65); 
    85         Tankki.Image = TankkiRunko; 
    86         Tankki.LinearDamping = 0.95; 
    87         Tankki.Position = new Vector(-200, -350); 
    88         Add(Tankki); 
     156        Tykki.AbsolutePosition = this.FacingDirection == Direction.Right ? new Vector(this.X + 30, this.Top - 20) : new Vector(this.X - 30, this.Top - 20); 
    89157 
    90         Torni = new PhysicsObject(85, 45); 
    91         Torni.Image = Tornikuva; 
    92         Torni.IgnoresPhysicsLogics = true; 
    93         Torni.Position = Torni.Position + new Vector(0, 38); 
    94         Tankki.Add(Torni); 
     158        //LahtoPaikka = this.FacingDirection == Direction.Right ? new Vector(this.AbsolutePosition.X + this.Tykki.Width, Tykki.Y) : new Vector(this.AbsolutePosition.X - Tykki.Width, this.Tykki.Y); 
     159    } 
    95160 
    96         Tykki = new PhysicsObject(120, 10); //80 
    97         Tykki.Image = Tykki2; 
    98         Tykki.Position = Torni.Position + new Vector(-40, 1 );  //Torni.Position + new Vector(70, 1); 
    99         Tykki.IgnoresPhysicsLogics = true; 
    100         Tankki.Add(Tykki); 
     161    public Tankki(double leveys, double korkeus, Image kuva, Image tykki2) 
     162        : base(leveys, korkeus) 
     163    { 
     164        this.IsUpdated = true; 
    101165 
     166        Tykki2 = tykki2; 
     167        Tykki = new PhysicsObject(120, 10); 
     168        Tykki.Image = Image.Mirror(tykki2); 
     169        this.Game.Add(Tykki, -1); 
     170        Tykki.Position = new Vector(this.X + 34, this.Top - 20); 
     171        Tykki.IgnoresCollisionResponse = true; 
    102172 
     173        Ase = new Cannon(30, 10); 
     174        Ase.IsVisible = true; 
     175        Ase.FireRate = 1; 
     176        Ase.IsAddedToGame = true; 
     177        Ase.MaxAmmoLifetime = TimeSpan.FromSeconds(4); 
     178        Ase.CanHitOwner = false; 
     179        // this.Add(Ase);  
     180        elamaLaskuri.LowerLimit += delegate { this.Destroy(); this.Tykki.Destroy(); this.Ase.Destroy(); }; 
     181        Image = kuva; 
     182        Mass = 5; 
    103183 
    104184    } 
    105     void LiikutaTankkia(PhysicsObject Tankki, Vector suunta) 
    106     { 
    107         Tankki.Push(suunta); 
    108  
    109     } 
    110  
    111185} 
Note: See TracChangeset for help on using the changeset viewer.