Bisakah potongan mengikuti jalur yang berbeda dari satu kotak ke kotak lainnya dalam satu gerakan?
Saya menerapkan permainan catur. Saya mengetahui aturannya tetapi saya belum banyak memainkannya. Saya butuh klarifikasi tentang hal kecil.
Misalkan seorang pemain secara legal memindahkan bidak dari kotak A ke kotak B. Pertimbangkan jalur yang diikuti bidak ini selama gerakan ini. Apakah bisa berbeda berdasarkan jenis potongannya?
Saya tidak dapat menemukan kasus seperti itu.
Sunting: - Saya menambahkan kode antarmuka yang saya hadapi untuk membuatnya lebih jelas seperti yang diminta oleh beberapa orang untuk memberikan lebih banyak konteks.
public class Chess {
ChessBoard chessBoard;
Player[] player;
Player currentPlayer;
List<Move> movesList;
GameStatus gameStatus;
public boolean playerMove(CellPosition fromPosition, CellPositionb toPosition, Piece piece);
public boolean endGame();
private void changeTurn();
}
public abstract class Piece {
Color color;
public boolean validate(CellPosition fromPosition, CellPositionb toPosition);
}
public class Knight extends Piece {
public boolean validate(CellPosition fromPosition, CellPositionb toPosition);
}
Demikian pula akan ada kelas untuk bidak lain sebagai Ksatria. Sekarang jika seorang pemain ingin pindah catur dari beberapa posisi X ke posisi lain Y, metode validate () dari Piece akan dipanggil oleh playerMove () dari catur, validate () hanya dapat memeriksa apakah langkah tersebut valid atau tidak. Seperti untuk bidak yang diberikan, katakanlah ksatria, itu akan memeriksa bahwa dari lokasi tertentu, tujuannya adalah salah satu dari 8 gerakan yang sah. Untuk Benteng itu bisa salah satu dari empat arah dan seterusnya.
Fungsi playerMove () membuat panggilan fungsi Piece.validate () dan kemudian mengetahui bahwa itu adalah langkah yang valid. Masalah yang saya coba atasi, sekarang setelah fungsi playerMove dalam catur, tahu bahwa itu valid bergerak, ia tidak tahu apakah ada bidak di antara dari lokasi tertentu ke tujuan? Karena bidak tidak memiliki konteks Papan, ia tidak dapat mendeteksi benda itu dan itu harus dilakukan dalam fungsi playerMove () catur. akan menulis kode di sini untuk menghasilkan daftar kemungkinan kotak yang terlibat dari sumber ke tujuan. Apakah daftar kotak itu akan selalu unik? Atau bisakah berbeda untuk bagian yang berbeda? Karena selain ksatria, semua bergerak lurus atau diagonal jadi harus unik, jadi saya ingin memperjelas hal ini.Jika masih ada pertanyaan yang belum jelas, tolong beritahu saya. Tapi
Jawaban
Untuk ratu, uskup, dan benteng yang pindah dari kotak A ke kotak B hanya ada satu cara untuk memindahkannya dan semua kotak di antaranya harus kosong agar pemindahan itu sah.
Untuk kesatria yang pindah dari kotak A ke kotak biasanya ada dua cara, tetapi itu tidak relevan karena kesatria dapat melompati bidak di jalan.
Untuk rokade hanya ada satu cara raja dapat berpindah dari A ke B dan alun-alun intervensi harus dikosongkan agar langkah tersebut sah dan raja harus dipindahkan terlebih dahulu. Untuk rokade, hanya ada satu cara untuk memindahkan benteng dari A ke B dan semua kotak di antaranya harus dikosongkan terpisah dari raja agar langkah tersebut sah.
Tidak. Ini masalah selera bagaimana kesatria itu bergerak dari kotak awal ke kotak akhir, tapi tidak ada yang tertulis tentang bagaimana dia sampai ke kotak terakhir. Hal yang sama untuk rokade, tentang bagaimana benteng tiba di alun-alun tujuan, karena harus sampai di sana dengan melewati raja yang baru saja melakukan dua langkah persegi.
Kasus khusus yang perlu dipertimbangkan adalah jurus ksatria, rokade, dan pion. Ksatria tidak benar-benar memiliki jalan; Anda bisa menganggap mereka sedang berteleportasi ke tujuan mereka. Bidak dan rokade harus mengikuti batasan yang sama untuk bergerak melalui kotak yang ditempati (mereka memiliki kotak yang sama yang mereka "lalui" seperti bahan lain dengan kotak sumber dan tujuan yang sama), tetapi juga memiliki batasan tambahan. Setiap kali seorang raja bergerak selain rokade, ia tidak "melewati" kotak apa pun, jadi pertanyaan Anda tidak benar-benar cocok.
Setiap gerakan lainnya adalah gerakan benteng atau gerakan uskup. Kapanpun seorang ratu bergerak, ia membuat benteng atau uskup. Ketika seorang ratu membuat seorang uskup bergerak, itu mengikuti aturan yang sama seperti memindahkan seorang uskup, dan jalan yang diambilnya sama dengan seorang uskup. Saat ia membuat gerakan benteng, ia mengikuti aturan yang sama seperti benteng (selain kastil yang disebutkan di atas).
Untuk bidak yang bukan kesatria, hanya ada satu jalan untuk diperiksa. Untuk benteng, uskup dan ratu Anda melacak "sinar", raja hanya bergerak satu kotak dan kesatria tidak peduli tentang bidak lain yang menghalangi sehingga jalan itu tidak masalah. Jadi untuk memeriksa Anda harus memverifikasi bahwa kotak tujuan bukanlah bagian yang ramah (karena Anda tidak dapat menangkap potongan yang ramah) dan untuk potongan yang bergerak dengan sinar yang semua kotak di antaranya kosong.
Bidak tentu saja adalah kasus khusus karena menangkap berbeda dari gerakannya, saya harap Anda menyadarinya. :) (dan memiliki komplikasi lebih lanjut seperti aturan langkah ganda dan en passant)
CATATAN: Agar gerakan menjadi legal, pemain yang bergerak tidak boleh di cek setelah pindah. Jadi, Anda juga harus memverifikasi itu. Salah satu cara yang mungkin untuk melakukannya adalah berpura-pura bahwa raja dari pemain yang bergerak adalah benteng dan melihat apakah ia dapat menangkap benteng musuh, maka benteng musuh itu sebenarnya sedang memberikan cek. (sama untuk bidak lainnya dan tentu saja hati-hati dengan bidak sekali lagi)
Saya juga akan mencatat bahwa saya akan menerapkan ini dengan sangat berbeda tetapi saya menganggap ini adalah proyek pembelajaran, jadi seharusnya baik-baik saja.