Merhaba,
Üniversitede final projem için satranç oyunu yazmam gerekiyor. Bayağı yazdım her şeyi hallettim ancak bir sorun var.
Mesela veziri hareket ettireceğim ama önünde piyon var. Normal şartlarda hiçbir yere gidememesi gerekiyor. Ancak benim tıkladığım yere gidebiliyor.
Mesela kaleyi hareket ettireceğim fakat önünde ya da etrafında onu engelleyecek bir taş olmasına rağmen dinlemeyip hareket ediyor.
Bunu nasıl engelleyebilirim. Sizinle hangi kodları paylaşmam size yardımcı olur. Ücretli, ücretsiz yardım almak istiyorum.
Teşekkürler
C# Satranç Oyunu Hakkında Sorum Var
4
●292
- 23-05-2019, 17:46:40
- 23-05-2019, 18:21:47Merhabalar,
Rotalar tanımla her taşa,
Mesela kale a1 den a8'e gidecek,
Bu rotadaki alanları bul a1 a2 a3 a4 a5 a6 a7
Bu aralıkta taş olup olmadığını kontrol et
Sonra a8'e bak farklı renk mi diye
Farklı renk ise ye. Değilse hareket etme - 23-05-2019, 19:43:21Acaba iç içe for mu kullanmalıyım? Örnek bir kod yazabilir misiniz acaba? Ben array kullanarak her taşın konumunu belirttim. Aynı zamanda her taşın koordinat düzleminde nasıl hareketler yapacağını da belirttim.erkanakgun adlı üyeden alıntı: mesajı görüntüle
Vezir classında hareket komutu böyle mesela :
public Queen(int x, int y,String color) : base(x, y, "Queen",color) { } public override bool move(int tx, int ty) { if (Math.Abs(x - tx) == Math.Abs(y - ty) || x == tx || y == ty) { x = tx; y = ty; return true; } return false; }Aynı zamanda Board classının move komutu ise böyle:
public bool move(int sx, int sy, int tx, int ty) { if (board[sx, sy] == null) return false; if (board[tx, ty] != null) { if (board[tx, ty].color.Equals(board[sx, sy].color)) { return false; } } Piece s = board[sx, sy]; Piece t = board[tx, ty]; if (t == null) { if (s.move(tx, ty)) { board[tx, ty] = s; board[sx, sy] = null; return true; } } else { if (s.color.Equals(t.color) ) return false; if (s.attack(tx, ty)) { board[tx, ty] = s; board[sx, sy] = null; return true; } } return false; }Ne yapmalıyım sizce nasıl gittiği yere kadar olan koordinatları kontrol ettirebilirim?
sx= sourcex
tx = targetx - 23-05-2019, 20:24:17Sx ile tx arasındaki hücreleri bir diziye at,
Daha sonra bu dizi içerisindeki hücrelerde herhanhi bir taş var mı bak - 23-05-2019, 22:31:18erkanakgun adlı üyeden alıntı: mesajı görüntüle
int[] degerler = new int[7]; for (int i = 0; i < tx; i++) { degerler[i] = Convert.ToInt32(Console.ReadLine()); if (board[sx,tx]!=null) { return false; } }Böyle bir şey yaptım ama hatalı hocam. Bir çalışıyor bir çalışmıyor. Nasıl bir düzeltme önerirdiniz?