BITBOARD & MATRIX - SiberMega - Basit Yazılım ve Tasarım Eğitimleri

Popüler Yazılar

Post Top Ad

Responsive Ads Here

Post Top Ad

Responsive Ads Here

06/04/2023

BITBOARD & MATRIX

Bu öğretici(?) içerikteki karşılaşacağınız bilgiler kullanıcıya uzanan bir test aşamasından geçmemiştir. Kişisel bilgi ve tecrübelerim haricinde bir kesinlik içermemektedir.

Bu gibi bir soruna nasıl çözüm üretilebileceğini düşünürken aklıma bitsel işlemlerin kullanılabileceği geldi ve bu eğitici içeriği yazma kararı aldım.
İlk önce yaygın kullanılan yöntem ile anlatımımıza başlayalım.

for (int x = 0; x < width; x++)
{
for (int y = 0; y < height; y++)
{
...
}
}
public void FindAllMatches()
{
currentMatches.Clear();

for (int x = 0; x < Board.Instance.width; x++)
{
for (int y = 0; y < Board.Instance.height; y++)
{
Gem currentGem = Board.Instance.allGems[x, y];
if (currentGem != null)
{
// LEFT & RIGHT CONTROL
if (x > 0 && x < Board.Instance.width - 1)
{
Gem leftGem = Board.Instance.allGems[x - 1, y];
Gem rightGem = Board.Instance.allGems[x + 1, y];

if (leftGem != null && rightGem != null)
{
if (leftGem.gemType == currentGem.gemType && rightGem.gemType == currentGem.gemType)
{
currentGem.isMatched = true;
leftGem.isMatched = true;
rightGem.isMatched = true;

currentMatches.Add(currentGem);
currentMatches.Add(leftGem);
currentMatches.Add(rightGem);
}
}

}

// ABOVE & BELOW CONTROL
if (y > 0 && y < Board.Instance.height - 1)
{
Gem aboveGem = Board.Instance.allGems[x, y + 1];
Gem belowGem = Board.Instance.allGems[x, y - 1];

if (aboveGem.gemType == currentGem.gemType && belowGem.gemType == currentGem.gemType)
{
currentGem.isMatched = true;
aboveGem.isMatched = true;
belowGem.isMatched = true;

currentMatches.Add(currentGem);
currentMatches.Add(aboveGem);
currentMatches.Add(belowGem);
}
}
}
}
  • 8x8 boyutunda bir bitboard inşa ettiğimizi var sayalım. Bu bitboard’umuzdaki herhangi bir noktadaki elamanı seçmek istediğimizde:
r → row
c → column

r * 8 + c
  • Örneğin ulaşmak istediğimiz elamanın indis numarası “19" olsun.
    8x8 lik tabloda 19 numaralı eleman 3.sıranın 3.sütununa denk gelmektedir.
3 * 8 + 3 = 19
bool GetCellState(long bitboard, int row, int col)
{
long mask = 1L << (row * 8 + col);
return ((bitboard & mask) != 0);
}

Hiç yorum yok:

Yorum Gönder

Görüş ve Düşüncelerinizi Bizimle Paylaşmayı Unutmayın.

Post Top Ad

Responsive Ads Here