見出し画像

Python独学#9(将棋)

Pythonでシンプルな将棋アプリを作るには、まずGUI(例えばtkinter)を使った盤面表示と、駒の移動処理の基本から始めるのがおすすめです。以下は、9×9の将棋盤を表示し、駒を簡易的に動かせる入門版コードです。


【将棋アプリ(初級版)Pythonコード】

import tkinter as tk

CELL_SIZE = 60
BOARD_SIZE = 9

# 駒の初期配置(簡略化版:歩と王のみ)
initial_board = [
    ["", "", "", "", "玉", "", "", "", ""],
    ["歩", "歩", "歩", "歩", "歩", "歩", "歩", "歩", "歩"],
] + [[""] * BOARD_SIZE for _ in range(7)]

class ShogiApp:
    def __init__(self, root):
        self.root = root
        self.root.title("将棋アプリ")
        self.canvas = tk.Canvas(root, width=BOARD_SIZE*CELL_SIZE, height=BOARD_SIZE*CELL_SIZE)
        self.canvas.pack()

        self.board = [row[:] for row in initial_board]
        self.selected = None

        self.canvas.bind("<Button-1>", self.on_click)
        self.draw_board()

    def draw_board(self):
        self.canvas.delete("all")
        for i in range(BOARD_SIZE):
            for j in range(BOARD_SIZE):
                x1 = j * CELL_SIZE
                y1 = i * CELL_SIZE
                x2 = x1 + CELL_SIZE
                y2 = y1 + CELL_SIZE
                self.canvas.create_rectangle(x1, y1, x2, y2, fill="burlywood")
                piece = self.board[i][j]
                if piece:
                    self.canvas.create_text((x1+x2)//2, (y1+y2)//2, text=piece, font=("Arial", 20))

    def on_click(self, event):
        col = event.x // CELL_SIZE
        row = event.y // CELL_SIZE

        if self.selected:
            prev_row, prev_col = self.selected
            if (prev_row, prev_col) != (row, col):
                self.board[row][col] = self.board[prev_row][prev_col]
                self.board[prev_row][prev_col] = ""
            self.selected = None
        else:
            if self.board[row][col]:
                self.selected = (row, col)

        self.draw_board()

if __name__ == "__main__":
    root = tk.Tk()
    app = ShogiApp(root)
    root.mainloop()

【このアプリでできること】
• 将棋盤(9×9マス)の表示
• 歩と王の初期配置
• 駒の選択・移動(ドラッグなし、クリックで移動)
• ルールなしの自由移動(本格的な将棋ルールは未実装)


【将棋アプリ拡張プラン】

◆ 段階1:本格的な将棋ルール対応
• 駒の種類(歩・香・桂・銀・金・角・飛・玉)
• 駒の成り(例:成銀・と金など)
• 各駒の移動ルール
• 打ち駒処理(持ち駒管理)
• 王手・詰み判定
• 千日手・連続王手禁止(簡易版でもOK)


◆ 段階2:2人対戦(ローカル)
• プレイヤー交代(先手/後手)
• 先手・後手の駒の向きや色の違い
• ターン管理表示


◆ 段階3:AI対戦モード
• ミニマックス法 + αβ枝刈り(中級レベル)
• 評価関数による盤面評価
• 難易度設定(初級・中級)
• ランダム性を少し混ぜる(自然な動き)


【開発スタイル提案】

Pythonでは以下のライブラリを併用するのが効果的です。

ライブラリ
用途
tkinter
GUI(盤面・駒表示)
shogiライブラリ
本格将棋ルール(合法手生成など)
pygame
アニメーション・音声追加


【はじめに:shogiライブラリ+tkinter版】

以下のようなコード構成で、本格将棋アプリを作れます:

shogi_app/
├─ main.py           # tkinterベースの盤面・UI表示
├─ ai_engine.py      # AI思考(MiniMaxなど)
├─ board_logic.py    # 駒移動・合法手生成(shogiライブラリ)
├─ assets/           # 駒画像、効果音

「本格ルール+2人対戦」対応の将棋アプリ(Python / tkinter)の完成版ベースコードを以下からダウンロードできます:


【内容】
• main.py: GUIとプレイヤー交代管理
• board_logic.py: 駒の初期配置と簡易移動ロジック
• 本格的な将棋の駒配置・2人で交互にプレイ可能
• 成り・持ち駒・AI未対応(今後追加可能)


【実行方法】

cd shogi_app
python main.py

AI対戦対応の将棋アプリ(Python / tkinter)完成版はこちらからダウンロードできます:


【このバージョンの機能】
• 先手:人間、後手:AI(ランダム移動)
• 本格的な駒の初期配置
• 駒の合法移動を簡易ロジックで制限
• ターン制&AIの自動応答(約0.5秒後に指す)


【実行方法】

cd shogi_app
python main.py

将棋アプリも作成できるとはPython恐るべし

ご精読ありがとうございました😊

いいなと思ったら応援しよう!