private List <Tuple <int, int> > koordinateAktivnogLika(Kvadrat kojiLik) { var lista = new List <Tuple <int, int> >(); for (int i = 1; i < tip_igre.Redaka + 1; ++i) { for (int j = 1; j < tip_igre.Stupaca + 1; ++j) { if (ploca[i, j] == kojiLik) { lista.Add(new Tuple <int, int>(i, j)); } } } return(lista); }
private void deaktiviraj(Kvadrat kojiLik) { for (int i = 1; i < tip_igre.Redaka + 1; ++i) { for (int j = 1; j < tip_igre.Stupaca + 1; ++j) { if (ploca[i, j] == kojiLik) { if (kojiLik == Kvadrat.OkupiraPrviLik) { ploca[i, j] = Kvadrat.DeaktiviraniPrvi; } else { ploca[i, j] = Kvadrat.DeaktiviraniDrugi; } } } } }
private bool mozeRotacija(Kvadrat kojiLik) { Oblik koji = kojiLik == Kvadrat.OkupiraPrviLik ? aktivniOblikPrvi : aktivniOblikDrugi; bool[,] rotirano = koji.SimulirajRotaciju(); var boundingBox = koji.Pozicija; for (int i = boundingBox.Item1, k = 0; i < boundingBox.Item1 + 4; ++i, ++k) { for (int j = boundingBox.Item2, l = 0; j < boundingBox.Item2 + 4; ++j, ++l) { if (i < 0 || j < 0 || rotirano[k, l] && ((ploca[i, j] != Kvadrat.Slobodan && ploca[i, j] != kojiLik) || !uGranicama(new Tuple <int, int>(i, j)))) { return(false); } } } return(true); }
private void gravitacijaAktivni(Kvadrat lik) { if (postojiAktivan(lik)) { if (mozePomak(lik, Nivo().Smjer)) { pomakni(lik, Nivo().Smjer); } else { deaktiviraj(lik); } } else { if (!inicijaliziraj(lik)) { iduciNivo(); } } }
private void rotiraj(Kvadrat kojiLik) { Oblik koji = kojiLik == Kvadrat.OkupiraPrviLik ? aktivniOblikPrvi : aktivniOblikDrugi; koji.Rotiraj(); var boundingBox = koji.Pozicija; for (int i = boundingBox.Item1, k = 0; i < boundingBox.Item1 + 4; ++i, ++k) { for (int j = boundingBox.Item2, l = 0; j < boundingBox.Item2 + 4; ++j, ++l) { if (koji.Celije[k, l]) { ploca[i, j] = kojiLik; } else if (!koji.Celije[k, l] && ploca[i, j] == kojiLik) { ploca[i, j] = Kvadrat.Slobodan; } } } }
private bool mozePomak(Kvadrat kojiLik, Smjerovi smjer) { if (Nivo().Smjer == suprotanSmjer(smjer) && (nagradni_bodovi <= 0 || !Nivo().NagradniKvadratici)) { return(false); } for (int i = 1; i < tip_igre.Redaka + 1; ++i) { for (int j = 1; j < tip_igre.Stupaca + 1; ++j) { if (ploca[i, j] == kojiLik) { var sljedeciIndeksi = nxt(i, j, smjer); if (!uGranicama(sljedeciIndeksi) || zauzet(ploca[sljedeciIndeksi.Item1, sljedeciIndeksi.Item2]) || okupiraDrugi(kojiLik, ploca[sljedeciIndeksi.Item1, sljedeciIndeksi.Item2])) { return(false); } } } } return(true); }
} //Zavrseno! -Ogranicenje da figura ne pokriva figuru sa leve strane int provera_pri_pomeranju_desno() { int k = 1; switch (F) { case 1: if ((Controls["panel" + (f.koord[1] + 1)].BackColor != Color.White) || (Controls["panel" + (f.koord[3] + 1)].BackColor != Color.White)) { k = 0; } break; case 2: if ((Controls["panel" + (f.koord[0] + 1)].BackColor != Color.White) || (Controls["panel" + (f.koord[2] + 1)].BackColor != Color.White) || (Controls["panel" + (f.koord[3] + 1)].BackColor != Color.White)) { k = 0; } break; case 3: if ((Controls["panel" + (f.koord[3] + 1)].BackColor != Color.White)) { k = 0; } break; case 4: if ((Controls["panel" + (f.koord[0] + 1)].BackColor != Color.White) || (Controls["panel" + (f.koord[1] + 1)].BackColor != Color.White) || (Controls["panel" + (f.koord[3] + 1)].BackColor != Color.White)) { k = 0; } break; case 5: if ((Controls["panel" + (f.koord[0] + 1)].BackColor != Color.White) || (Controls["panel" + (f.koord[1] + 1)].BackColor != Color.White) || (Controls["panel" + (f.koord[2] + 1)].BackColor != Color.White) || (Controls["panel" + (f.koord[3] + 1)].BackColor != Color.White)) { k = 0; } break; case 6: if ((Controls["panel" + (f.koord[0] + 1)].BackColor != Color.White) || (Controls["panel" + (f.koord[3] + 1)].BackColor != Color.White)) { k = 0; } break; case 7: if ((Controls["panel" + (f.koord[1] + 1)].BackColor != Color.White) || (Controls["panel" + (f.koord[2] + 1)].BackColor != Color.White) || (Controls["panel" + (f.koord[3] + 1)].BackColor != Color.White)) { k = 0; } break; case 8: if ((Controls["panel" + (f.koord[2] + 1)].BackColor != Color.White) || (Controls["panel" + (f.koord[3] + 1)].BackColor != Color.White)) { k = 0; } break; case 9: if ((Controls["panel" + (f.koord[0] + 1)].BackColor != Color.White) || (Controls["panel" + (f.koord[2] + 1)].BackColor != Color.White)) { k = 0; } break; case 10: if ((Controls["panel" + (f.koord[0] + 1)].BackColor != Color.White) || (Controls["panel" + (f.koord[3] + 1)].BackColor != Color.White)) { k = 0; } break; case 11: if ((Controls["panel" + (f.koord[0] + 1)].BackColor != Color.White) || (Controls["panel" + (f.koord[2] + 1)].BackColor != Color.White) || (Controls["panel" + (f.koord[3] + 1)].BackColor != Color.White)) { k = 0; } break; case 12: if ((Controls["panel" + (f.koord[2] + 1)].BackColor != Color.White) || (Controls["panel" + (f.koord[3] + 1)].BackColor != Color.White)) { k = 0; } break; case 13: if ((Controls["panel" + (f.koord[0] + 1)].BackColor != Color.White) || (Controls["panel" + (f.koord[2] + 1)].BackColor != Color.White) || (Controls["panel" + (f.koord[3] + 1)].BackColor != Color.White)) { k = 0; } break; case 14: if ((Controls["panel" + (f.koord[0] + 1)].BackColor != Color.White) || (Controls["panel" + (f.koord[1] + 1)].BackColor != Color.White) || (Controls["panel" + (f.koord[3] + 1)].BackColor != Color.White)) { k = 0; } break; case 15: if ((Controls["panel" + (f.koord[0] + 1)].BackColor != Color.White) || (Controls["panel" + (f.koord[3] + 1)].BackColor != Color.White)) { k = 0; } break; case 16: if ((Controls["panel" + (f.koord[1] + 1)].BackColor != Color.White) || (Controls["panel" + (f.koord[2] + 1)].BackColor != Color.White) || (Controls["panel" + (f.koord[3] + 1)].BackColor != Color.White)) { k = 0; } break; case 17: if ((Controls["panel" + (f.koord[2] + 1)].BackColor != Color.White) || (Controls["panel" + (f.koord[3] + 1)].BackColor != Color.White)) { k = 0; } break; case 18: if ((Controls["panel" + (f.koord[0] + 1)].BackColor != Color.White) || (Controls["panel" + (f.koord[2] + 1)].BackColor != Color.White) || (Controls["panel" + (f.koord[3] + 1)].BackColor != Color.White)) { k = 0; } break; case 19: if ((Controls["panel" + (f.koord[1] + 1)].BackColor != Color.White) || (Controls["panel" + (f.koord[3] + 1)].BackColor != Color.White)) { k = 0; } break; } if (k == 0) { return(0); } else { return(1); } } //Zavrseno! -Ogranicenje da figura ne pokriva figuru sa desne strane
private bool inicijaliziraj(Kvadrat kojiLik) { bool prvi = kojiLik == Kvadrat.OkupiraPrviLik; bool viseLikova = Nivo().ViseLikova; urediLikove(kojiLik); Oblik aktivni = kojiLik == Kvadrat.OkupiraPrviLik ? aktivniOblikPrvi : aktivniOblikDrugi; int shift = 0; if (viseLikova && kojiLik == Kvadrat.OkupiraPrviLik) { shift = 2; } if (viseLikova && kojiLik == Kvadrat.OkupiraDrugiLik) { shift = -2; } switch (Nivo().Smjer) { case Smjerovi.Dolje: for (int i = 1, k = 0; i < 5; ++i, ++k) { for (int j = tip_igre.Stupaca / 2 - 2 + shift, l = 0; j < tip_igre.Stupaca / 2 + 2 + shift; ++j, ++l) { if (ploca[i, j] != Kvadrat.Slobodan) { return(false); } ploca[i, j] = aktivni.Celije[k, l] ? kojiLik : ploca[i, j]; } } aktivni.Pozicija = new Tuple <int, int>(1, tip_igre.Stupaca / 2 - 2 + shift); break; case Smjerovi.Gore: for (int i = tip_igre.Redaka - 3, k = 0; i < tip_igre.Redaka + 1; ++i, ++k) { for (int j = tip_igre.Stupaca / 2 - 2 + shift, l = 0; j < tip_igre.Stupaca / 2 + 2 + shift; ++j, ++l) { if (ploca[i, j] != Kvadrat.Slobodan) { return(false); } ploca[i, j] = aktivni.Celije[k, l] ? kojiLik : ploca[i, j]; } } aktivni.Pozicija = new Tuple <int, int>(tip_igre.Redaka - 3, tip_igre.Stupaca / 2 - 2 + shift); break; case Smjerovi.Desno: for (int i = tip_igre.Redaka / 2 - 2 + shift, k = 0; i < tip_igre.Redaka / 2 + 2 + shift; ++i, ++k) { for (int j = 1, l = 0; j < 5; ++j, ++l) { if (ploca[i, j] != Kvadrat.Slobodan) { return(false); } ploca[i, j] = aktivni.Celije[k, l] ? kojiLik : ploca[i, j]; } } aktivni.Pozicija = new Tuple <int, int>(tip_igre.Redaka / 2 - 2 + shift, 1); break; case Smjerovi.Lijevo: default: for (int i = tip_igre.Redaka / 2 - 2 + shift, k = 0; i < tip_igre.Redaka / 2 + 2 + shift; ++i, ++k) { for (int j = tip_igre.Stupaca - 3, l = 0; j < tip_igre.Stupaca + 1; ++j, ++l) { if (ploca[i, j] != Kvadrat.Slobodan) { return(false); } ploca[i, j] = aktivni.Celije[k, l] ? kojiLik : ploca[i, j]; } } aktivni.Pozicija = new Tuple <int, int>(tip_igre.Redaka / 2 - 2 + shift, tip_igre.Stupaca - 3); break; } if (kojiLik == Kvadrat.OkupiraPrviLik) { aktivniOblikPrvi = aktivni; } else { aktivniOblikDrugi = aktivni; } return(true); }
private bool okupiraDrugi(Kvadrat prvi, Kvadrat drugi) { return(Nivo().ViseLikova&& (prvi == Kvadrat.OkupiraPrviLik && drugi == Kvadrat.OkupiraDrugiLik) || (prvi == Kvadrat.OkupiraDrugiLik && drugi == Kvadrat.OkupiraPrviLik)); }