はじめに
7月はPCとの対戦を約300局行いました。対局を繰り返すことで棋力が向上することを期待していました。しかし現実はそう甘くないようです。はっきり言って最近行き詰っています。そこで本で学習することにしました。
さっそく1冊購入しました。「最重要手筋104」とタイトルに書かれています。どうしてこの本を選んだか?104の手筋を全部暗記してしまおうと考えたからです。
子供でも百人一首が暗記できるくらいなのだから大人が将棋の手筋104覚えることは難しくないのではないか?そう考えました。
暗記のためのアプリ作成
ただ単に何回も読み返して暗記するのは難しいと思います。そこで単語帳アプリの発展として手筋暗記アプリを作ることにしました。touch-sp.hatenablog.com
完成したアプリはこんな感じです。
ボタンは一つもありません。Enterキーを連打するだけでどんどん出題が繰り返される単純なものです。
解答表示機能はついていません。解けなかったら本を調べることになります。
Pythonスクリプト
データの作成とアプリの作成の二つが必要です。完成したデータ(問題データ)を公開すると著作権に違反すると思うので公開できません。
局面図はShogiGUIでひとつずつ作成しました。
アプリのPythonスクリプトはこちらになります。
import pandas as pd import random import os import sys import random from PyQt6.QtCore import Qt from PyQt6.QtWidgets import * from PyQt6.QtGui import QFont, QImage, QPixmap class Window(QWidget): def __init__(self): super().__init__() self.df = pd.read_csv('titles.txt', index_col=0) self.initUI() self.question = '' self.new_question = True def initUI(self): font = QFont() font.setFamily('Times') font.setPointSize(20) font.setBold(True) self.start_button = QPushButton('start') self.start_button.setFont(font) self.label_q = QLabel() self.label_q.setAlignment(Qt.AlignmentFlag.AlignCenter) self.label_q.setFont(font) self.label_a = QLabel() self.label_a.setAlignment(Qt.AlignmentFlag.AlignCenter) self.label_a.setFont(font) self.label_pic = QLabel() self.label_pic.setAlignment(Qt.AlignmentFlag.AlignCenter) layout = QVBoxLayout() layout.addWidget(self.label_q, 1) layout.addWidget(self.label_a, 1) layout.addWidget(self.label_pic, 4) self.setLayout(layout) self.show() def keyPressEvent(self, e): if e.key() == Qt.Key.Key_Return: if self.new_question == True: self.label_a.clear() self.label_pic.clear() self.q_num = random.randint(1, len(self.df)) self.label_q.setText(str(self.q_num)) self.new_question = False else: self.label_a.setText(self.df.loc[self.q_num]['Title']) self.img = QImage(os.path.join('img', '%d.png'%self.q_num)) self.label_pic.setPixmap(QPixmap.fromImage(self.img)) self.new_question = True app = QApplication(sys.argv) ex =Window() ex.setWindowTitle('詰みと寄せの手筋104') ex.setGeometry(100,100,500,700) sys.exit(app.exec())
最後に
データの作成とアプリの作成にはそれなりの時間が必要です。しかし「急がば回れ」とのことわざがあるように作り終わったあとの効率が全然違います。目標は「8月中に104の手筋すべてを暗記する」こととしました。