public bool PrzesuńlubObróć(Figura figura, TrybRuchu trybRuchu) { bool wynik = false; switch (trybRuchu) { case TrybRuchu.PrzesuńWDół: if (CzyMożnaObrócićLubPrzesunąć(figura, trybRuchu)) { CzyśćFigurę(figura); RysujFigurę(figura.PrzesuńWDół()); wynik = true; } break; case TrybRuchu.PrzesuńWLewo: if (CzyMożnaObrócićLubPrzesunąć(figura, trybRuchu)) { CzyśćFigurę(figura); RysujFigurę(figura.PrzesuńWLewo()); wynik = true; } break; case TrybRuchu.PrzesuńWPrawo: if (CzyMożnaObrócićLubPrzesunąć(figura, trybRuchu)) { CzyśćFigurę(figura); RysujFigurę(figura.PrzesuńWPrawo()); wynik = true; } break; case TrybRuchu.Obróc: if (CzyMożnaObrócićLubPrzesunąć(figura, trybRuchu)) { CzyśćFigurę(figura); RysujFigurę(figura.Obróc()); wynik = true; } break; } return(wynik); }
public bool CzyMożnaObrócićLubPrzesunąć(Figura figura, TrybRuchu trybRuchu) { Figura kopia = (Figura)figura.Clone(); switch (trybRuchu) { case TrybRuchu.PrzesuńWDół: kopia.PrzesuńWDół(); break; case TrybRuchu.PrzesuńWLewo: kopia.PrzesuńWLewo(); break; case TrybRuchu.PrzesuńWPrawo: kopia.PrzesuńWPrawo(); break; case TrybRuchu.Obróc: kopia.Obróc(); break; } Figura różnicaPomiędzyOryginalnąAPrzesuniętą = figura.RóżnicaPomiędzyFigurami(kopia); if ((różnicaPomiędzyOryginalnąAPrzesuniętą.MaxX > 9) || (różnicaPomiędzyOryginalnąAPrzesuniętą.MinX < 0) || (różnicaPomiędzyOryginalnąAPrzesuniętą.MinY < 0) || (różnicaPomiędzyOryginalnąAPrzesuniętą.MaxY > 19)) { return(false); } else { foreach (Klocek klocek in różnicaPomiędzyOryginalnąAPrzesuniętą.ListaKlocków) { if (Klocki[klocek.Y][klocek.X].Kolor != Brushes.Transparent) { return(false); } } return(true); } }