- Timestamp:
- 2010-06-15 13:47:12 (13 years ago)
- Location:
- 2010/24/arhetaka/FysiikkaPeli1/FysiikkaPeli1
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
2010/24/arhetaka/FysiikkaPeli1/FysiikkaPeli1/Content/Content.contentproj
r817 r865 65 65 </Compile> 66 66 </ItemGroup> 67 <ItemGroup> 68 <Compile Include="special.png"> 69 <Name>special</Name> 70 <Importer>TextureImporter</Importer> 71 <Processor>TextureProcessor</Processor> 72 </Compile> 73 </ItemGroup> 67 74 </Project> -
2010/24/arhetaka/FysiikkaPeli1/FysiikkaPeli1/Peli.cs
r817 r865 18 18 PhysicsObject ylaReuna; 19 19 20 IntMeter pelaajan1Pisteet; 21 IntMeter pelaajan2Pisteet; 20 IntMeter p1Pisteet; 21 IntMeter p2Pisteet; 22 23 BarGauge p1special; 24 BarGauge p2special; 25 26 DoubleMeter p1specialTeho; 27 DoubleMeter p2specialTeho; 28 29 Double specialLifeTime = 1; 30 31 Boolean p1specialkentalla = false; 32 Boolean p2specialkentalla = false; 33 34 Timer p1specialTimer; 35 Timer p2specialTimer; 36 37 int specialNopeus = 750; 22 38 23 39 Animation alus1_kaasu_tekst; … … 27 43 double resolutionY; 28 44 45 Timer UpdateTimer; 46 double updateInterval = 0.1; 47 48 int siirtymaLaidassa = 80; 49 29 50 bool alus1_kaasuttaa = false; 30 bool alus2_kaasuttaa = false; 51 bool alus2_kaasuttaa = false; 52 53 int perusAmmusKoko = 3; 54 int AlustenHealth = 10; 55 double alustenIlmanvastus = 0.999; 31 56 32 57 protected override void Begin() 33 58 { 34 LuoKentta(); 59 AloitaPeli(); 60 } 61 void AloitaPeli() 62 { 63 ClearAll(); 64 alus1_kaasuttaa = false; 65 alus2_kaasuttaa = false; 66 p1specialkentalla = false; 67 p2specialkentalla = false; 68 LuoKentta(); 35 69 AsetaOhjaimet(); 36 70 LisaaLaskurit(); 37 AloitaPeli(); 38 } 39 71 } 40 72 void LuoKentta() 41 73 { 42 74 TeeAlukset(); 75 UpDate(); //tekee ajopisteet ja tutkii ovatko alukset vielä kentällä 76 TeeSpecial(); //tekee special aseet ja lisää kuuntelijat 77 resolutionX = Screen.Width; 78 resolutionY = Screen.Height; 79 TeeReunat(); 80 Level.Background.CreateStars(1000); 81 Camera.ZoomToLevel(); 82 } 83 void TeeAlukset() 84 { 43 85 alus1 = LuoAlus(1, Level.Left + 20.0, 0.0); 44 86 alus1.Tag = "alus1"; … … 46 88 47 89 Image[] alus_kaasu1 = LoadImages( 48 "alus1", 90 "alus1", 49 91 "alus1_kaasuttaa" 50 92 ); 51 93 alus1_kaasu_tekst = new Animation(alus_kaasu1); 52 alus1_kaasu_tekst.FPS = 5;94 alus1_kaasu_tekst.FPS = 10; 53 95 alus1.Animation = alus1_kaasu_tekst; 54 96 97 alus1.LinearDamping = alustenIlmanvastus; 98 55 99 alus2 = LuoAlus(2, Level.Right - 20.0, 0.0); 56 alus2.Tag = "alus2"; 100 alus2.Tag = "alus2"; 57 101 alus2.Image = LoadImage("alus2"); 58 102 59 103 Image[] alus_kaasu2 = LoadImages( 60 "alus2", 104 "alus2", 61 105 "alus2_kaasuttaa" 62 ); 106 ); 63 107 64 108 alus2_kaasu_tekst = new Animation(alus_kaasu2); … … 66 110 alus2.Animation = alus2_kaasu_tekst; 67 111 alus2.Angle = Angle.StraightAngle; 68 //TeeAjoviivaa();69 70 resolutionX = Screen.Width;71 resolutionY = Screen.Height;72 112 alus2.LinearDamping = alustenIlmanvastus; 113 114 } 115 void TeeReunat() 116 { 73 117 74 118 vasenReuna = PhysicsObject.CreateStaticObject(5, resolutionX + 500); 75 119 vasenReuna.IgnoresPhysicsLogics = true; 76 120 vasenReuna.Color = Color.White; 77 vasenReuna.X = -(resolutionX / 2) - 50; 121 vasenReuna.X = -(resolutionX / 2) - 50; 78 122 vasenReuna.Restitution = 1.0; 79 123 vasenReuna.IsVisible = true; … … 108 152 alaReuna.IgnoresPhysicsLogics = true; 109 153 alaReuna.Color = Color.White; 110 alaReuna.Y = -(resolutionY / 2) - 50;154 alaReuna.Y = -(resolutionY / 2) - 50; 111 155 alaReuna.Restitution = 0.0; 112 156 alaReuna.IsVisible = true; … … 115 159 AddCollisionHandler(alaReuna, ReunaanOsuu); 116 160 Add(alaReuna); 117 118 Level.Background.CreateStars(1000); 119 Camera.ZoomToLevel(); 120 } 121 161 } 122 162 PhysicsObject LuoAlus(int kumpi, double x, double y) 123 163 { … … 134 174 return alus; 135 175 } 136 137 176 void LisaaLaskurit() 138 177 { 139 pelaajan1Pisteet = LuoPisteLaskuri(Screen.Left + 100.0, Screen.Top - 100.0); 140 pelaajan2Pisteet = LuoPisteLaskuri(Screen.Right - 100.0, Screen.Top - 100.0); 141 } 142 178 p1Pisteet = LuoPisteLaskuri(Screen.Left + 100.0, Screen.Top - 100.0); 179 p2Pisteet = LuoPisteLaskuri(Screen.Right - 100.0, Screen.Top - 100.0); 180 } 143 181 IntMeter LuoPisteLaskuri(double x, double y) 144 182 { 145 183 IntMeter laskuri = new IntMeter(0); 146 laskuri.MaxValue = 100;184 laskuri.MaxValue = AlustenHealth; 147 185 ValueDisplay naytto = new ValueDisplay(); 148 186 naytto.BindTo(laskuri); … … 150 188 naytto.Y = y; 151 189 naytto.ValueColor = Color.White; 190 laskuri.UpperLimit += Voitto; 191 152 192 Add(naytto); 153 193 return laskuri; 154 194 } 155 156 void KasittelePallonTormays(PhysicsObject pallo, PhysicsObject kohde)157 {158 if (kohde == oikeaReuna)159 {160 pelaajan1Pisteet.Value += 1;161 }162 else if (kohde == vasenReuna)163 {164 pelaajan2Pisteet.Value += 1;165 }166 }167 168 void AloitaPeli()169 {170 171 }172 173 195 void AsetaOhjaimet() 174 196 { … … 190 212 Keyboard.Listen(Key.RightShift, ButtonState.Pressed, ammu, null, alus2, 1); 191 213 192 193 214 Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet"); 194 215 Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu"); 195 196 ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu"); 197 ControllerTwo.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu"); 198 } 199 200 216 Keyboard.Listen(Key.F2, ButtonState.Pressed, AloitaPeli, "uusi peli"); 217 } 201 218 void kaannaVasen(PhysicsObject alus, int nopeus) 202 219 { … … 211 228 alus.AngularVelocity = 0; 212 229 } 213 214 230 void kaasua(PhysicsObject alus, int nopeus) 215 231 { … … 243 259 void ammu(PhysicsObject alus, int nopeus) 244 260 { 245 246 PhysicsObject ammus = new PhysicsObject(3, 3);247 ammus.Shape = Shapes.Circle;248 ammus.Color = Color.YellowGreen;249 ammus.X = alus.X;250 ammus.Y = alus.Y;251 ammus.IgnoresCollisionResponse= true;252 TimeSpan elinaika = new TimeSpan(20000000);253 254 255 256 257 258 259 261 PhysicsObject ammus = new PhysicsObject(perusAmmusKoko, perusAmmusKoko); 262 ammus.Shape = Shapes.Circle; 263 ammus.Color = Color.YellowGreen; 264 ammus.X = alus.X; 265 ammus.Y = alus.Y; 266 ammus.IgnoresCollisionResponse = true; 267 ammus.IgnoresExplosions = true; 268 TimeSpan elinaika = new TimeSpan(15000000); 269 ammus.MaximumLifetime = elinaika; 270 ammus.Tag = alus.Tag; 271 AddCollisionHandler(ammus, AmmusOsuu); 272 Add(ammus); 273 Angle aluksenKulma = alus.Angle; 274 Vector impulssi = Vector.FromLengthAndAngle(500, aluksenKulma); 275 ammus.Hit(impulssi); 260 276 } 261 277 void AmmusOsuu(PhysicsObject ammus, PhysicsObject kohde) 262 278 { 263 279 if (ammus.Tag != kohde.Tag && kohde.Tag != "ajopiste") 264 { 265 ammus.Destroy(); 266 Explosion rajahdys = new Explosion(20); 267 rajahdys.Position = ammus.Position; 268 Add(rajahdys); 280 { 281 if (ammus.Width != perusAmmusKoko) //jos special 282 { 283 if (kohde.Tag == "alus1") 284 { 285 rajaytap2Special(p2specialTimer); 286 } 287 else 288 { 289 rajaytap1Special(p1specialTimer); 290 } 291 } 292 else 293 { 294 Explosion rajahdys; 295 rajahdys = new Explosion(40); 296 rajahdys.Position = ammus.Position; 297 Add(rajahdys); 298 } 299 269 300 if (kohde.Tag == "alus2") 270 301 { 271 p elaajan1Pisteet.Value += 1;302 p1Pisteet.Value += (int)(ammus.Width / 3); 272 303 } 273 304 else if (kohde.Tag == "alus1") 274 305 { 275 p elaajan2Pisteet.Value += 1;306 p2Pisteet.Value += (int)(ammus.Width / 3); 276 307 } 277 } 308 ammus.Destroy(); 309 } 310 278 311 } 279 312 void AlusOsuu(PhysicsObject alus, PhysicsObject kohde) 280 313 { 281 314 282 } 283 284 void TeeAjoviivaa() 285 { 286 Timer aikaLaskuri = new Timer(); // luodaan uusi ajastin, nimeltä aikaLaskuri 287 aikaLaskuri.Interval = 0.1; // ajastukseksi 5 sekuntia 288 aikaLaskuri.Trigger += new Timer.TriggerHandler(PudotaAjopiste); // // asetetaan tapahtuma, kun aikaLaskuri kun 5 sekuntia on kulunut. 289 Add(aikaLaskuri); // lisätään aikaLaskuri peliin 290 aikaLaskuri.Start(); // käynnistetään aikaLaskuri 291 } 292 293 private void PudotaAjopiste(Timer sender) 294 { 295 if (alus1_kaasuttaa) 315 } 316 void UpDate() 317 { 318 UpdateTimer = new Timer(); // luodaan uusi ajastin, nimeltä aikaLaskuri 319 UpdateTimer.Interval = updateInterval; // ajastukseksi 5 sekuntia 320 UpdateTimer.Trigger += new Timer.TriggerHandler(Paivitys); // // asetetaan tapahtuma, kun aikaLaskuri kun 5 sekuntia on kulunut. 321 Add(UpdateTimer); // lisätään aikaLaskuri peliin 322 UpdateTimer.Start(); // käynnistetään aikaLaskuri 323 } 324 private void Paivitys(Timer sender) 325 { 326 //ovatko alukset kentällä 327 if (alus1.X < (vasenReuna.X - 50)) 328 { 329 alus1.X = oikeaReuna.X - siirtymaLaidassa; 330 } 331 if (alus2.X < (vasenReuna.X - 50)) 332 { 333 alus2.X = oikeaReuna.X - siirtymaLaidassa; 334 } 335 if (alus1.X > (oikeaReuna.X + 50)) 336 { 337 alus1.X = vasenReuna.X + siirtymaLaidassa; 338 } 339 if (alus2.X > (oikeaReuna.X + 50)) 340 { 341 alus2.X = vasenReuna.X + siirtymaLaidassa; 342 } 343 if (alus1.Y > (ylaReuna.Y + 50)) 344 { 345 alus1.Y = alaReuna.Y + siirtymaLaidassa; 346 } 347 if (alus2.Y > (ylaReuna.Y + 50)) 348 { 349 alus2.Y = alaReuna.Y + siirtymaLaidassa; 350 } 351 if (alus1.Y < (alaReuna.Y - 50)) 352 { 353 alus1.Y = ylaReuna.Y - siirtymaLaidassa; 354 } 355 if (alus2.Y < (alaReuna.Y - 50)) 356 { 357 alus1.Y = ylaReuna.Y - siirtymaLaidassa; 358 } 359 360 361 if (alus1_kaasuttaa) //ajopisteen teko 296 362 { 297 363 PhysicsObject piste = teeAjopiste(alus1); 298 364 Add(piste); 299 365 } 300 if (alus2_kaasuttaa) 366 if (alus2_kaasuttaa) //ajopisteen teko 301 367 { 302 368 PhysicsObject piste = teeAjopiste(alus2); … … 319 385 return piste; 320 386 } 321 322 387 void ReunaanOsuu(PhysicsObject reuna, PhysicsObject osuja) 323 388 { 324 389 if (reuna.Tag == "ylareuna") 325 390 { 326 osuja.Y = alaReuna.Y + 80;391 osuja.Y = alaReuna.Y + siirtymaLaidassa; 327 392 } 328 393 329 394 if (reuna.Tag == "alareuna") 330 395 { 331 osuja.Y = ylaReuna.Y - 80;396 osuja.Y = ylaReuna.Y - siirtymaLaidassa; 332 397 } 333 398 if (reuna.Tag == "vasenreuna") 334 399 { 335 osuja.X = (oikeaReuna.X - 80);400 osuja.X = (oikeaReuna.X - siirtymaLaidassa); 336 401 } 337 402 338 403 if (reuna.Tag == "oikeareuna") 339 404 { 340 osuja.X = (vasenReuna.X + 80); 341 } 342 } 343 405 osuja.X = (vasenReuna.X + siirtymaLaidassa); 406 } 407 } 408 void TeeSpecial() 409 { 410 p1specialTimer = new Timer(); 411 p2specialTimer = new Timer(); 412 413 Add(p1specialTimer); 414 Add(p2specialTimer); 415 416 LisaaSpecialOhjaimet(); 417 LisaaSpecialMittarit(); 418 } 419 void LisaaSpecialOhjaimet() 420 { 421 Keyboard.Listen(Key.LeftShift, ButtonState.Down, LataaSpecial, "Special lataus", alus1, 1); 422 Keyboard.Listen(Key.LeftShift, ButtonState.Released, LaukaiseSpecial, "laukaise special", alus1, 1); 423 Keyboard.Listen(Key.RightControl, ButtonState.Down, LataaSpecial, "Special lataus", alus2, 1); 424 Keyboard.Listen(Key.RightControl, ButtonState.Released, LaukaiseSpecial, "laukaise special", alus2, 1); 425 } 426 void LisaaSpecialMittarit() 427 { 428 p1specialTeho = new DoubleMeter(perusAmmusKoko + 1); 429 p1specialTeho.MaxValue = 100; 430 431 p2specialTeho = new DoubleMeter(perusAmmusKoko + 1); 432 p2specialTeho.MaxValue = 100; 433 434 p1special = new BarGauge(); 435 p1special.Max = 100; 436 p1special.ValueColor = Color.LightBlue; 437 p1special.BindTo(p1specialTeho); 438 p1special.X = Screen.Left + 100; 439 p1special.Y = Screen.Top - 200; 440 p1special.Width = 40; 441 Add(p1special); 442 443 p2special = new BarGauge(); 444 p2special.Max = 100; 445 p2special.ValueColor = Color.LightBlue; 446 p2special.BindTo(p2specialTeho); 447 p2special.X = Screen.Right - 100; 448 p2special.Y = Screen.Top - 200; 449 p2special.Width = 40; 450 Add(p2special); 451 } 452 void LataaSpecial(PhysicsObject alus, int nopeus) 453 { 454 if (alus.Tag == "alus1" && !p1specialkentalla) 455 { 456 p1specialTeho.Value += 2; 457 } 458 if (alus.Tag == "alus2" && !p2specialkentalla) 459 { 460 p2specialTeho.Value += 2; 461 } 462 463 } 464 void LaukaiseSpecial(PhysicsObject alus, int nopeus) 465 { 466 if (alus.Tag == "alus1" && !p1specialkentalla) 467 { 468 PhysicsObject ammus = new PhysicsObject((p1specialTeho / 2), (p1specialTeho / 2)); 469 ammus.Shape = Shapes.Circle; 470 ammus.Color = Color.LightBlue; 471 ammus.X = alus.X; 472 ammus.Y = alus.Y; 473 ammus.IgnoresCollisionResponse = true; 474 ammus.Tag = alus.Tag; 475 AddCollisionHandler(ammus, AmmusOsuu); 476 ammus.Image = LoadImage("special"); 477 ammus.CanRotate = true; 478 ammus.AngularVelocity = 3; 479 Add(ammus); 480 Angle aluksenKulma = alus.Angle; 481 Vector impulssi = Vector.FromLengthAndAngle(specialNopeus, aluksenKulma); 482 ammus.Hit(impulssi); 483 p1specialkentalla = true; 484 p1specialTimer.Tag = ammus; 485 p1specialTimer.Interval = specialLifeTime; 486 p1specialTimer.Trigger += new Timer.TriggerHandler(rajaytap1Special); // // asetetaan tapahtuma, kun aikaLaskuri kun 5 sekuntia on kulunut. 487 p1specialTimer.Start(); 488 p1specialTeho.Value = 1; 489 } 490 if (alus.Tag == "alus2" && !p2specialkentalla) 491 { 492 PhysicsObject ammus = new PhysicsObject((p2specialTeho / 2), (p2specialTeho / 2)); 493 ammus.Shape = Shapes.Circle; 494 ammus.Color = Color.LightBlue; 495 ammus.X = alus.X; 496 ammus.Y = alus.Y; 497 ammus.IgnoresCollisionResponse = true; 498 TimeSpan elinaika = TimeSpan.FromSeconds(specialLifeTime); 499 ammus.MaximumLifetime = elinaika; 500 ammus.Tag =alus.Tag; 501 AddCollisionHandler(ammus, AmmusOsuu); 502 ammus.Image = LoadImage("special"); 503 ammus.CanRotate = true; 504 ammus.AngularVelocity = 3; 505 Add(ammus); 506 Angle aluksenKulma = alus.Angle; 507 Vector impulssi = Vector.FromLengthAndAngle(specialNopeus, aluksenKulma); 508 ammus.Hit(impulssi); 509 p2specialkentalla = true; 510 p2specialTimer.Tag = ammus; 511 p2specialTimer.Interval = specialLifeTime; 512 p2specialTimer.Trigger += new Timer.TriggerHandler(rajaytap2Special); // // asetetaan tapahtuma, kun aikaLaskuri kun 5 sekuntia on kulunut. 513 p2specialTimer.Start(); 514 p2specialTeho.Value = 1; 515 } 516 } 517 private void rajaytap1Special(Timer sender) 518 { 519 PhysicsObject ammus = (PhysicsObject)sender.Tag; 520 Explosion jysays = new Explosion(ammus.Width * 3); 521 jysays.Position = ammus.Position; 522 jysays.Force = 100; 523 Add(jysays); 524 ammus.Destroy(); 525 sender.Stop(); 526 p1specialkentalla = false; 527 } 528 private void rajaytap2Special(Timer sender) 529 { 530 PhysicsObject ammus = (PhysicsObject)sender.Tag; 531 Explosion jysays = new Explosion(ammus.Width * 3); 532 jysays.Position = ammus.Position; 533 jysays.Force = 100; 534 Add(jysays); 535 ammus.Destroy(); 536 sender.Stop(); 537 p2specialkentalla = false; 538 } 539 void Voitto(int laskuri) 540 { 541 if (p1Pisteet.Value >= AlustenHealth) 542 { 543 MessageDisplay.TextColor = Color.White; 544 MessageDisplay.Add("Pelaaja 1 voitti pelin."); 545 } 546 if (p2Pisteet.Value >= AlustenHealth) 547 { 548 MessageDisplay.TextColor = Color.White; 549 MessageDisplay.Add("Pelaaja 2 voitti pelin."); 550 } 551 } 344 552 }
Note: See TracChangeset
for help on using the changeset viewer.