「 将棋エンジンの思考部って Enterprise Business Rules の Entities に全部含まれるよな☆」
「 じゃあ Clean Architecture にするも何も、もともと できてるじゃないか☆」
「 Application Business Rules の UseCases との絡みを考えましょうよ?」
「 ↑ だいたい こんなもんで、リーグ戦をするとか floodgate に放流するとかは GUI の方の機能だぜ☆」
「 Controlls が いわゆる USIパーサー、 SFENパーサーで、
Presenters が いわゆる 盤のコンソール表示だろ☆」
「 パーサー部と、盤を動かす部分を分けてないよな☆ むしろ 直結した方が手短……☆」
「 ↑ Match って なんだか分かんないな……☆
Match に向かって ready ok とか呼び掛けないだろ☆?」
「 将棋エンジンは Behaviour Driven Development ではないんで☆」
「 駒落ちだって Regular bout 足りえるでしょ!」
class Playing:
UsiOk(
engineName: string,
engineAuthor: string
)
SetOption(
name: string,
value: string
)
ReadyOk( )
UsiNewGame( )
「 ↑ 疑似コードで書くとこんな感じだぜ☆
usiok では、エンジン名と 著者名だけ Engine の実装から渡せるようにしようぜ☆」
class Playing:
// ループ2つ目
Position( )
「 ↑ position って パースして どうモデルにするんだぜ☆?」
「 きふわらね ちゃんはまだ Bonanza 6.0 も、 Stockfish の知識も無くて、 Position というオブジェクトは持ってないわよ?」
class Playing:
GoPonder( )
// `timeout` - millisecond or "infinite"
GoMate(string timeout)
GoInfinite( )
// Go( string btime, string wtime, string byoyomi, string binc, string winc )
class Playing:
Stop( )
PonderHit( )
GameOver( string result )
「 ↑ だいたい こんなもん……、あとは Go( )
か……☆」
「 2014年時点では フィッシャー・クロック・ルールは無かったからな☆ 追加しとこ……☆」
<書きかけ>
Crieitは個人で開発中です。
興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!