Kode Untuk Gerakan Langkah Garuda Yang Benar

 KODE UNTUK GERAKAN LANGKAH  GARUDA YANG BENAR


Langkah garuda bisa bergerak lurus vertikal dan diagonal, dan bisa bergerak lurus diagonal, bila bergerak lurus melangkah 2 petak, bila bergerak diagonal melangkah 2 petak. Jadi selueuhnya ada 8 petak yang akan ditempati garuda. Contoh langkah garuda yang benar ada 8 petak kemungkinan untuk ditempati, misalnya garuda dari petak d3 ke d5 atau ke f5 atau ke f3 atau ke f1 atau ke d1 atau ke b1 atau ke b3, atau ke b5.

Kode:

    # **Gerakan Garuda**

    if p_type == "garuda":

        dx = abs(x2 - x1)

        dy = abs(y2 - y1)


    # **1. Cek apakah petak tujuan ditempati bidak sendiri**

        if is_occupied((x2, y2), pieces) and not is_occupied_by_enemy((x2, y2), color, pieces):

            return False  # Tidak bisa bergerak ke petak yang ditempati bidak sendiri


    # **2. Gerakan Lurus (vertikal/horizontal)**

        if (dx == 2 and dy == 0) or (dx == 0 and dy == 2):

            return True  # Bisa lompat 2 petak lurus


    # **3. Gerakan Diagonal**     

        if dx == 2 and dy == 2:

            return True  # Bisa lompat 2 petak diagonal

        return False  # Jika tidak memenuhi aturan langkah Garuda


πŸ”Ή Perbaikan Gerakan Garuda dalam Catur Nine 9x9 Petak

Garuda bergerak vertikal, horizontal, dan diagonal, tetapi dengan aturan khusus:

  1. Jika bergerak lurus (vertikal/horizontal)melangkahi 1 petak, jadi bergeser sejauh 2 petak.
  2. Jika bergerak diagonalmelangkahi 1 petak, jadi bergeser sejauh 2 petak.

πŸ”Ή Implementasi dalam is_valid_move()

Tambahkan aturan Garuda ke dalam catur_nine_move.py:

# Fungsi validasi langkah
def is_valid_move(piece, start, end, pieces, turn, last_move, castling_rights):
    color, p_type = piece.split(' ')
    x1, y1 = start
    x2, y2 = end

    if color != turn:  # Hanya bidak pada giliran yang sesuai
        return False     

    # **Gerakan Garuda:**
    if p_type == "garuda":
        dx = abs(x2 - x1)
        dy = abs(y2 - y1)

        # **1. Gerakan Lurus (vertikal/horizontal)**
        if (dx == 2 and dy == 0) or (dx == 0 and dy == 2):
            return True  # Bisa lompat 2 petak lurus

        # **2. Gerakan Diagonal**
        if dx == 2 and dy == 2:
            return True  # Bisa lompat 2 petak diagonal

        return False  # Jika tidak memenuhi aturan langkah Garuda

    # **Tambahkan aturan bidak lainnya di sini (Pawn, Rook, etc.)**

    return False  # Jika bukan langkah yang val

πŸ”Ή Implementasi dalam Game Loop (__main__.py)

Tambahkan bagian ini dalam event MOUSEBUTTONDOWN di __main__.py untuk menangani gerakan Garuda:

elif selected_piece and selected_piece.endswith("garuda"):
    if is_valid_move(selected_piece, selected_position, (col, row), pieces, turn, last_move, castling_rights):
        move_piece(selected_piece, selected_position, (col, row))
        switch_turn()

πŸš€ Kesimpulan

Garuda kini bergerak lurus (2 petak) atau diagonal (2 petak).
Dapat melompati bidak tanpa hambatan.
Kode lebih optimal & sesuai aturan Catur Nine.

Sekarang Garuda dapat bergerak sesuai aturan yang benar! 🎯♟️


Langkah Garuda yang benar sesuai dengan aturan yang  ditetapkan adalah:

  1. Gerakan Lurus

    • Bisa melangkah 2 petak secara vertikal atau horizontal.
    • Contoh: Dari (e3) bisa ke (e5) atau (g3).
  2. Gerakan Diagonal

    • Bisa melangkah 2 petak secara diagonal.
    • Contoh: Dari (e3) bisa ke (g5) atau (c1).

Kode Perbaikan di is_valid_move()

Jika belum diterapkan, tambahkan kode berikut di dalam fungsi is_valid_move() pada file catur_nine_move.py:

# **Gerakan Garuda**
if p_type == "garuda":
    dx = abs(x2 - x1)
    dy = abs(y2 - y1)

    # **1. Gerakan Lurus (vertikal/horizontal)**
    if (dx == 2 and dy == 0) or (dx == 0 and dy == 2):
        return True  # Bisa lompat 2 petak lurus

    # **2. Gerakan Diagonal**     
    if dx == 2 and dy == 2:
        return True  # Bisa lompat 2 petak diagonal

    return False  # Jika tidak memenuhi aturan langkah Garuda

Tambahan Perbaikan

Jika ingin memastikan Garuda tidak terhalang oleh bidak lawan atau kawan (hanya bisa melompati, bukan mendarat di atasnya), tambahkan pengecekan:

if is_occupied((x2, y2), pieces) and not is_occupied_by_enemy((x2, y2), color, pieces):
    return False  # Tidak bisa bergerak ke petak yang ditempati bidak sendiri

Kode ini memastikan Garuda hanya bisa mendarat di petak kosong atau memakan bidak lawan.


Coba Uji Coba Garuda

Setelah perbaikan, uji langkah Garuda dengan beberapa skenario, seperti:
(e3 → e5): Bergerak lurus 2 petak vertikal.
(e3 → g3): Bergerak lurus 2 petak horizontal.
(e3 → g5): Bergerak 2 petak diagonal.
(e3 → e4): Tidak bisa melangkah hanya 1 petak.


Kode berikut:

if is_occupied((x2, y2), pieces) and not is_occupied_by_enemy((x2, y2), color, pieces):
    return False  # Tidak bisa bergerak ke petak yang ditempati bidak sendiri

harus diletakkan di dalam fungsi is_valid_move(), tepatnya di dalam aturan langkah Garuda, sebelum return True.


Perbaikan Fungsi is_valid_move() pada file catur_nine_move.py

Cari bagian Gerakan Garuda, lalu ubah menjadi seperti ini:

# **Gerakan Garuda**
if p_type == "garuda":
    dx = abs(x2 - x1)
    dy = abs(y2 - y1)

    # **1. Cek apakah petak tujuan ditempati bidak sendiri**
    if is_occupied((x2, y2), pieces) and not is_occupied_by_enemy((x2, y2), color, pieces):
        return False  # Tidak bisa bergerak ke petak yang ditempati bidak sendiri

    # **2. Gerakan Lurus (vertikal/horizontal)**
    if (dx == 2 and dy == 0) or (dx == 0 and dy == 2):
        return True  # Bisa lompat 2 petak lurus

    # **3. Gerakan Diagonal**     
    if dx == 2 and dy == 2:
        return True  # Bisa lompat 2 petak diagonal

    return False  # Jika tidak memenuhi aturan langkah Garuda

Penjelasan Perbaikan:

  1. Mencegah Garuda mendarat di petak yang ditempati bidak sendiri

    • Jika petak tujuan ditempati bidak sendiri, Garuda tidak bisa bergerak ke sana.
    • Namun, jika petak itu berisi bidak lawan, maka Garuda bisa menyerang.
  2. Menjaga aturan gerakan Garuda tetap benar

    • Bisa lompat 2 petak lurus (vertikal/horizontal).
    • Bisa lompat 2 petak diagonal.

Uji Coba

Pastikan kode ini berfungsi dengan mencoba beberapa langkah:
Garuda dari (e3 → e5) (2 petak vertikal)
Garuda dari (e3 → g3) (2 petak horizontal)
Garuda dari (e3 → g5) (2 petak diagonal)
Garuda dari (e3 → e4) (hanya 1 petak, tidak boleh)
Garuda dari (e3 → e5) jika e5 ditempati bidak sendiri


Demikian, semoga bermanfaat



Comments

Popular posts from this blog

MOVE (LANGKAH) CATUR TERBAIK SAYA DI TURNAMEN KEJUARAAN CATUR HARIAN CHESS.COM 2025

π”»π•š π•‹π”Έβ„π•Œβ„• π•Šπ•€π•Šπ”Έ 9, β„‚β„π”Όπ•Šπ•Š.ℂ𝕆𝕄 𝕄𝔼ℕ𝔾𝔸𝔻𝔸𝕂𝔸ℕℕ π•‹π•Œβ„β„•π”Έπ•„π”Όβ„• π•‚π”Όπ•π•Œπ”Έβ„π”Έπ”Έβ„• β„‚π”Έπ•‹π•Œβ„ ℍ𝔸ℝ𝕀𝔸ℕ β„‚β„π”Όπ•Šπ•Š.ℂ𝕆𝕄 2025

Kecerdasan Manusia Dan Kecerdasan Buatan/Ai (Artificial Intelligence)