GAME CATUR NINE 9x9 PETAK

GAME CATUR_NINE 9x9 PETAK

(Oleh: SR.Pakpahan,SST)


Makna dan arti dari angka 9 adalah mengungkapkan rahasia. Waktu-nya yang tepat, di tahun sisa 9 ini yaitu tahun 2025 kita akan membuat permainan game catur_nine atau disebut juga catur_garuda pada ukuran 9x9 petak karena ada penambahan 2 buah/bidak catur lagi pada catur 8x8 petak yang konvensional yaitu pion (bidak opsir) 1 buah dan garuda (bidak perwira) 1 buah di masing-masing bidak putih dan hitam, sehingga seluruhnya ada berjumlah 18 buah catur_nine di masing-masing warna putih dan hitam,

KODE PYTHON MENGGUNAKAN PYGAME UNTUK MEMBUAT TIMER HITUNGAN MUNDUR

Berikut adalah kode Python sederhana untuk membuat timer mundur menggunakan Pygame. Timer ini akan menghitung mundur dari waktu tertentu (di sini dibuat waktu dalam 5 menit atau 300 detik) dan menampilkannya di layar.


Kode Timer Hitungan Mundur (Pygame)

import pygame
import time
import sys
# Inisialisasi pygame
pygame.init()
# Ukuran layar
WIDTH, HEIGHT = 400, 200
SCREEN = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Countdown Timer")
# Warna
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
TEXT_COLOR = (255, 0, 0) # Warna merah agar jelas
# Font dan ukuran teks
font = pygame.font.Font(None, 80)
# Waktu awal dalam detik (misalnya 5 menit = 300 detik)
start_time = 300
current_time = start_time
last_update = time.time()
# Fungsi menggambar timer di layar
def draw_timer():
SCREEN.fill(WHITE) # Bersihkan layar dengan warna putih
minutes = current_time // 60
seconds = current_time % 60
timer_text = font.render(f"{minutes:02}:{seconds:02}", True, TEXT_COLOR)
SCREEN.blit(timer_text, (WIDTH // 3, HEIGHT // 3))
pygame.display.flip()
# Loop utama
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# Update timer setiap detik
now = time.time()
if now - last_update >= 1:
current_time -= 1
last_update = now
if current_time <= 0:
print("Waktu habis!")
running = False
draw_timer()
pygame.quit()
sys.exit()

Penjelasan Kode:

Menggunakan Pygame untuk menampilkan waktu di layar.
Timer akan menghitung mundur dari 5 menit (300 detik).
Teks timer dibuat besar dan merah agar mudah terlihat.
Format timer adalah MM:SS (misalnya "04:59" untuk 4 menit 59 detik).
Jika waktu habis, program akan berhenti otomatis.

Jika kode jalankan, maka akan terlihat timer tampil dengan jelas di layar!


Timer dalam format Jam : Menit : Detik

Berikut adalah kode Python yang menampilkan timer mundur dalam format jam:menit:detik menggunakan Pygame. Timer ini akan menghitung mundur dari waktu tertentu (di sini dibuat waktu dalam 1 jam atau 60 menit) dan menampilkannya di layar.


Kode Timer Hitungan Mundur (Pygame) - Format HH:MM:SS

import pygame
import time
import sys
# Inisialisasi pygame
pygame.init()
# Ukuran layar
WIDTH, HEIGHT = 400, 200
SCREEN = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Countdown Timer")
# Warna
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
TEXT_COLOR = (255, 0, 0) # Warna merah agar jelas
# Font dan ukuran teks
font = pygame.font.Font(None, 60)
# Waktu awal dalam detik (2 jam = 7200 detik)
start_time = 3600
current_time = start_time
last_update = time.time()
# Fungsi menggambar timer di layar
def draw_timer():
SCREEN.fill(WHITE) # Bersihkan layar dengan warna putih
hours = current_time // 3600
minutes = (current_time % 3600) // 60
seconds = current_time % 60
timer_text = font.render(f"{hours:02}:{minutes:02}:{seconds:02}", True, TEXT_COLOR)
SCREEN.blit(timer_text, (WIDTH // 4, HEIGHT // 3))
pygame.display.flip()
# Loop utama
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# Update timer setiap detik
now = time.time()
if now - last_update >= 1:
current_time -= 1
last_update = now
if current_time <= 0:
print("Waktu habis!")
running = False
draw_timer()
pygame.quit()
sys.exit()

Perubahan & Penyesuaian:

Format timer sekarang HH:MM:SS (misalnya "00:59:59" untuk 0 jam 59 menit 59 detik).
Tampilan lebih jelas dengan font besar dan warna merah.
Timer otomatis berkurang setiap detik sampai habis.
Jika waktu mencapai nol, program akan berhenti otomatis.

Jika kode dijalankan, maka timer tampil dengan format jam yang benar!


Integrasi Game Catur dan Timer Dalam Satu Thread yang Sama

Berikut adalah kode Python untuk game Catur Nine (9x9) + Timer, di mana game dan timer berjalan dalam satu thread yang sama menggunakan Pygame.


📌 Kode Python

import pygame
import sys
import time
# === KONFIGURASI TIMER ===
WHITE_TIME = 7200 # 2 Jam dalam detik
BLACK_TIME = 7200
# === KONFIGURASI PYGAME ===
pygame.init()
# Ukuran layar
SCREEN_WIDTH, SCREEN_HEIGHT = 800, 600
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("Chess Nine with Timer")
# Ukuran papan catur
BOARD_SIZE = 450
TILE_SIZE = BOARD_SIZE // 9
BOARD_X = (SCREEN_WIDTH - BOARD_SIZE) // 2
BOARD_Y = (SCREEN_HEIGHT - BOARD_SIZE) // 4
# Warna
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
LIGHT_BROWN = (240, 217, 181)
DARK_BROWN = (181, 136, 99)
RED = (200, 50, 50)
# Font Timer
font = pygame.font.Font(None, 40)
# Timer awal
white_timer = WHITE_TIME
black_timer = BLACK_TIME
turn = "white" # Giliran awal pemain putih
# === FUNGSI GAMBAR PAPAN ===
def draw_board():
for row in range(9):
for col in range(9):
color = LIGHT_BROWN if (row + col) % 2 == 0 else DARK_BROWN
pygame.draw.rect(screen, color, (BOARD_X + col * TILE_SIZE, BOARD_Y + row * TILE_SIZE, TILE_SIZE, TILE_SIZE))
# === FUNGSI FORMAT TIMER ===
def format_time(seconds):
hours = seconds // 3600
minutes = (seconds % 3600) // 60
seconds = seconds % 60
return f"{hours:02}:{minutes:02}:{seconds:02}"
# === LOOP GAME UTAMA ===
clock = pygame.time.Clock()
last_time = time.time()
running = True
while running:
screen.fill(WHITE) # Bersihkan layar
# Hitung waktu yang berlalu
current_time = time.time()
elapsed = current_time - last_time
if elapsed >= 1:
if turn == "white":
white_timer = max(0, white_timer - 1)
else:
black_timer = max(0, black_timer - 1)
last_time = current_time
# Gambar papan catur
draw_board()
# Tampilkan Timer Pemain Putih
white_timer_text = font.render(f"White: {format_time(white_timer)}", True, BLACK)
screen.blit(white_timer_text, (50, 50))
# Tampilkan Timer Pemain Hitam
black_timer_text = font.render(f"Black: {format_time(black_timer)}", True, BLACK)
screen.blit(black_timer_text, (50, 550))
# Event handling
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.MOUSEBUTTONDOWN: # Ganti giliran saat klik
turn = "black" if turn == "white" else "white"
pygame.display.flip()
clock.tick(30) # Batasi FPS ke 30
pygame.quit()
sys.exit()

📌 Cara Kerja Kode

  1. Timer & Game dalam 1 Thread

    • Timer berjalan di dalam loop utama Pygame tanpa menggunakan thread terpisah.
    • Waktu dihitung berdasarkan time.time(), sehingga tetap sinkron.
  2. Papan Catur 9x9

    • Dibuat dengan loop ganda (for loop).
    • Petak catur otomatis berganti warna.
  3. Pergantian Giliran Pemain

    • Pemain klik papan → Giliran berpindah.
    • Saat giliran berubah, timer yang aktif juga berubah.
  4. Tampilan Timer

    • Timer Pemain Putih (Atas Kiri).
    • Timer Pemain Hitam (Bawah Kiri).
    • Format jam:menit:detik (contoh: 01:59:59).

📌 Tampilan Program

🕒 [ Timer Putih: 02:00:00 ]
🎮 [ Papan Catur Nine 9x9 ]
🕒 [ Timer Hitam: 02:00:00 ]

Timer otomatis berkurang setiap detik saat pemain berganti giliran! 🚀

Silakan jalankan kodenya dan lihat hasilnya!


Timer Dibungkus Dalam Kotak Kecil dan DIletakkan di Posisi yang Tepat (Timer putih di sebelah atas kanan, Timer hitam di sebelah bawah kanan papan catur)

Berikut adalah kode yang telah diperbaiki agar posisi Timer Putih berada tepat di atas papan (sebelah atas kanan) dan Timer Hitam berada tepat di bawah papan (sebelah bawah kanan), dan Timer Putih dan Timer Hitam bergeser ke kiri sejauh kira-kira 150 pixel.


📌 Kode Python (Update Terbaru)

import pygame
import sys
import time
# === KONFIGURASI TIMER ===
WHITE_TIME = 7200 # 2 Jam dalam detik
BLACK_TIME = 7200
# === KONFIGURASI PYGAME ===
pygame.init()
# Ukuran layar
SCREEN_WIDTH, SCREEN_HEIGHT = 900, 700
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("Chess Nine with Timer")
# === KONFIGURASI PYGAME ===
pygame.init()
# Ukuran layar
SCREEN_WIDTH, SCREEN_HEIGHT = 800, 600
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("Chess Nine with Timer")
# Ukuran papan catur
BOARD_SIZE = 585
TILE_SIZE = BOARD_SIZE // 9
BOARD_X = (SCREEN_WIDTH - BOARD_SIZE) // 2 - 90 # Papan sedikit ke kiri agar pas di tengah layar
BOARD_Y = (SCREEN_HEIGHT - BOARD_SIZE) // 2 - (-60)  # Papan sedikit turun agar Timer atas pas
# Posisi Timer (Digeser ke kiri sejauh 150 pixel)
TIMER_WIDTH, TIMER_HEIGHT = 200, 60
TIMER_SHIFT_LEFT = 150 # Geser ke kiri sejauh 150 pixel
TIMER_WHITE_X, TIMER_WHITE_Y = SCREEN_WIDTH - TIMER_WIDTH - 20 - TIMER_SHIFT_LEFT, BOARD_Y - TIMER_HEIGHT - 10 # Tepat di atas papan
TIMER_BLACK_X, TIMER_BLACK_Y = SCREEN_WIDTH - TIMER_WIDTH - 20 - TIMER_SHIFT_LEFT, BOARD_Y + BOARD_SIZE + 10 # Tepat di bawah papan
# Warna
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
LIGHT_BROWN = (240, 217, 181)
DARK_BROWN = (181, 136, 99)
RED = (200, 50, 50)
GRAY = (50, 50, 50)
BLUE = (100, 149, 237)
# Font Timer
font = pygame.font.Font(None, 40)
# Timer awal
white_timer = WHITE_TIME
black_timer = BLACK_TIME
turn = "white" # Giliran awal pemain putih
# === FUNGSI GAMBAR PAPAN ===
def draw_board():
for row in range(9):
for col in range(9):
color = LIGHT_BROWN if (row + col) % 2 == 0 else DARK_BROWN
pygame.draw.rect(screen, color, (BOARD_X + col * TILE_SIZE, BOARD_Y + row * TILE_SIZE, TILE_SIZE, TILE_SIZE))
# === FUNGSI FORMAT TIMER ===
def format_time(seconds):
hours = seconds // 3600
minutes = (seconds % 3600) // 60
seconds = seconds % 60
return f"{hours:02}:{minutes:02}:{seconds:02}"
# === FUNGSI GAMBAR TIMER DALAM KOTAK ===
def draw_timer_box(x, y, time_text, label):
pygame.draw.rect(screen, GRAY, (x, y, TIMER_WIDTH, TIMER_HEIGHT), border_radius=10) # Kotak latar belakang
pygame.draw.rect(screen, BLUE, (x, y, TIMER_WIDTH, TIMER_HEIGHT), 3, border_radius=10) # Garis luar
label_text = font.render(label, True, WHITE)
time_display = font.render(time_text, True, WHITE)
screen.blit(label_text, (x + 10, y + 5))
screen.blit(time_display, (x + 10, y + 30))
# === LOOP GAME UTAMA ===
clock = pygame.time.Clock()
last_time = time.time()
running = True
while running:
screen.fill(WHITE) # Bersihkan layar
# Hitung waktu yang berlalu
current_time = time.time()
elapsed = current_time - last_time
if elapsed >= 1:
if turn == "white":
white_timer = max(0, white_timer - 1)
else:
black_timer = max(0, black_timer - 1)
last_time = current_time
# Gambar papan catur
draw_board()
# Gambar kotak timer di atas dan bawah papan (dengan posisi geser kiri 150 pixel)
draw_timer_box(TIMER_WHITE_X, TIMER_WHITE_Y, format_time(white_timer), "WHITE")
draw_timer_box(TIMER_BLACK_X, TIMER_BLACK_Y, format_time(black_timer), "BLACK")
# Event handling
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.MOUSEBUTTONDOWN: # Ganti giliran saat klik
turn = "black" if turn == "white" else "white"
pygame.display.flip()
clock.tick(30) # Batasi FPS ke 30
pygame.quit()
sys.exit()

📌 Perubahan & Peningkatan

Timer Putih dan Timer Hitam digeser ke kiri sejauh 150 pixel 📍
Format waktu tetap dalam jam:menit:detik
Posisi papan tetap proporsional dengan layar 📏
Timer tetap berjalan hitungan mundur & berganti giliran saat klik 🎮


🎯 Sekarang Timer Putih dan Hitam sudah pas di tempatnya! 🚀
Silakan coba jalankan kodenya  🔥


Bidak/Buah Catur Pada Game Catur_Nine

Ada 7 jenis bidak atau buah catur di warna putih dan hitam yang dimainkan pada game catur_nine ini, yaitu:

1. Pion (pawn): putih dan hitam masing-masing 9 buah

2. Kuda (knight): putih dan hitam masing-masing 2 buah

3. Gajah (bishop) putih dan hitam masing-masing 2 buah

4. Benteng (rook) putih dan hitam masing-masing 2 buah

5. Ratu (queen) putih dan hitam masing-masing 1 buah

6. Raja (king) putih dan hitam masing-masing 1 buah)

7. Garuda (garuda) putih dan hitam masing-masing 1 buah.

Berikut dibetikan gambar buah catur_nine di URL Link sini: Gambar Transparan Lengkap Buah Catur_Nine 9x9 Putih dan Hitam


Aturan Permainan Catur_Nine atau Catur_Garuda:

Aturan langkah permainan dari gerakan setiap buah catur_nine 9x9 petak di sini tidak jauh berbeda dengan aturan permainan game catur 8x8 petak  yang konvensional, cuma ada penambahan 3 (tiga) aturan lagi, yaitu:

1. Sebuah pion (pawn) yang ditambahkan ini memiliki aturan langkah yang sama seperti pion pada game catur 8x8 petak yang konvensional. 

Petak e5 adalah petak F2P (Forboden For Pawn) sehingga Pion di baris lajur e tidak bisa melewati lebih dari petak e5 (pion mentok di e5). Namun pion e5 dalam serangan diagonal dapat memakan pion atau bidak lawan di lajur d atau f, kemudian sebaliknya juga pion di lajur d atau f dalam setangan diagonal dapat menjadi berada di petak e5 atau di sepanjang kolom/lajur e setelah memakan bidak lawan, selanjutnya pion ini akan menjadi berada/bergerak di sepanjang jalur lajur e untuk melangkah terus dan memungkinkan mendapat promosi di petak baris terakhir. Selengkapnya gerakan langkah Pion bisa dilihat di URL Link sini: Kode Untuk Gerakan Langkah Pion (Khususnya Pion di Petak e5) Yang Benar

2. Sebuah Perwira Garuda yang ditambahkan ini memiliki aturan melangkah lurus 2 petak, baik secara vertikal, horizontal, maupun diagonal. Garuda bisa melompati bidak yang menghalang, baik bidak sendiri maupun bidak lawan yang menghalang. Bila Garuda dapat bergerak lurus vertikal dan horizontal melangkah 2 petak dan bergerak diagonal melangkah 2 petak sehingga seluruhnya 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. Selengkapnya gerakan langkah Garuda bisa dilihat di URL Link sini: Kode Untuk Gerakan Langkah Garuda yang Benar.

3. Perwira Garuda akan mendapat promosi menjadi ratu (queen)/benteng(rook)/gajah(bishop) atau promosi lain yang diberikan bila saja Garuda dapat menangkap (memakan) pion lawan yang bergerak di sepanjang jalur kolom/lajur e. Dan oleh karena setiap bidak Garuda selalu berada dan melangkah di/ke petak putih, maka hanya ada 3 kali kesempatan bagi Garuda untuk mendapatkan promosinya setelah pion lawan di lajur e telah melangkah.

Analisis Fundamental Game Catur_Nine 9x9 Petak

Selanjutnya, Kecuali Timer, semua hal game catur_nine di atas yang telah diberikan baik itu papan catur (board), bidak catur (pieces), aturan catur_nine (rules), langkah-langkah permainan setiap bidak (moves), dan hal lainnya (every-thing else) adalah masih dugaan yang bersifat hipotesa yang perlu kita uji kebenarannya dengan pakai alat uji atau semacam beberapa analisis untuk memperoleh hal/bagian mana yang dapat kita terima sebagai kebenaran dan hal/bagian mana yang harus kita tolak karena mengandung kesalahan.

1. Analisis IB (Initialize Board) Catur_Nine

Papan (board) Catur_nine yang berbentuk persegi empat sama sisi memiliki 9x9 = 81 petak yaitu putih dan hitam berselang-seling, dimana ada 2 kemungkinan susunan setiap petak putih dan hitam bisa diterapkan, tetapi hanya ada 1 yang harus kita pilih yang benar di antara keduanya, yaitu:

1.  Petak hitam di setiap sudut papan (board)

2. Petak putih di setiap sudut papan (board)

Papan (board) catur_nine 9x9 petak dengan petak hitam di setiap sudut/pojok papan akan membuat petak di tengah-tengah papan adalah petak hitam juga, dan petak yang ditempati raja putih adalah petak hitam juga (bidak catur putih sebagai penentu). Sedangkan bila dibuat petak putih di setiap sudut/pojok papan, ini akan membuat petak di tengah-tengah papan adalah petak putih juga, dan petak yang ditempati raja putih adalah petak putih juga (susunan bidak hitam mengikuti susunan bidak putih karena bidak putih sebagai penentu). 

Biasanya permainan catur yang me-representasi-kan perjalanan kehidupan, fenomena kehidupan seorang raja dalam suatu kerajaan atau seorang presiden sebagai kepala negara, maka raja (presiden) tersebut berada dalam ruang keadaan (state space) "gelap" dalam arti sebagai orang nomor satu di wilayah yang ia kepalai, seorang raja (presiden) yang baik dan benar adalah seorang yang memiliki tugas dan tanggung jawab yang besar untuk mensejahterakan rakyat dan memakmurkan negerinya, bahkan bila perlu ia harus rela mati duluan dengan cepat dibanding rakyatnya di dalam kerajaan (negara) yang ia pimpin demi menyelamatkan rakyatnya dari setiap ancaman maut kematian dari setiap serangan musuh yang datang. Keberadaan seorang raja dalam ruang keadaan "gelap" inilah yang dapat diilustrasikan oleh bidak raja putih yang menempati petak hitam dalam permainan di atas papan catur. 

Dengan demikian hal yang dapat kita terima adalah bahwa papan (board) catur_nine 9x9 petak yang benar adalah papan (board) dengan petak hitam di setiap sudut papan (board) sehingga petak yang ditempati raja putih akan ada di petak hitam, dan otomatis petak tengah yang sebagai FFP (Forboden For Pawn) yang di tengah-tengah papan adalah petak hitam juga.

Berikut adalah kode yang sudah memperbaiki susunan setiap petak putih dan hitam pada papan catur_nine 9x9 agar sesuai dengan aturan yang benar, yaitu petak hitam di setiap sudut papan.

Modifikasi:

  1. Menentukan koordinat petak e5

    • Papan 9×9 menggunakan notasi berbasis indeks array.
    • e5 dalam indeks array adalah (4, 4), karena indeks dimulai dari 0.
  2. Mengubah warna petak e5 menjadi putih dalam fungsi draw_board()


Kode yang telah dimodifikasi

import pygame
import sys
import time

# === KONFIGURASI TIMER ===
WHITE_TIME = 7200  # 2 Jam dalam detik
BLACK_TIME = 7200

# === KONFIGURASI PYGAME ===
pygame.init()

# Ukuran layar
SCREEN_WIDTH, SCREEN_HEIGHT = 900, 700
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("Chess Nine with Timer")

# Ukuran papan catur
BOARD_SIZE = 585
TILE_SIZE = BOARD_SIZE // 9
BOARD_X = (SCREEN_WIDTH - BOARD_SIZE) // 2 - 90  # Papan sedikit ke kiri agar pas di tengah layar 
BOARD_Y = (SCREEN_HEIGHT - BOARD_SIZE) // 2 - (-60)  # Papan sedikit turun agar Timer atas pas

# Posisi Timer (Digeser ke kiri sejauh 150 pixel)
TIMER_WIDTH, TIMER_HEIGHT = 200, 60
TIMER_SHIFT_LEFT = 150  # Geser ke kiri sejauh 150 pixel
TIMER_WHITE_X, TIMER_WHITE_Y = SCREEN_WIDTH - TIMER_WIDTH - 20 - TIMER_SHIFT_LEFT, BOARD_Y - TIMER_HEIGHT - 10
TIMER_BLACK_X, TIMER_BLACK_Y = SCREEN_WIDTH - TIMER_WIDTH - 20 - TIMER_SHIFT_LEFT, BOARD_Y + BOARD_SIZE + 10

# Warna
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
LIGHT_BROWN = (240, 217, 181)
DARK_BROWN = (181, 136, 99)
RED = (200, 50, 50)
GRAY = (50, 50, 50)
BLUE = (100, 149, 237)

# Font Timer
font = pygame.font.Font(None, 40)

# Timer awal
white_timer = WHITE_TIME
black_timer = BLACK_TIME
turn = "white"

# === FUNGSI GAMBAR PAPAN DENGAN ATURAN PETAK HITAM DI SUDUT ===
def draw_board():
    for row in range(9):
        for col in range(9):
            # Petak e5 (indeks array: 4,4) diwarnai putih
            if row == 4 and col == 4:
                color = WHITE
            else:
                # Warna petak papan catur normal
                color = DARK_BROWN if (row + col) % 2 == 0 else LIGHT_BROWN
            
            pygame.draw.rect(screen, color, 
                             (BOARD_X + col * TILE_SIZE, BOARD_Y + row * TILE_SIZE, TILE_SIZE, TILE_SIZE))

# === FUNGSI FORMAT TIMER ===
def format_time(seconds):
    hours = seconds // 3600
    minutes = (seconds % 3600) // 60
    seconds = seconds % 60
    return f"{hours:02}:{minutes:02}:{seconds:02}"

# === FUNGSI GAMBAR TIMER DALAM KOTAK ===
def draw_timer_box(x, y, time_text, label):
    pygame.draw.rect(screen, GRAY, (x, y, TIMER_WIDTH, TIMER_HEIGHT), border_radius=10)
    pygame.draw.rect(screen, BLUE, (x, y, TIMER_WIDTH, TIMER_HEIGHT), 3, border_radius=10)

    label_text = font.render(label, True, WHITE)
    time_display = font.render(time_text, True, WHITE)

    screen.blit(label_text, (x + 10, y + 5))
    screen.blit(time_display, (x + 10, y + 30))

# === LOOP GAME UTAMA ===
clock = pygame.time.Clock()
last_time = time.time()
running = True

while running:
    screen.fill(WHITE)

    # Hitung waktu yang berlalu
    current_time = time.time()
    elapsed = current_time - last_time
    if elapsed >= 1:
        if turn == "white":
            white_timer = max(0, white_timer - 1)
        else:
            black_timer = max(0, black_timer - 1)
        last_time = current_time

    # Gambar papan catur dengan aturan petak hitam di sudut
    draw_board()

    # Gambar timer putih dan hitam dengan posisi yang benar
    draw_timer_box(TIMER_WHITE_X, TIMER_WHITE_Y, format_time(white_timer), "WHITE")
    draw_timer_box(TIMER_BLACK_X, TIMER_BLACK_Y, format_time(black_timer), "BLACK")

    # Event handling
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.MOUSEBUTTONDOWN:
            turn = "black" if turn == "white" else "white"

    pygame.display.flip()
    clock.tick(30)

pygame.quit()
sys.exit()

📌 Perubahan & Peningkatan

Petak hitam sekarang berada di setiap sudut papan 🎯
Timer Putih & Hitam tetap digeser ke kiri sejauh 150 pixel 📍
Format waktu tetap dalam jam:menit:detik
Tampilan papan lebih realistis & proporsional 📏

✅ Petak e5 berwarna putih

  • Ditentukan dengan kondisi if row == 4 and col == 4 dalam fungsi draw_board().
  • Menggunakan warna WHITE (255, 255, 255).


🎯 Sekarang papan catur_nine 9x9 sudah benar dan sesuai aturan!
Silakan jalankan kode ini.


2. Analisis ISPP (Initialize Starting Positions of The Pieces) Catur_Nine

Dari 7 jenis buah catur_nine di masing-masing warna yaitu pion (pawn), kuda (knight), gajah (bishop), benteng (rook), ratu (queen), raja (king), dan garuda yang akan diletakkan di atas papan catur_nine sebagai posisi awal tentunya masing-masing bidak harus diposisikan di petak yang benar menurut susunan yang diharapkan sehingga dapat merepresentasikan perjalanan kehidupan.

Bila dilihat dari sejarah terciptanya catur 8x8 petak yang konvensional yang berasal dari India, bahwa catur 8x8 petak ini memposisikan semua barisan pion berada di depan sebagai pioner (perintis) gerakan bagi semua perwira yang di belakangnya, setiap pion bernilai 1. Lalu susunan para perwira ada di belakang pion, dan pada bidak perwira putih yang di sebelah kiri raja putih yang tersusun dimulai dari sudut kiri adalah benteng, kuda, gajah, dan ratu, sedangkan yang di sebelah kanan raja putih yang susunan dimulai dari sudut kanan adalah benteng, kuda, dan gajah, sedangkan raja putih berada di antara ratu dan gajah, posisi awal (starting position) demikian melambangkan suatu barisan keberadaan pasukan di dalam sebuah kerajaan (kerajaan catur putih).

Selain melambangkan suatu barisan keberadaan pasukan di dalam sebuah kerajaan. posisi awal (starting position) ini juga dapat mengilustrasikan dua unsur antara spirituil (rohani) dan kedagingan (sekuler) dimana barisan para perwira menyimbolkan berunsur spirituil (rohani/kelas tinggi) berada di bawah (belakang) untuk mengangkat (mengedepankan) barisan para pion yang berunsur kedagingan (sekuler/kelas rendah) agar semuanya siap siaga melakukan tugas dan tanggung jawab masing-masing. Para perwira meski besar namun di belakang, dan para pion meski di depan namun kecil.

Posisi Awal (Starting Position) Raja dan Ratu

Pada Catur konvensional 8x8 petak, raja catur putih menempatkan posisi awal (starting position) ratunya pada posisi di sebelah kiri-nya (bila tampak depan pemain bidak putih, maka ratu ada di sebelah kiri raja putih). Posisi awal bidak raja dan ratu, dan bidak hitam lainnya menyesuaikan pada susunan bidak putih karena bidak putih sebagai penentu.

Sedangkan pada catur_nine 9x9 petak ini, berbeda, catur bidak putih menempatkan posisi awal (starting position) ratu putih pada posisi di sebelah kanan rajanya (bila tampak depan pemain bidak putih, maka ratu putih berada di sebelah kanan raja putih). Sedangkan pada bidak hitam, posisi awal (starting position) raja, ratu, dan bidak hitam lainnya menyesuaikan pada susunan bidak putih karena bidak putih adalah sebagai penentu.

Berikut diberikan gambar posisi awal (starting positiion) bidak raja dan ratu putih serta raja dan ratu hitam di atas papan catur_nine 9x9 petak:


Langkah bidak Kuda dan Gajah

Di India tidak ada banyak kuda, yang ada banyak adalah gajah termasuk gajah "ganesha" yang buatan India untuk simbol pendidikan, itu dewa yang berwujud gajah sebagai dewa pengetahuan, kecerdasan, dan kebijaksanaan. Jalan gajah adalah lebih lambat dari jalan kuda yang dapat berlari kencang, kuda memang bisa melompat balok yang ada menghadang di depannya, tapi apakah kuda berjalan/berlari membentuk huruf L seperti yang diilustrasikan kuda catur-india ini?, dan apakah gajah berjalan/berlari lebih jauh dibanding kuda seperti yang diilustrasikan gajah catur-india ini? (Langkah kuda ini mengilustrasikan pasukan berkuda, dan langkah gajah mengilustrasikan pasukan naik gajah), Coba Anda berpikir jika petak posisi kuda digantikan gajah, dan  petak posisi gajah digantikan kuda, langkah mereka saling digantikan, dimana kuda menjadi gajah, lalu gajah menjadi kuda (di sini gajah dan kuda bernilai sama yaitu 3). Pastilah kuda akan benar dikatakan bisa berlari kencang menempuh jarak yang jauh, tapi ia tidak akan pernah melompat membentuk huruf L, tidak akan pernah berpindah dari petak hitam ke petak putih atau dari petak putih ke petak hitam. Jalan atau larinya kuda sebenarnya adalah lurus ke depan, si penunggang saja yang duduk di atas pelana merasa pinggulnya ter-gunjang-ganjing seakan akan naik turun seperti membentuk huruf L padahal tidak. Dan Garuda lah (bidak baru dalam Catur_nine ini) yang pantas melangkah/bergerak atau terbang membentuk huruf L seperti seekor burung (Garuda) yang hinggap dari satu dahan ke dahan pohon lainnya. Berapa  nilai Garuda? jawabannya saya tidak tahu, ini harus melalui pengujian permainan catur_nine dan atau dari kesepakatan bersama seperti dari FIDE. Kemudian gajah akan benar dikatakan bisa berjalan/berlari menempuh jarak yang lebih dekat dibanding kuda, tapi ia (gajah) ini kenapa bisa melompati balok membentuk langkah huruf L (keadaan setelah berganti kuda menjadi gajah, dan gajah menjadi kuda). 
Dengan kekurangan demikian dapatlah kita benarkan dan kita terima aturan langkah kuda dan gajah yang buatan India ini pada catur 8x8 petak untuk merepresentasikan perjalanan kehidupan.
Peranan kuda dalam permainan catur 8x8 petak di sini bisa memberi arti seorang ksatria pasukan perang atau bisa sebagai sejumlah kendaraan perang, atau dalam keseharian kita, kuda melambangkan seorang pekerja yang ulet, gigih, dan tangguh. Dan oleh karena catur adalah permainan bertanding untuk memperoleh "menang" atas kekalahan lawan, maka peranan kuda sebenarnya yang cocok adalah sebagai sejumlah kendaraan perang, oleh karena itu kuantitas kuda sebanyak 2 buah pada catur 8x8 petak yang konvensional ini harus kita kurangi menjadi cukup 1 buah saja, sebab apa? sebab dalam perlawanan menghadapi musuh yang hendak melakukan perang terhadap kita, maka menurut hukum perang, hal pertama yang perlu kita lakukan adalah "mengajukan damai" terlebih dulu, jika damai yang kita ajukan ditolak maka kita harus segera menghancurkan musuh sampai kalah, tapi bila damai disetujui maka itulah harapan kita menciptakan kedamaian di muka bumi, berbahagialah orang yang membuat damai, sebab mereka akan disebut anak-anak Allah.
Maju ke medan perang pun tidak perlu dengan begitu banyaknya kendaraan perang atau alat-alat perang, seperti pada raja Daud yang membuat perlengkapan kendaraan perangnya adalah sebanyak secukupnya saja, maksud saya adalah tidak perlu banyak kendaraan perang atau senjata perang, tapi yang dibutuhkan adalah personil yang sangat berkualitas yang akan turun ke medan perang, meski sedikit personil tapi bila sangat berkualitas dan brilian itu sudah cukup, itu yang kita harapkan sebagai ilustrasi dari jumlah kuda hanya sebanyak 1 (satu) buah saja pada catur_nine 9x9 petak yang akan kita bangun ini. Dengan sedikit (1 buah) kuda ini dapat mengilustrasikan bagaimana Gideon sang pahlawan mempersiapkan pasukannya sejumlah secukupnya saja dengan cara menyeleksi (mengurangi) mereka melalui pengujian "turun minum air" ke sungai jernih, dari antara seluruh personil siapa saja yang minum seperti anting menjilat, mendekatkan mulutnya ke air sungai untuk minum maka mereka disuruh pulang saja, tidak usah ikut perang, tapi siapa saja yang minum dengan pakai telapak tangan mengambil air dan memasukkan ke mulut maka mereka pantas dan layak diikut sertakan dalam perang oleh Gideon, ini adalah contoh dalam hal membentuk pasukan sejumlah secukupnya saja tapi berkualitas dan brilian, bahwa etika kesopanan adalah awal untuk mencapai hasil. Penerapan hal demikian pada dekade zaman sekarang bisa saja dengan cara pengujian siapa saja yang bertanya kepada Prompt AI (misalnya ChatGPT) pakai kalimat yang tidak sopan dan tidak berpola R-D-Q maka disuruh saja pulang, tidak usah ikut tugas atau perang, tapi bagi siapa saja yang bertanya kepada Prompt AI pakai kalimat yang sopan dan berpola R-D-Q maka mereka pantas dan layak maju ke tempat tugas atau ke medan perang. Perlawanan menghadapi musuh di sini bukan saja berarti nyata harus turun ke medan perang benar-benaran, tapi bisa juga dalam hal menghadapi musuh-musuh seperti mengatasi kemiskinan, kebodohan, inflasi, atau musuh musuh lainya dalam perjalanan kehidupan kita di keseharian.
Nah, jika kuda yang dibutuhkan cukup 1 buah saja untuk setiap pemain dalam catur_nine 9x9 petak ini, maka jumlah Garuda harus menjadi 2 (dua) buah, dengan asumsi starting position bidak ratu putih di sebelah kiri raja. Mana yang terbaik kita pilih hanya satu dari dua pilihan yang ada:
1. Kuda sebanyak 2 buah, dan Garuda sebanyak 1 buah, Atau
2. Kuda sebanyak 1 buah, dan Garuda sebanyak 2 buah.
Starting position dari bidak ratu putih berada di sebelah kiri rajanya pada permainan catur adalah salah, sehingga ini tidak dapat kita terima dan harus kita tolak.

Lain halnya, bila starting position dari bidak ratu putih berada di sebelah kanan rajanya, maka hanya ada 1 (satu) opsi formasi untuk pilihan starting position terbaik yaitu pada formasi 2 kuda, 1 garuda, maka penulisan kode game sesuai aturan catur_nine 9x9 petak adalah hanya melanjutkan kode game catur 8x8 petak yang konvensional yang sudah ada sebelumnya. Cuma masalahnya kita harus mengatur tata letak awal setiap bidak atau starting position terbaik khususnya posisi awal terbaik gajah, kuda, dan garuda, di sini ada direkomendasikan 2 (dua) starting position  yang harus dipilih hanya satu yang terbaik dari kedua opsi yang diberikan, lihat di URL Link sini:

Dari uraian di atas (klik Link URL di atas), maka posisi awal (starting position) terbaik dalam permainan Catur_Nine 9x9 petak (formasi 2 kuda, 1 Garuda) di setiap pemain adalah seperti pada gambar berikut ini:


Berikut ini diberikan kode pemograman untuk starting position terbaik pada permainan Catur_Nine 9x9 petak dengan formasi 2 buah Kuda dan 1 buah Garuda:

Kode Game Catur Nine dengan Bidak Awal

import pygame
import sys
import time
import os

# === KONFIGURASI TIMER ===
WHITE_TIME = 7200  # 2 Jam dalam detik
BLACK_TIME = 7200

# === KONFIGURASI PYGAME ===
pygame.init()

# Ukuran layar
SCREEN_WIDTH, SCREEN_HEIGHT = 900, 700
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("Chess Nine with Timer")

# Ukuran papan catur
BOARD_SIZE = 585
TILE_SIZE = BOARD_SIZE // 9
BOARD_X = (SCREEN_WIDTH - BOARD_SIZE) // 2 - 90  # Papan sedikit ke kiri agar pas di tengah layar
BOARD_Y = (SCREEN_HEIGHT - BOARD_SIZE) // 2 - (-60)  # Papan sedikit turun agar Timer atas pas

# Posisi Timer
TIMER_WIDTH, TIMER_HEIGHT = 200, 60
TIMER_SHIFT_LEFT = 150  
TIMER_WHITE_X, TIMER_WHITE_Y = SCREEN_WIDTH - TIMER_WIDTH - 20 - TIMER_SHIFT_LEFT, BOARD_Y - TIMER_HEIGHT - 10
TIMER_BLACK_X, TIMER_BLACK_Y = SCREEN_WIDTH - TIMER_WIDTH - 20 - TIMER_SHIFT_LEFT, BOARD_Y + BOARD_SIZE + 10

# Warna
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
LIGHT_BROWN = (240, 217, 181)
DARK_BROWN = (181, 136, 99)
RED = (200, 50, 50)
GRAY = (50, 50, 50)
BLUE = (100, 149, 237)

# Font Timer
font = pygame.font.Font(None, 40)

# Timer awal
white_timer = WHITE_TIME
black_timer = BLACK_TIME
turn = "white"

# Direktori gambar bidak
IMAGE_DIR = "/storage/emulated/0/AppJadi/Catur/Catur_9x9/images"

# === MEMUAT GAMBAR BIDAK ===
pieces_images = {}

def load_pieces():
    """Memuat gambar bidak dari direktori"""
    piece_names = ["pawn", "rook", "knight", "bishop", "queen", "king", "garuda"]
    colors = ["white", "black"]

    for color in colors:
        for piece in piece_names:
            path = os.path.join(IMAGE_DIR, f"{color}_{piece}.png")
            if os.path.exists(path):
                img = pygame.image.load(path)
                img = pygame.transform.scale(img, (TILE_SIZE, TILE_SIZE))
                pieces_images[f"{color}_{piece}"] = img

# === POSISI AWAL BIDAK ===
starting_position = {
    "white_rook": [(0, 8), (8, 8)],
    "white_knight": [(2, 8), (7, 8)],
    "white_bishop": [(3, 8), (6, 8)],
    "white_queen": [(5, 8)],
    "white_king": [(4, 8)],
    "white_garuda": [(1, 8)],  # Garuda tambahan
    "white_pawn": [(i, 7) for i in range(9)],

    "black_rook": [(0, 0), (8, 0)],
    "black_knight": [(2, 0), (7, 0)],
    "black_bishop": [(3, 0), (6, 0)],
    "black_queen": [(5, 0)],
    "black_king": [(4, 0)],
    "black_garuda": [(1, 0)],  # Garuda tambahan
    "black_pawn": [(i, 1) for i in range(9)],
}

# === FUNGSI GAMBAR PAPAN ===
def draw_board():
    for row in range(9):
        for col in range(9):           
            # Petak e5 (indeks array: 4,4) diwarnai merah
            if row == 4 and col == 4:
                color = WHITE
            else:
                # Warna petak papan catur normal
                color = DARK_BROWN if (row + col) % 2 == 0 else LIGHT_BROWN                  
                pygame.draw.rect(screen, color, 
                             (BOARD_X + col * TILE_SIZE, BOARD_Y + row * TILE_SIZE, TILE_SIZE, TILE_SIZE))

# === FUNGSI GAMBAR BIDAK ===
def draw_pieces():
    """Menggambar semua bidak di posisi awal"""
    for piece, positions in starting_position.items():
        if piece in pieces_images:
            for pos in positions:
                x, y = pos
                screen.blit(pieces_images[piece], 
                            (BOARD_X + x * TILE_SIZE, BOARD_Y + y * TILE_SIZE))

# === FUNGSI FORMAT TIMER ===
def format_time(seconds):
    hours = seconds // 3600
    minutes = (seconds % 3600) // 60
    seconds = seconds % 60
    return f"{hours:02}:{minutes:02}:{seconds:02}"

# === FUNGSI GAMBAR TIMER ===
def draw_timer_box(x, y, time_text, label):
    pygame.draw.rect(screen, GRAY, (x, y, TIMER_WIDTH, TIMER_HEIGHT), border_radius=10)
    pygame.draw.rect(screen, BLUE, (x, y, TIMER_WIDTH, TIMER_HEIGHT), 3, border_radius=10)

    label_text = font.render(label, True, WHITE)
    time_display = font.render(time_text, True, WHITE)

    screen.blit(label_text, (x + 10, y + 5))
    screen.blit(time_display, (x + 10, y + 30))

# === MULAI GAME ===
clock = pygame.time.Clock()
last_time = time.time()

# Muat gambar bidak
load_pieces()

running = True
while running:
    screen.fill(WHITE)

    # Hitung waktu yang berlalu
    current_time = time.time()
    elapsed = current_time - last_time
    if elapsed >= 1:
        if turn == "white":
            white_timer = max(0, white_timer - 1)
        else:
            black_timer = max(0, black_timer - 1)
        last_time = current_time

    # Gambar papan dan bidak
    draw_board()
    draw_pieces()

    # Gambar timer
    draw_timer_box(TIMER_WHITE_X, TIMER_WHITE_Y, format_time(black_timer), "BLACK")
    draw_timer_box(TIMER_BLACK_X, TIMER_BLACK_Y, format_time(white_timer), "WHITE")

    # Event handling
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.MOUSEBUTTONDOWN:
            turn = "black" if turn == "white" else "white"

    pygame.display.flip()
    clock.tick(30)

pygame.quit()
sys.exit()


Penjelasan Perubahan

1. Menambahkan fungsi load_pieces()

Memuat gambar bidak dari direktori /storage/emulated/0/AppJadi/Catur/Catur_9x9/images. (Sesuaikan dengan nama tempat penyimpanan file yang Anda punya).

Semua bidak seperti pawn, rook, knight, bishop, queen, king, dan garuda dimuat dengan ukuran yang sesuai.

2. Menambahkan starting_position

Menyimpan koordinat awal bidak di papan 9x9.

Termasuk bidak unik seperti Garuda yang ditempatkan pada posisi khusus.

3. Menambahkan fungsi draw_pieces()

Menggambar bidak pada posisi awal mereka di papan.

Hasilnya

- Game Catur_Nine sekarang menampilkan semua bidak pada posisi awal terbaik.

- Gambar bidak dimuat dari direktori yang sudah ditentukan.

- Timer bekerja dengan baik, dan bisa dikontrol dengan klik mouse.

- Silakan coba jalankan kodenya.

Kode yang dibuat ini sudah sangat baik dan cukup optimal untuk permainan catur 9x9 dengan posisi bidak awal yang unik, termasuk bidak "Garuda". Berikut adalah beberapa catatan perbaikan dan saran untuk meningkatkan performa serta memastikan game berjalan lebih lancar:

Perbaikan dan Peningkatan

  1. Validasi Direktori Gambar Bidak:
    Jika gambar bidak tidak ditemukan, bisa menampilkan placeholder atau error handling agar tidak terjadi crash.

    if os.path.exists(path):
        img = pygame.image.load(path)
    else:
        print(f"WARNING: Gambar {path} tidak ditemukan!")
        continue
    
  2. Optimasi Timer dengan pygame.time.get_ticks()
    Daripada menggunakan time.time(), lebih baik gunakan pygame.time.get_ticks() untuk menghitung waktu yang lebih akurat tanpa perlu menggunakan time.sleep().

    last_time = pygame.time.get_ticks()
    

    Lalu di dalam loop:

    current_time = pygame.time.get_ticks()
    elapsed = (current_time - last_time) // 1000  # Konversi ke detik
    
  3. Peningkatan Interaksi Pemain
    Kamu bisa menambahkan fitur berikut:

    • Pemain bisa memilih dan memindahkan bidak.
    • Highlight bidak yang bisa dipilih.
    • Validasi langkah-langkah yang sah.
  4. Menambahkan Efek Suara (Opsional)
    Bisa ditambahkan suara ketika pemain menggerakkan bidak atau ketika timer hampir habis.

  5. Menggunakan Dictionary untuk Bidak Aktif
    Saat ini bidak hanya digambar dalam posisi awal, tapi bisa diperbaiki dengan dictionary yang menyimpan posisi terkini setiap bidak.

  6. Membuat Logika Pergerakan Bidak
    Tambahkan fungsi untuk mendeteksi langkah valid dan update posisi bidak setelah bidak dipilih.e

  7. Penamaan Variabel Timer: Label timer jangan tertukar antara "WHITE" dan "BLACK".

draw_timer_box(TIMER_WHITE_X, TIMER_WHITE_Y, format_time(black_timer), "BLACK") 
draw_timer_box(TIMER_BLACK_X, TIMER_BLACK_Y, format_time(white_timer), "WHITE") 

Jika penulisan Label Timer salah, maka solusi perbaikannya mengubah baris berikut pada fungsi gambar timer:

draw_timer_box(TIMER_WHITE_X, TIMER_WHITE_Y, format_time(white_timer), "WHITE")

draw_timer_box(TIMER_BLACK_X, TIMER_BLACK_Y, format_time(black_timer), "BLACK")

Menjadi:

draw_timer_box(TIMER_WHITE_X, TIMER_WHITE_Y, format_time(black_timer), "BLACK")

draw_timer_box(TIMER_BLACK_X, TIMER_BLACK_Y, format_time(white_timer), "WHITE")

Penjelasan Perbaikan:

TIMER_WHITE_X, TIMER_WHITE_Y seharusnya menampilkan waktu pemain putih, bukan hitam.

TIMER_BLACK_X, TIMER_BLACK_Y seharusnya menampilkan waktu pemain hitam, bukan putih.

 Pengecekan Timer:

    • Perubahan giliran bekerja dengan baik?

Setiap klik mouse, giliran berpindah antara "white" dan "black".

Timer pemain yang sedang berjalan berkurang 1 detik setiap detiknya.

    • Timer tidak berkurang saat permainan dihentikan?

Saat program keluar (pygame.QUIT), semua proses berhenti tanpa error.

8. Manajemen Waktu (Timer):
Saat ini, timer hanya berjalan saat ada perubahan waktu (elapsed >= 1). Sebaiknya gunakan pygame.time.get_ticks() untuk akurasi lebih baik.

9. Direktori Gambar:
IMAGE_DIR = "/storage/emulated/0/AppJadi/Catur/Catur_9x9/images" perlu dipastikan benar, karena akses ini bergantung pada sistem operasi yang digunakan.

10. Penanganan Klik Mouse:
Saat ini, klik hanya mengganti giliran. Jika ingin memungkinkan interaksi lebih lanjut, Anda bisa menambahkan sistem pemilihan bidak dan gerakan.

11. Optimasi Struktur Kode:
Misalnya, memisahkan fungsi untuk menangani logika giliran dan gerakan bidak agar kode lebih rapi.

12. Tambahan (Opsional):

Jika ingin memberikan indikasi visual untuk giliran pemain, bisa menambahkan efek highlight pada timer pemain yang sedang bermain.

Misalnya, menambahkan warna latar berbeda:

def draw_timer_box(x, y, time_text, label, is_turn):

    color = RED if is_turn else GRAY  # Warna berbeda jika sedang berjalan

    pygame.draw.rect(screen, color, (x, y, TIMER_WIDTH, TIMER_HEIGHT), border_radius=10)

    pygame.draw.rect(screen, BLUE, (x, y, TIMER_WIDTH, TIMER_HEIGHT), 3, border_radius=10)

    label_text = font.render(label, True, WHITE)

    time_display = font.render(time_text, True, WHITE)

    screen.blit(label_text, (x + 10, y + 5))

    screen.blit(time_display, (x + 10, y + 30))

Lalu panggil fungsi ini dengan:

draw_timer_box(TIMER_WHITE_X, TIMER_WHITE_Y, format_time(black_timer), "BLACK", turn == "black")

draw_timer_box(TIMER_BLACK_X, TIMER_BLACK_Y, format_time(white_timer), "WHITE", turn == "white")

Ini akan membuat timer pemain yang sedang berjalan memiliki latar merah sebagai indikator.


Secara keseluruhan, kode ini sudah sangat bagus, bekerja dengan baik, dan siap dikembangkan lebih lanjut. dengan menambahkan fitur tambahan sesuai preferensi atau kebutuhan seperti validasi gerakan, AI lawan, atau fitur lainnya.

Jadi, untuk permainan catur_nine 9x9 petak ini, hanya ada satu starting position paling terbaik, sudah kita peroleh untuk formasi 2 kuda, 1 garuda sebagai pilihan formasi terbaik bagi setiap pemain ketika akan memulai permainan buah catur_nine di atas papan 9x9 petak.



Bersambung Ke:




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)