Changeset 3976 for 2013/23


Ignore:
Timestamp:
2013-06-05 14:28:35 (6 years ago)
Author:
josaklin
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • 2013/23/Jon-ErikK/magnetaa.cs

    r3971 r3976  
    88 
    99public class magnetaa : PhysicsGame 
    10 { 
    11     PhysicsObject pelaaja1; 
    12     PhysicsObject pelaaja2; 
     10{     
     11    IntMeter pelaaja1Elamat; 
     12    IntMeter pelaaja2Elamat; 
     13 
     14    Pelaaja pelaaja1;     
     15    Pelaaja pelaaja2; 
    1316 
    1417    PhysicsObject ylaraja; 
     
    1720    PhysicsObject vasenraja; 
    1821 
    19     bool onkoMagneettinen1; 
    20     bool onkoMagneettinen2; 
    21  
    2222    List<Ammus> ammukset; 
    23  
    24     Vector edellinenNopeusPelaaja1; 
    25     Vector edellinenNopeusPelaaja2; 
    2623 
    2724    Vector ylos = new Vector(0, 100); 
     
    3431        ammukset = new List<Ammus>(); 
    3532 
    36         onkoMagneettinen1 = true; 
    37         onkoMagneettinen1 = false; 
    38  
    39         edellinenNopeusPelaaja2 = new Vector(0, -400); 
    40         edellinenNopeusPelaaja1 = new Vector(0, 400); 
    41  
    42         luoKentta(0,100,0,-100); 
     33        luoKentta(-300,0,300,0,new Vector(0,1), new Vector(0,-1)); 
    4334        asetaNappaimet(); 
    4435    } 
    4536 
    46     public void luoKentta(double pelaaja1x, double pelaaja1y, double pelaaja2x, double pelaaja2y) { 
    47  
    48         pelaaja1 = luoPelaaja(pelaaja1x, pelaaja1y); 
    49         pelaaja2 = luoPelaaja(pelaaja2x, pelaaja2y); 
    50  
     37   //pelikentän säätäminen alkaa 
     38 
     39    public void uusiPeli() 
     40    { 
     41        ClearAll(); 
     42        Begin(); 
     43    } 
     44     
     45    public void luoKentta(double pelaaja1x, double pelaaja1y, double pelaaja2x, double pelaaja2y, Vector alkusuunta1, Vector alkusuunta2) { 
     46 
     47        luoKentanOsat(); 
     48         
     49        pelaaja1 = luoPelaaja(pelaaja1x, pelaaja1y, alkusuunta1, 1); 
     50        pelaaja2 = luoPelaaja(pelaaja2x, pelaaja2y, alkusuunta2, 2); 
     51 
     52    } 
     53 
     54    public void luoKentanOsat() 
     55    { 
    5156        Level.BackgroundColor = Color.Black; 
    5257 
     58        luoTausta(); 
     59        luoKentanReunat(); 
     60        luoLaskurit(); 
     61 
     62    } 
     63 
     64    public void luoKentanReunat() 
     65    { 
    5366        alaraja = Level.CreateBottomBorder(); 
    54         alaraja.IsVisible = true; 
     67        alaraja.Color = Color.Charcoal; 
    5568 
    5669        ylaraja = Level.CreateTopBorder(); 
    57         ylaraja.IsVisible = true; 
     70        ylaraja.Color = Color.Charcoal; 
    5871 
    5972        oikearaja = Level.CreateRightBorder(); 
    60         oikearaja.IsVisible = true; 
     73        oikearaja.Color = Color.Charcoal; 
    6174 
    6275        vasenraja = Level.CreateLeftBorder(); 
    63         vasenraja.IsVisible = true; 
    64     } 
    65  
    66     public PhysicsObject luoPelaaja(double x, double y) { 
    67  
    68         PhysicsObject pelaaja = PhysicsObject.CreateStaticObject(50, 50); 
    69         pelaaja.Shape = Shape.Circle; 
    70         pelaaja.X = x; 
    71         pelaaja.Y = y; 
    72         pelaaja.MaxVelocity = 100.0; 
     76        vasenraja.Color = Color.Charcoal; 
     77 
     78 
     79    } 
     80 
     81    public void luoTausta() 
     82    { 
     83        GameObject sivusuorakulmio1 = new GameObject(300, Screen.Height); 
     84        sivusuorakulmio1.Color = Color.Charcoal; 
     85        sivusuorakulmio1.X = -650; 
     86        sivusuorakulmio1.Y = 0; 
     87 
     88        GameObject sivusuorakulmio2 = new GameObject(300, Screen.Height); 
     89        sivusuorakulmio2.Color = Color.Charcoal; 
     90        sivusuorakulmio2.X = 650; 
     91        sivusuorakulmio2.Y = 0; 
     92 
     93        Add(sivusuorakulmio1); 
     94        Add(sivusuorakulmio2); 
     95 
     96        GameObject tasoOikea = new GameObject(300, Level.Height); 
     97        tasoOikea.Shape = Shape.Rectangle; 
     98        tasoOikea.X =Level.Right-150; 
     99        tasoOikea.Y = 0; 
     100        tasoOikea.Color = Color.Silver; 
     101 
     102        GameObject tasoVasen = new GameObject(300, Level.Height); 
     103        tasoVasen.Shape = Shape.Rectangle; 
     104        tasoVasen.X = Level.Left+150; 
     105        tasoVasen.Y = 0; 
     106        tasoVasen.Color = Color.Silver; 
     107 
     108        Add(tasoOikea,-3); 
     109        Add(tasoVasen,-3); 
     110    } 
     111 
     112    public void luoLaskurit() 
     113    { 
     114        pelaaja1Elamat = new IntMeter(5); 
     115        Label pistenaytto1 = new Label(); 
     116        pistenaytto1.X = Screen.Left + 100; 
     117        pistenaytto1.Y = Screen.Top - 130; 
     118        pistenaytto1.Color = Color.Charcoal; 
     119        pistenaytto1.TextColor = Color.White; 
     120 
     121        pistenaytto1.BindTo(pelaaja1Elamat); 
     122 
     123        pelaaja2Elamat = new IntMeter(5); 
     124        Label pistenaytto2 = new Label(); 
     125        pistenaytto2.X = Screen.Right - 100; 
     126        pistenaytto2.Y = Screen.Top - 130; 
     127        pistenaytto2.Color = Color.Charcoal; 
     128        pistenaytto2.TextColor = Color.White; 
     129 
     130        pistenaytto2.BindTo(pelaaja2Elamat); 
     131 
     132        Add(pistenaytto1); 
     133        Add(pistenaytto2); 
     134 
     135        Label pelaajan1 = luoTekstillinenLabel(Color.White, "Pelaajan 1 elamat"); 
     136        pelaajan1.X = Screen.Left + 110; 
     137        pelaajan1.Y = Screen.Top - 100; 
     138 
     139        Label pelaajan2 = luoTekstillinenLabel(Color.White, "Pelaajan 2 elamat"); 
     140        pelaajan2.X = Screen.Right - 110; 
     141        pelaajan2.Y = Screen.Top - 100; 
     142 
     143        Add(pelaajan1); 
     144        Add(pelaajan2); 
     145 
     146    } 
     147 
     148    public Label luoTekstillinenLabel(Color tekstinVari, String teksti) 
     149    { 
     150        Label tekstikentta = new Label(); 
     151        tekstikentta.Text = teksti; 
     152        tekstikentta.TextColor = tekstinVari; 
     153 
     154        return tekstikentta; 
     155    } 
     156 
     157    public Pelaaja luoPelaaja(double x, double y, Vector alkusuunta, int numero) { 
     158 
     159        Pelaaja pelaaja = new Pelaaja(x, y, alkusuunta, numero); 
     160 
    73161        Add(pelaaja); 
    74162 
     
    76164    } 
    77165 
     166    //pelikentän säätö loppuu 
     167 
     168    //Näppäimistön asetus 
     169     
    78170    public void asetaNappaimet() { 
    79171 
    80         Keyboard.Listen(Key.Up, ButtonState.Down, asetaNopeus, null, pelaaja1, ylos); 
    81         Keyboard.Listen(Key.Up, ButtonState.Released, asetaNopeus, null, pelaaja1, Vector.Zero); 
    82         Keyboard.Listen(Key.Down, ButtonState.Down, asetaNopeus, null, pelaaja1, alas); 
    83         Keyboard.Listen(Key.Down, ButtonState.Released, asetaNopeus, null, pelaaja1, Vector.Zero); 
    84         Keyboard.Listen(Key.Left, ButtonState.Down, asetaNopeus, null, pelaaja1, vasen); 
    85         Keyboard.Listen(Key.Left, ButtonState.Released, asetaNopeus, null, pelaaja1, Vector.Zero); 
    86         Keyboard.Listen(Key.Right, ButtonState.Down, asetaNopeus, null, pelaaja1, oikea); 
    87         Keyboard.Listen(Key.Right, ButtonState.Released, asetaNopeus, null, pelaaja1, Vector.Zero); 
    88         Keyboard.Listen(Key.Period, ButtonState.Pressed, ammu, null, pelaaja1); 
    89         Keyboard.Listen(Key.Comma, ButtonState.Pressed, vaihdaMagneettisuus, null, pelaaja1); 
    90  
    91         Keyboard.Listen(Key.W, ButtonState.Down, asetaNopeus, null, pelaaja2, ylos); 
    92         Keyboard.Listen(Key.W, ButtonState.Released, asetaNopeus, null, pelaaja2, Vector.Zero); 
    93         Keyboard.Listen(Key.S, ButtonState.Down, asetaNopeus, null, pelaaja2, alas); 
    94         Keyboard.Listen(Key.S, ButtonState.Released, asetaNopeus, null, pelaaja2, Vector.Zero); 
    95         Keyboard.Listen(Key.A, ButtonState.Down, asetaNopeus, null, pelaaja2, vasen); 
    96         Keyboard.Listen(Key.A, ButtonState.Released, asetaNopeus, null, pelaaja2, Vector.Zero); 
    97         Keyboard.Listen(Key.D, ButtonState.Down, asetaNopeus, null, pelaaja2, oikea); 
    98         Keyboard.Listen(Key.D, ButtonState.Released, asetaNopeus, null, pelaaja2, Vector.Zero); 
    99         Keyboard.Listen(Key.Space, ButtonState.Pressed, ammu, null, pelaaja2); 
    100         Keyboard.Listen(Key.LeftShift, ButtonState.Pressed, vaihdaMagneettisuus, null, pelaaja2); 
     172        Keyboard.Listen(Key.W, ButtonState.Down, asetaPelaajanSuuntaJaNopeus, null, pelaaja1, ylos); 
     173        Keyboard.Listen(Key.W, ButtonState.Released, asetaPelaajanSuuntaJaNopeus, null, pelaaja1, Vector.Zero); 
     174        Keyboard.Listen(Key.S, ButtonState.Down, asetaPelaajanSuuntaJaNopeus, null, pelaaja1, alas); 
     175        Keyboard.Listen(Key.S, ButtonState.Released, asetaPelaajanSuuntaJaNopeus, null, pelaaja1, Vector.Zero); 
     176        Keyboard.Listen(Key.A, ButtonState.Down, asetaPelaajanSuuntaJaNopeus, null, pelaaja1, vasen); 
     177        Keyboard.Listen(Key.A, ButtonState.Released, asetaPelaajanSuuntaJaNopeus, null, pelaaja1, Vector.Zero); 
     178        Keyboard.Listen(Key.D, ButtonState.Down, asetaPelaajanSuuntaJaNopeus, null, pelaaja1, oikea); 
     179        Keyboard.Listen(Key.D, ButtonState.Released, asetaPelaajanSuuntaJaNopeus, null, pelaaja1, Vector.Zero); 
     180 
     181        Keyboard.Listen(Key.Space, ButtonState.Pressed, ammu, null, pelaaja1); 
     182        Keyboard.Listen(Key.LeftShift, ButtonState.Pressed, vaihdaMagneettisuus, null, pelaaja1); 
     183        Keyboard.Listen(Key.Q, ButtonState.Pressed, luoTorni, null, pelaaja1); 
     184         
     185        Keyboard.Listen(Key.Up, ButtonState.Down, asetaPelaajanSuuntaJaNopeus, null, pelaaja2, ylos); 
     186        Keyboard.Listen(Key.Up, ButtonState.Released, asetaPelaajanSuuntaJaNopeus, null, pelaaja2, Vector.Zero); 
     187        Keyboard.Listen(Key.Down, ButtonState.Down, asetaPelaajanSuuntaJaNopeus, null, pelaaja2, alas); 
     188        Keyboard.Listen(Key.Down, ButtonState.Released, asetaPelaajanSuuntaJaNopeus, null, pelaaja2, Vector.Zero); 
     189        Keyboard.Listen(Key.Left, ButtonState.Down, asetaPelaajanSuuntaJaNopeus, null, pelaaja2, vasen); 
     190        Keyboard.Listen(Key.Left, ButtonState.Released, asetaPelaajanSuuntaJaNopeus, null, pelaaja2, Vector.Zero); 
     191        Keyboard.Listen(Key.Right, ButtonState.Down, asetaPelaajanSuuntaJaNopeus, null, pelaaja2, oikea); 
     192        Keyboard.Listen(Key.Right, ButtonState.Released, asetaPelaajanSuuntaJaNopeus, null, pelaaja2, Vector.Zero); 
     193 
     194        Keyboard.Listen(Key.Period, ButtonState.Pressed, ammu, null, pelaaja2); 
     195        Keyboard.Listen(Key.Comma, ButtonState.Pressed, vaihdaMagneettisuus, null, pelaaja2); 
     196        Keyboard.Listen(Key.M, ButtonState.Pressed, luoTorni, null, pelaaja2); 
     197 
     198 
    101199 
    102200        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli"); 
     
    104202    } 
    105203 
    106     public void asetaMagneettitarkastusajastin() 
    107     { 
    108         while (true) 
    109         { 
    110             Timer.SingleShot(0.01, tarkistaMagneetit); 
    111         } 
    112     } 
    113  
    114     public void tarkistaMagneetit() 
    115     { 
    116     } 
    117  
    118     public void asetaNopeus(PhysicsObject pelaaja, Vector nopeus) 
    119     { 
    120  
    121         if (pelaaja == pelaaja1) 
    122         { 
    123             if (nopeus.X != 0 && nopeus.Y != 0) 
    124             { 
    125                 edellinenNopeusPelaaja1 = nopeus * 4; 
    126             } 
    127             else 
    128             { 
    129                 edellinenNopeusPelaaja1 = pelaaja.Velocity * 4; 
    130             } 
    131         } 
    132         if (pelaaja == pelaaja2) 
    133         { 
    134             if (nopeus.X != 0 && nopeus.Y != 0) 
    135             { 
    136                 edellinenNopeusPelaaja2 = nopeus * 4; 
    137             } 
    138             else 
    139             { 
    140                 edellinenNopeusPelaaja2 = pelaaja.Velocity * 4; 
    141             } 
    142         } 
     204    //Näppäimistön asetus loppuu 
     205 
     206    //Pelaajan ja ammuksen nopeuksien asettaminen 
     207 
     208    public void asetaPelaajanSuuntaJaNopeus(Pelaaja pelaaja, Vector nopeus) 
     209    { 
     210        if (nopeus != Vector.Zero) 
     211        { 
     212            Vector apuyksikkovektori = new Vector(nopeus.X, nopeus.Y); 
     213            apuyksikkovektori = apuyksikkovektori.Normalize(); 
     214 
     215 
     216 
     217            maaritaPelaajanAmmuksenSuunta(apuyksikkovektori, pelaaja); 
     218        }   
     219 
     220        pelaaja.Velocity = nopeus; 
     221    } 
     222 
     223    public void maaritaPelaajanAmmuksenSuunta(Vector yksikkovektori, Pelaaja pelaaja) 
     224    { 
     225        if (yksikkovektori.X != 0 || yksikkovektori.Y != 0) 
     226        { 
     227            pelaaja.ammustenSuunta = yksikkovektori; 
     228        } 
     229    } 
     230 
     231    //Pelaajan ja ammuksen nopeuden asetus loppuu 
     232 
     233    //Ammuksen syntymä ja kuolema 
     234 
     235    public void ammu(Pelaaja pelaaja) 
     236    {   
     237        double apuX=pelaaja.ammustenSuunta.X * 38; 
     238        double apuY=pelaaja.ammustenSuunta.Y * 38; 
     239 
     240        luoUusiAmmus(pelaaja.X+apuX, pelaaja.Y+apuY, pelaaja.magneetinVari, pelaaja.ammustenSuunta);       
     241    } 
     242 
     243    public void luoUusiAmmus(double x, double y, bool onkoMagneettinen, Vector suunta) 
     244    { 
     245        Ammus uusiAmmus = new Ammus(onkoMagneettinen, x, y); 
     246 
     247        uusiAmmus.Velocity=suunta*200; 
     248        uusiAmmus.X = x; 
     249        uusiAmmus.Y = y; 
    143250         
    144         pelaaja.Velocity = nopeus;     
    145     } 
    146  
    147     public void ammu(PhysicsObject pelaaja) 
    148     {   
    149         if (pelaaja == pelaaja1) 
    150         { 
    151             luoUusiAmmus(pelaaja.X + edellinenNopeusPelaaja1.X / 10, pelaaja.Y + edellinenNopeusPelaaja1.Y / 10, onkoMagneettinen1, edellinenNopeusPelaaja1); 
    152              
    153         } 
    154         else 
    155         { 
    156             luoUusiAmmus(pelaaja.X + edellinenNopeusPelaaja2.X / 10, pelaaja.Y + edellinenNopeusPelaaja2.Y / 10, onkoMagneettinen2, edellinenNopeusPelaaja2); 
    157         } 
    158     } 
    159  
    160     public void luoUusiAmmus(double x, double y, bool onkoMagneettinen, Vector nopeus) 
    161     { 
    162         Ammus uusiAmmus = new Ammus(20, 20, onkoMagneettinen); 
    163  
    164         uusiAmmus.asetaNopeus(nopeus); 
    165         uusiAmmus.asetaSijainti(x, y); 
     251        AddCollisionHandler(uusiAmmus, osumaAmmuksella);         
    166252         
    167253        Add(uusiAmmus); 
    168254 
    169         AddCollisionHandler(uusiAmmus, osumaAmmuksella); 
    170  
    171255        ammukset.Add(uusiAmmus); 
    172     } 
    173  
    174     public void vaihdaMagneettisuus(PhysicsObject pelaaja) 
    175     { 
    176         if (pelaaja == pelaaja1) 
    177         { 
    178             if (onkoMagneettinen1) 
    179             { 
    180                 onkoMagneettinen1 = false; 
    181             } 
    182             else 
    183             { 
    184                 onkoMagneettinen1 = true; 
    185             } 
    186         } 
    187         else 
    188         { 
    189             if (onkoMagneettinen2) 
    190             { 
    191                 onkoMagneettinen2 = false; 
    192             } 
    193             else 
    194             { 
    195                 onkoMagneettinen2 = true; 
    196             } 
    197         } 
    198256 
    199257    } 
     
    201259    public void osumaAmmuksella(PhysicsObject ammus, PhysicsObject osuja) 
    202260    { 
     261        Ammus ammus2 = (Ammus)ammus; 
     262 
    203263        for(int i=0;i<ammukset.Count;i++){ 
    204264            if (ammukset[i] == osuja) 
     
    206266                osuja.Destroy(); 
    207267                ammus.Destroy(); 
    208             } 
    209         } 
    210  
    211         if (osuja == pelaaja1 || osuja == pelaaja2) { 
    212  
     268 
     269                Ammus osuja2 = (Ammus)osuja; 
     270                ammukset.Remove(ammus2); 
     271                ammukset.Remove(osuja2); 
     272 
     273                return; 
     274            } 
     275        } 
     276 
     277        if (osuja == pelaaja2 || osuja == pelaaja1) { 
     278 
     279            Pelaaja pelaaja = (Pelaaja)osuja; 
     280 
     281            if (pelaaja == pelaaja1) 
     282            { 
     283                pelaaja1Elamat.Value -= 1; 
     284                if (pelaaja1Elamat < 1) 
     285                { 
     286                    pelinLoppu(pelaaja); 
     287                } 
     288            } 
     289            if(pelaaja == pelaaja2) 
     290            { 
     291                pelaaja2Elamat.Value -= 1; 
     292                if (pelaaja2Elamat < 1) 
     293                { 
     294                    pelinLoppu(pelaaja); 
     295                } 
     296            } 
     297             
     298             
    213299            ammus.Destroy(); 
    214  
    215         } 
    216  
    217         if (osuja == ylaraja || osuja == alaraja) 
    218         { 
    219             ammus.Destroy(); 
     300            ammukset.Remove(ammus2); 
     301 
     302            return; 
     303 
     304        } 
     305 
     306        if (osuukoReunaan(ammus, osuja)) 
     307        { 
     308            return; 
     309        } 
     310 
     311        for (int i = 0; i < pelaaja1.tornit.Count; i++) 
     312        { 
     313            if (pelaaja1.tornit[i] == osuja) 
     314            { 
     315                ammus.Destroy(); 
     316 
     317                ammukset.Remove(ammus2); 
     318 
     319                pelaaja1.tornit[i].elamat.Value -= 1; 
     320 
     321                if (pelaaja1.tornit[i].elamat <= 0) 
     322                { 
     323                    osuja.Destroy(); 
     324                    pelaaja1.tornit.Remove(pelaaja1.tornit[i]); 
     325                } 
     326 
     327                return; 
     328            } 
     329        } 
     330 
     331        for (int i = 0; i < pelaaja2.tornit.Count; i++) 
     332        { 
     333            if (pelaaja2.tornit[i] == osuja) 
     334            { 
     335                ammus.Destroy(); 
     336 
     337                ammukset.Remove(ammus2); 
     338 
     339                pelaaja2.tornit[i].elamat.Value -= 1; 
     340 
     341                if (pelaaja2.tornit[i].elamat <= 0) 
     342                { 
     343                    osuja.Destroy(); 
     344                    pelaaja2.tornit.Remove(pelaaja2.tornit[i]); 
     345                } 
     346 
     347                return; 
     348            } 
     349        } 
     350    } 
     351 
     352    public bool osuukoReunaan(PhysicsObject ammus, PhysicsObject osuja) 
     353    { 
     354        if (osuja == ylaraja) 
     355        { 
     356            ammus.Y = -ammus.Y + 11; 
     357            Vector nopeus = ammus.Velocity; 
     358            Timer.SingleShot(0.01, delegate { ammus.Velocity = nopeus; }); 
     359 
     360            return true; 
     361 
     362        } 
     363 
     364        if (osuja == alaraja) 
     365        { 
     366            ammus.Y = -ammus.Y - 11; 
     367            Vector nopeus = ammus.Velocity; 
     368            Timer.SingleShot(0.01, delegate { ammus.Velocity = nopeus; }); 
     369 
     370            return true; 
    220371        } 
    221372 
    222373        if (osuja == oikearaja) 
    223374        { 
    224             ammus.X = -ammus.X + 12; 
    225             Timer.SingleShot(0.01, delegate { ammus.Velocity = new Vector(400.0, 0); }); 
     375            ammus.X = -ammus.X + 11; 
     376            Vector nopeus = ammus.Velocity; 
     377            Timer.SingleShot(0.01, delegate { ammus.Velocity = nopeus; }); 
     378 
     379            return true; 
     380 
     381        } 
     382 
     383        if (osuja == vasenraja) 
     384        { 
     385            ammus.X = -ammus.X - 11; 
     386            Vector nopeus = ammus.Velocity; 
     387            Timer.SingleShot(0.01, delegate { ammus.Velocity = nopeus; }); 
     388            return true; 
     389        } 
     390 
     391        return false; 
     392    } 
     393 
     394    //Ammuksen käsittely loppuu 
     395 
     396    //Magneettisuuden vaihto alkaa 
     397 
     398    public void vaihdaMagneettisuus(PhysicsObject pelaaja) 
     399    { 
     400        if (pelaaja == pelaaja2) 
     401        { 
     402            if (pelaaja2.magneetinVari) 
     403            { 
     404                pelaaja2.magneetinVari = false; 
     405            } 
     406            else 
     407            { 
     408                pelaaja2.magneetinVari = true; 
     409            } 
     410        } 
     411        else 
     412        { 
     413            if (pelaaja1.magneetinVari) 
     414            { 
     415                pelaaja1.magneetinVari = false; 
     416            } 
     417            else 
     418            { 
     419                pelaaja1.magneetinVari = true; 
     420            } 
     421        } 
     422 
     423    } 
     424 
     425    //Magneettisuuden vaihto loppuu 
     426 
     427    //Tornilogiikka alkaa 
     428 
     429    public void luoTorni(PhysicsObject pelaaja) 
     430    { 
     431        if (pelaaja == pelaaja1) 
     432        { 
     433            if (pelaaja1.tornit.Count < 5) 
     434            { 
     435                Add(pelaaja1.lisaaMagneettitorni()); 
     436            } 
     437        } 
     438        else 
     439        { 
     440            if (pelaaja2.tornit.Count < 5) 
     441            { 
     442                Add(pelaaja2.lisaaMagneettitorni()); 
     443            } 
     444        } 
     445    } 
     446 
     447    //Tornilogiikka loppuu 
     448 
     449    //Peli päivitys alkaa 
     450 
     451    protected override void Update(Time time) 
     452    { 
     453        base.Update(time); 
     454        tarkistaMagneetit(); 
     455        pelaajienTarkistus(); 
     456    } 
     457 
     458    public void tarkistaMagneetit() 
     459    { 
     460         
     461        for (int i = 0; i < ammukset.Count-1; i++) 
     462        { 
     463            for (int j = 1 + i; j < ammukset.Count; j++) 
     464            { 
     465                Vector voima = luoMagneettivektori(ammukset[i], ammukset[j]); 
     466                Vector vastavoima = voima * -1; 
     467 
     468                ammukset[i].Velocity = ammukset[i].Velocity + voima; 
     469                ammukset[j].Velocity = ammukset[j].Velocity + vastavoima; 
     470            } 
     471        } 
     472 
     473        for (int i = 0; i < pelaaja1.tornit.Count; i++) 
     474        { 
     475            for (int j = 0; j < ammukset.Count; j++) 
     476            { 
     477                Ammus ammus = ammukset[j]; 
    226478                 
    227         }  
    228  
    229         if (osuja == vasenraja) 
    230         { 
    231             ammus.X = -ammus.X - 12; 
    232             Timer.SingleShot(0.01, delegate { ammus.Velocity = new Vector(-400.0, 0); }); 
    233         } 
    234  
    235     } 
     479                Vector voima = luoMagneettivektori(ammukset[j],pelaaja1.tornit[i]); 
     480 
     481                ammus.Velocity = ammus.Velocity + voima; 
     482            } 
     483        } 
     484 
     485        for (int i = 0; i < pelaaja2.tornit.Count; i++) 
     486        { 
     487            for (int j = 0; j < ammukset.Count; j++) 
     488            { 
     489                Vector voima = luoMagneettivektori(ammukset[j], pelaaja2.tornit[i]); 
     490 
     491                ammukset[j].Velocity = ammukset[j].Velocity + voima; 
     492            } 
     493        } 
     494    } 
     495 
     496    public Vector luoMagneettivektori(Magneettisuus kohde1, Magneettisuus kohde2) 
     497    { 
     498        Vector palautettava = new Vector(kohde1.GetX()-kohde2.GetX(), kohde1.GetY()-kohde2.GetY()); 
     499        palautettava=palautettava.Normalize(); 
     500 
     501        double etaisyys = Math.Sqrt((kohde1.GetX() - kohde2.GetX())*(kohde1.GetX() - kohde2.GetX())+(kohde1.GetY() - kohde2.GetY())*(kohde1.GetY() - kohde2.GetY())); 
     502 
     503        palautettava = (palautettava * kohde1.MagneetinVahvuus*kohde2.MagneetinVahvuus) / (etaisyys*etaisyys); 
     504 
     505        if (!((kohde1.Magneettisuus && kohde2.Magneettisuus) || (!kohde1.Magneettisuus && !kohde2.Magneettisuus))) 
     506        { 
     507            palautettava = palautettava * -1; 
     508        } 
     509 
     510        return palautettava; 
     511    } 
     512 
     513    public void pelaajienTarkistus() 
     514    { 
     515        tarkistaPelaaja(pelaaja2); 
     516        tarkistaPelaaja(pelaaja1); 
     517    } 
     518 
     519    public void tarkistaPelaaja(Pelaaja pelaaja) 
     520    { 
     521        if (pelaaja.X < Level.Left + 25) 
     522        { 
     523            pelaaja.X = Level.Left + 25; 
     524            asetaPelaajanSuuntaJaNopeus(pelaaja, Vector.Zero); 
     525        } 
     526        else if(pelaaja.X>Level.Right - 25) 
     527        { 
     528            pelaaja.X = Level.Right - 25; 
     529            asetaPelaajanSuuntaJaNopeus(pelaaja, Vector.Zero); 
     530        } 
     531 
     532        if (pelaaja.Y > Level.Top - 25) 
     533        { 
     534            pelaaja.Y = Level.Top - 25; 
     535            asetaPelaajanSuuntaJaNopeus(pelaaja, Vector.Zero); 
     536        } 
     537        else if (pelaaja.Y < Level.Bottom + 25) 
     538        { 
     539            pelaaja.Y = Level.Bottom + 25; 
     540            asetaPelaajanSuuntaJaNopeus(pelaaja, Vector.Zero); 
     541        } 
     542 
     543        if (pelaaja.X < 225 && pelaaja.X > -225) 
     544        { 
     545            if (pelaaja.X < 0) 
     546            { 
     547                pelaaja.X = -225; 
     548                asetaPelaajanSuuntaJaNopeus(pelaaja, Vector.Zero); 
     549            } 
     550            else 
     551            { 
     552                pelaaja.X = 225; 
     553                asetaPelaajanSuuntaJaNopeus(pelaaja, Vector.Zero); 
     554            } 
     555        } 
     556    } 
     557 
     558    //Päivitys loppuu 
     559 
     560    public void pelinLoppu(Pelaaja pelaaja) 
     561    { 
     562        Pelaaja ilmoitettava; 
     563         
     564        if(pelaaja==pelaaja1) 
     565        { 
     566            ilmoitettava=pelaaja2; 
     567        } 
     568        else 
     569        { 
     570            ilmoitettava=pelaaja1; 
     571        } 
     572 
     573        ClearAll(); 
     574 
     575        Level.BackgroundColor = Color.Blue; 
     576         
     577        Label voittajanilmoitus = luoTekstillinenLabel(Color.White,"Pelaaja "+ilmoitettava.pelaajanNumero+" voitti pelin!"); 
     578        voittajanilmoitus.X = 0; 
     579        voittajanilmoitus.Y = 0; 
     580 
     581        Add(voittajanilmoitus); 
     582 
     583        Timer.SingleShot(2, delegate { uusiPeli(); }); 
    236584     
     585    } 
     586 
    237587} 
    238588 
    239 class Ammus : PhysicsObject 
     589public interface Magneettisuus 
    240590{ 
    241     public PhysicsObject vaikutusalue; 
    242     public bool magneettisuus; 
    243  
    244     public Ammus(double leveys, double korkeus,bool magneettisuus) 
    245     :base(leveys,korkeus) 
    246     { 
    247         vaikutusalue=PhysicsObject.CreateStaticObject(leveys*2,korkeus*2); 
     591    bool Magneettisuus { get; } 
     592    double MagneetinVahvuus { get; } 
     593    double GetX(); 
     594    double GetY(); 
     595} 
     596 
     597public class Ammus : PhysicsObject, Magneettisuus 
     598{ 
     599     
     600    private bool magneettisuus; 
     601    public bool Magneettisuus { get { return magneettisuus; } } 
     602 
     603    private double magneetinVahvuus; 
     604    public double MagneetinVahvuus { get { return magneetinVahvuus; } } 
     605 
     606    public Ammus(bool magneettisuus, double x, double y) 
     607    :base(20,20) 
     608    { 
    248609        this.magneettisuus = magneettisuus; 
    249  
    250         vaikutusalue.IsVisible = false; 
     610        this.magneetinVahvuus = 200; 
     611 
    251612        if (magneettisuus == true) 
    252613        { 
     
    259620 
    260621        base.Shape = Shape.Circle; 
    261         vaikutusalue.Shape = Shape.Circle; 
    262  
    263  
    264     } 
    265  
    266     public void asetaNopeus(Vector nopeus) { 
    267         base.Velocity = nopeus; 
    268         vaikutusalue.Velocity = nopeus; 
    269     } 
    270  
    271     public void asetaSijainti(double x, double y) { 
    272  
    273622        base.X = x; 
    274623        base.Y = y; 
    275         vaikutusalue.X = x; 
    276         vaikutusalue.Y = y; 
    277  
     624 
     625       } 
     626 
     627    public double GetY() 
     628    { 
     629        return base.Y; 
     630    } 
     631 
     632    public double GetX() 
     633    { 
     634        return base.X; 
    278635    } 
    279636} 
     637 
     638public class Magneettitorni:PhysicsObject, Magneettisuus 
     639{ 
     640    public IntMeter elamat; 
     641     
     642    private bool magneettisuus; 
     643    public bool Magneettisuus{get{return magneettisuus;}} 
     644 
     645    private double magneetinVahvuus; 
     646    public double MagneetinVahvuus{get{return magneetinVahvuus;}} 
     647 
     648    public Magneettitorni(bool magneettisuus, double x, double y) 
     649        :base(30,30) 
     650    { 
     651        this.magneettisuus = magneettisuus; 
     652        this.magneetinVahvuus = 300; 
     653 
     654        base.IgnoresPhysicsLogics = true; 
     655        base.IgnoresCollisionResponse = true; 
     656        base.Shape = Shape.Circle; 
     657        base.X = x; 
     658        base.Y = y; 
     659 
     660        if (magneettisuus) 
     661        { 
     662            base.Color = Color.Red; 
     663        } 
     664        else 
     665        { 
     666            base.Color = Color.Blue; 
     667        } 
     668 
     669        elamat = new IntMeter(3); 
     670    } 
     671 
     672    public double GetX() 
     673    { 
     674        return base.X; 
     675    } 
     676 
     677    public double GetY() 
     678    { 
     679        return base.Y; 
     680    } 
     681 
     682} 
     683 
     684public class Pelaaja : PhysicsObject 
     685{ 
     686    public bool magneetinVari; 
     687    public Vector ammustenSuunta; 
     688    public int pelaajanNumero; 
     689 
     690    public List<Magneettitorni> tornit; 
     691     
     692    public Pelaaja(double x, double y, Vector ammustenSuunta, int pelaaja) 
     693        :base(50,50) 
     694    { 
     695        magneetinVari = false; 
     696        this.ammustenSuunta = ammustenSuunta; 
     697        pelaajanNumero = pelaaja; 
     698 
     699        tornit = new List<Magneettitorni>(); 
     700 
     701        base.X = x; 
     702        base.Y = y; 
     703        base.Color = Color.White; 
     704        base.Shape = Shape.Circle; 
     705        base.IgnoresCollisionResponse = true; 
     706        base.IgnoresPhysicsLogics = true; 
     707    } 
     708 
     709    public Magneettitorni lisaaMagneettitorni() 
     710    { 
     711        Magneettitorni torni = new Magneettitorni(magneetinVari, base.X, base.Y); 
     712 
     713        tornit.Add(torni); 
     714 
     715        return torni; 
     716    } 
     717} 
Note: See TracChangeset for help on using the changeset viewer.