public override void HamleHesapla(Tas[,] t) { if (SahKaleKontrol()) // Þah ve Kale daha önce hareket etmemiþse... { if (Renk == Renkler.Siyah && Yer.X == 4 && Yer.Y == 0) { RokHesapla(t); } else if (Renk == Renkler.Beyaz && Yer.X == 4 && Yer.Y == 7) { RokHesapla(t); } } // Vezir ile þah hareketleri benzerdir. // Þah, vezirin kýrpýlmýþ halidir :) Vezir tasVezir = new Vezir(new Point(Yer.X, Yer.Y), Taslar.Vezir, Renk); tasVezir.HamleHesapla(t); SahHareket(tasVezir, Yer.X - 1, Yer.Y); // Sola SahHareket(tasVezir, Yer.X + 1, Yer.Y); // Saða SahHareket(tasVezir, Yer.X - 1, Yer.Y + 1); // Sol Alt SahHareket(tasVezir, Yer.X - 1, Yer.Y - 1); // Sol Üst SahHareket(tasVezir, Yer.X, Yer.Y - 1); // Yukarý SahHareket(tasVezir, Yer.X, Yer.Y + 1); // Aþaðý SahHareket(tasVezir, Yer.X + 1, Yer.Y + 1); // Sað Alt SahHareket(tasVezir, Yer.X + 1, Yer.Y - 1); // Sað Üst }
public static void TaslarOlustur(Tas[,] sTaslari) { int i; sTaslari[0, 0] = new Kale(new Point(0, 0), Taslar.Kale, Renkler.Siyah); sTaslari[1, 0] = new At(new Point(1, 0), Taslar.At, Renkler.Siyah); sTaslari[2, 0] = new Fil(new Point(2, 0), Taslar.Fil, Renkler.Siyah); sTaslari[3, 0] = new Vezir(new Point(3, 0), Taslar.Vezir, Renkler.Siyah); sTaslari[4, 0] = new Sah(new Point(4, 0), Taslar.Sah, Renkler.Siyah); sTaslari[5, 0] = new Fil(new Point(5, 0), Taslar.Fil, Renkler.Siyah); sTaslari[6, 0] = new At(new Point(6, 0), Taslar.At, Renkler.Siyah); sTaslari[7, 0] = new Kale(new Point(7, 0), Taslar.Kale, Renkler.Siyah); for (i = 0; i < 8; i++) { sTaslari[i, 1] = new Piyon(new Point(i, 1), Taslar.Piyon, Renkler.Siyah); sTaslari[i, 6] = new Piyon(new Point(i, 6), Taslar.Piyon, Renkler.Beyaz); } sTaslari[0, 7] = new Kale(new Point(0, 7), Taslar.Kale, Renkler.Beyaz); sTaslari[1, 7] = new At(new Point(1, 7), Taslar.At, Renkler.Beyaz); sTaslari[2, 7] = new Fil(new Point(2, 7), Taslar.Fil, Renkler.Beyaz); sTaslari[3, 7] = new Vezir(new Point(3, 7), Taslar.Vezir, Renkler.Beyaz); sTaslari[4, 7] = new Sah(new Point(4, 7), Taslar.Sah, Renkler.Beyaz); sTaslari[5, 7] = new Fil(new Point(5, 7), Taslar.Fil, Renkler.Beyaz); sTaslari[6, 7] = new At(new Point(6, 7), Taslar.At, Renkler.Beyaz); sTaslari[7, 7] = new Kale(new Point(7, 7), Taslar.Kale, Renkler.Beyaz); }
public static void TasOlustur(Tas[,] sTaslari, int x, int y, Renkler renk, Taslar tip) { switch (tip) { case Taslar.Piyon: sTaslari[x, y] = new Piyon(new Point(x, y), Taslar.Piyon, renk); break; case Taslar.Kale: sTaslari[x, y] = new Kale(new Point(x, y), Taslar.Kale, renk); break; case Taslar.At: sTaslari[x, y] = new At(new Point(x, y), Taslar.At, renk); break; case Taslar.Fil: sTaslari[x, y] = new Fil(new Point(x, y), Taslar.Fil, renk); break; case Taslar.Sah: sTaslari[x, y] = new Sah(new Point(x, y), Taslar.Sah, renk); break; case Taslar.Vezir: sTaslari[x, y] = new Vezir(new Point(x, y), Taslar.Vezir, renk); break; } }
private void SahHareket(Vezir tasVezir, int x, int y) { int i; // Eðer vezirin gittiði yerlerde gönderdiðimiz koordinat da varsa hamle yapsýn... for (i = 0; i < tasVezir.Hamleler.Count; i += 2) { if ((int)tasVezir.Hamleler[i] == x && (int)tasVezir.Hamleler[i + 1] == y) { Hamleler.Add(tasVezir.Hamleler[i]); Hamleler.Add(tasVezir.Hamleler[i + 1]); } } }
public static void TasOlustur(Tas[,] sTaslari, int x, int y, Renkler renk, Taslar tip) { switch (tip) { case Taslar.Piyon : sTaslari[x, y] = new Piyon(new Point(x, y), Taslar.Piyon, renk); break; case Taslar.Kale : sTaslari[x, y] = new Kale(new Point(x, y), Taslar.Kale, renk); break; case Taslar.At : sTaslari[x, y] = new At(new Point(x, y), Taslar.At, renk); break; case Taslar.Fil : sTaslari[x, y] = new Fil(new Point(x, y), Taslar.Fil, renk); break; case Taslar.Sah : sTaslari[x, y] = new Sah(new Point(x, y), Taslar.Sah, renk); break; case Taslar.Vezir : sTaslari[x, y] = new Vezir(new Point(x, y), Taslar.Vezir, renk); break; } }
public void HamleYap(int x1, int y1, int x2, int y2) { Point sahYeri; Tas temp = null; satrancTaslari[x1, y1].YolGizle(g); satrancTaslari[x1, y1].Gizle(g); // Taþý Sil. Tasi(x1, y1, x2, y2); // Taþý götür... sahYeri = sahBul(); // Oyuncunun þahýnýn yerini bul... if (sahCekildi(sahYeri)) // Diðer taþlar tarafýndan þah çekliliyor mu? { if (alinanTas != null) // Taþ alýnmýþsa sakla (Tasi metodunda) { temp = alinanTas; } Tasi(x2, y2, x1, y1); // Mat olacak, taþý eski yerine getir... satrancTaslari[x1, y1].Goster(g); // Taþý Göster satrancTaslari[x1, y1].Hamleler.Clear(); if (temp != null) // Alýnan taþý da yerine koy { satrancTaslari[x2, y2] = temp; satrancTaslari[x2, y2].Goster(g); temp = null; } oyunAlani.TaslarGoster(satrancTaslari, g); // Refresh Secim = false; // Oyuncu deðiþmeden yeni hamle yapýlsýn return; } // Piyon'un Vezir'e dönüþmesi if (satrancTaslari[x2, y2].tasTipi == Taslar.Piyon) { if (Oyuncu == Renkler.Beyaz && satrancTaslari[x2, y2].Yer.Y == 0) { satrancTaslari[x2, y2] = new Vezir(new Point(x2, y2), Taslar.Vezir, Renkler.Beyaz); } else if (Oyuncu == Renkler.Beyaz && satrancTaslari[x2, y2].Yer.Y == 7) { satrancTaslari[x2, y2] = new Vezir(new Point(x2, y2), Taslar.Vezir, Renkler.Siyah); } } // Undo'dan sonra kullanýcý hamle yaparsa redo dan hamle çýkar if (UndoRedo.redoNoktalar.Count > 0) { UndoRedo.redoNoktalar.Pop(); UndoRedo.redoNoktalar.Pop(); UndoRedo.redoTaslar.Pop(); UndoRedo.redoTaslar.Pop(); } UndoRedo.undoNoktalar.Push(new Point(x1, y1)); UndoRedo.undoNoktalar.Push(new Point(x2, y2)); UndoRedo.undoTaslar.Push(satrancTaslari[x2, y2]); if (alinanTas != null) // Alýnan taþ varsa yýðýna at { UndoRedo.undoTaslar.Push(alinanTas); alinanTas.Gizle(g); } else { UndoRedo.undoTaslar.Push(null); // Alýnan taþ yoksa null bas } satrancTaslari[x2, y2].Goster(g); // Taþý Göster satrancTaslari[x2, y2].Hamleler.Clear(); oyunAlani.TaslarGoster(satrancTaslari, g); // Refresh.. if (Sira == Renkler.Beyaz) // Oyuncuyu deðiþtir { Sira = Renkler.Siyah; } else { Sira = Renkler.Beyaz; } /*Þah-Mat Kontrolü... * Sýra diðer oyuncuya geçti ama daha önce Diðer Oyuncunun þahýnýn yerini bul...*/ sahYeri = sahBul(); if (sahCekildi(sahYeri)) // Yapýlan hamle sonucunda Diðer oyuncuya þah çekildi mi? { if (matOldu()) // Þah çekildiyse mat oldu mu? { Log.LogHamle(hamleSayisi, handleLView, Oyuncu, satrancTaslari[x2, y2].tasTipi, x1, y1, x2, y2, "Mat"); MessageBox.Show(Sira.ToString() + " Mat oldu. Oyunu " + Oyuncu.ToString() + " kazandý", "Oyun Bitti", MessageBoxButtons.OK, MessageBoxIcon.Information); hamleSayisi++; return; } else { Log.LogHamle(hamleSayisi, handleLView, Oyuncu, satrancTaslari[x2, y2].tasTipi, x1, y1, x2, y2, "Þah"); hamleSayisi++; return; } } if (satrancTaslari[x2, y2].tasTipi == Taslar.Sah) // Þah taþýndýysa Rok Yaptý Mý? { if (x2 == x1 - 2) { Rok(x2, y2, "bRok"); Log.LogHamle(hamleSayisi, handleLView, Oyuncu, satrancTaslari[x2, y2].tasTipi, x1, y1, x2, y2, "bRok"); hamleSayisi++; return; } else if (x2 == x1 + 2) { Rok(x2, y2, "kRok"); Log.LogHamle(hamleSayisi, handleLView, Oyuncu, satrancTaslari[x2, y2].tasTipi, x1, y1, x2, y2, "kRok"); hamleSayisi++; return; } } Log.LogHamle(hamleSayisi, handleLView, Oyuncu, satrancTaslari[x2, y2].tasTipi, x1, y1, x2, y2, ""); // Normal Hamle hamleSayisi++; }
public void HamleYap(int x1, int y1, int x2, int y2) { Point sahYeri; Tas temp=null; satrancTaslari[x1, y1].YolGizle(g); satrancTaslari[x1, y1].Gizle(g); // Taþý Sil. Tasi(x1, y1, x2, y2); // Taþý götür... sahYeri = sahBul(); // Oyuncunun þahýnýn yerini bul... if (sahCekildi(sahYeri)) // Diðer taþlar tarafýndan þah çekliliyor mu? { if (alinanTas != null) // Taþ alýnmýþsa sakla (Tasi metodunda) { temp = alinanTas; } Tasi(x2, y2, x1, y1); // Mat olacak, taþý eski yerine getir... satrancTaslari[x1, y1].Goster(g); // Taþý Göster satrancTaslari[x1, y1].Hamleler.Clear(); if (temp != null) // Alýnan taþý da yerine koy { satrancTaslari[x2, y2] = temp; satrancTaslari[x2, y2].Goster(g); temp = null; } oyunAlani.TaslarGoster(satrancTaslari, g); // Refresh Secim = false; // Oyuncu deðiþmeden yeni hamle yapýlsýn return; } // Piyon'un Vezir'e dönüþmesi if (satrancTaslari[x2, y2].tasTipi == Taslar.Piyon) { if (Oyuncu == Renkler.Beyaz && satrancTaslari[x2, y2].Yer.Y == 0) { satrancTaslari[x2, y2] = new Vezir(new Point(x2,y2), Taslar.Vezir, Renkler.Beyaz); } else if (Oyuncu == Renkler.Beyaz && satrancTaslari[x2, y2].Yer.Y == 7) { satrancTaslari[x2, y2] = new Vezir(new Point(x2,y2), Taslar.Vezir, Renkler.Siyah); } } // Undo'dan sonra kullanýcý hamle yaparsa redo dan hamle çýkar if (UndoRedo.redoNoktalar.Count > 0) { UndoRedo.redoNoktalar.Pop(); UndoRedo.redoNoktalar.Pop(); UndoRedo.redoTaslar.Pop(); UndoRedo.redoTaslar.Pop(); } UndoRedo.undoNoktalar.Push(new Point(x1, y1)); UndoRedo.undoNoktalar.Push(new Point(x2, y2)); UndoRedo.undoTaslar.Push(satrancTaslari[x2, y2]); if (alinanTas != null) // Alýnan taþ varsa yýðýna at { UndoRedo.undoTaslar.Push(alinanTas); alinanTas.Gizle(g); } else { UndoRedo.undoTaslar.Push(null); // Alýnan taþ yoksa null bas } satrancTaslari[x2, y2].Goster(g); // Taþý Göster satrancTaslari[x2, y2].Hamleler.Clear(); oyunAlani.TaslarGoster(satrancTaslari, g); // Refresh.. if (Sira == Renkler.Beyaz) // Oyuncuyu deðiþtir Sira = Renkler.Siyah; else Sira = Renkler.Beyaz; /*Þah-Mat Kontrolü... Sýra diðer oyuncuya geçti ama daha önce Diðer Oyuncunun þahýnýn yerini bul...*/ sahYeri = sahBul(); if (sahCekildi(sahYeri)) // Yapýlan hamle sonucunda Diðer oyuncuya þah çekildi mi? { if (matOldu()) // Þah çekildiyse mat oldu mu? { Log.LogHamle(hamleSayisi, handleLView, Oyuncu, satrancTaslari[x2, y2].tasTipi, x1, y1, x2, y2,"Mat"); MessageBox.Show(Sira.ToString() + " Mat oldu. Oyunu " + Oyuncu.ToString() + " kazandý", "Oyun Bitti", MessageBoxButtons.OK, MessageBoxIcon.Information); hamleSayisi++; return; } else { Log.LogHamle(hamleSayisi, handleLView, Oyuncu, satrancTaslari[x2, y2].tasTipi, x1, y1, x2, y2,"Þah"); hamleSayisi++; return; } } if (satrancTaslari[x2, y2].tasTipi == Taslar.Sah) // Þah taþýndýysa Rok Yaptý Mý? { if (x2 == x1 - 2) { Rok(x2, y2, "bRok"); Log.LogHamle(hamleSayisi, handleLView, Oyuncu, satrancTaslari[x2, y2].tasTipi, x1, y1, x2, y2, "bRok"); hamleSayisi++; return; } else if (x2 == x1 + 2) { Rok(x2, y2, "kRok"); Log.LogHamle(hamleSayisi, handleLView, Oyuncu, satrancTaslari[x2, y2].tasTipi, x1, y1, x2, y2, "kRok"); hamleSayisi++; return; } } Log.LogHamle(hamleSayisi, handleLView, Oyuncu, satrancTaslari[x2, y2].tasTipi, x1, y1, x2, y2,""); // Normal Hamle hamleSayisi++; }