Programming Complex Algorithm in Swift
Kaz Yoshikawa
Background
• Swift について深く学びたい
• 超複雑なアルゴリズムを要する課題に取り込めばいいのでは?
• そんな課題は…
Quick Review Rules
Shogi Rules• 9x9の将棋盤を用意する
• 歩、香、桂、銀、金、角、飛、王の駒を使う
• 先手、後手交互に指す
• 敵陣内に移動、敵陣内で移動した場合は成る事ができる
• 金、王は成る事ができない
• 一度なった駒は元に戻せない
Shogi Rules• 自駒の移動先に敵駒がある場合は取る事ができる
• 先に相手の王を取った方が勝ちとなる
• 王がどこに移動しても、相手の駒に取られてしまう状態を詰みとし、勝負がついたものとする
• 取った駒は空いている場所に打つ事ができる
• 成った駒をとっても、打つときは成った状態で打てない
Shogi Rules• 歩は同じ列に2つ置いてはいけない(2歩)
• 歩を打って、相手の王を詰めてはいけない(打ち歩詰め)
• 歩、香、桂は次の手で移動できなくなる手は指してはならない
• 千日手や相入玉などの特殊な状態がある
駒の動き 出典:早わかり将棋Book・日本将棋連盟
駒の動き 出典:早わかり将棋Book・日本将棋連盟
成り 出典:早わかり将棋Book・日本将棋連盟
成り 出典:早わかり将棋Book・日本将棋連盟
Pain in the Ass
• 間違いなく面倒くさそう
• C/C++ でもなかなか綺麗にかけなさそう
• 実は Objective-C で以前トライしていた
将棋盤Kit• Framework または Library
• 将棋の基本的な駒の動作・制限・ルールを実装
• 実際のAIには手を出さない…
• 絶対に…
• おそらく…
(仮)
Using Unicode for identifiers
Using Unicode Names• せっかくなので、積極的に日本語を使っていこう
• クラス名
• 変数名
• 関数名、メソッド名
• パラメータ名など
Unicode in type name
Capitalization Issue
Solution1.タイプ名では英語を使う
• 変数は日本語で
2.日本語タイプ名にプレフィックスをつける
Using Unicode for Variables, Parameters
• 変数名、パラメータ名、などでは大文字小文字問題はなさそう
Unicodes for Identifiers😀
🐶
🍎
🀀
♞☁
OK NG
Plural Issue
• 日本語は単数形・複数形を意識しない場合が多い
• object ↔ objects OK
• オブジェクト ↔ オブジェクト群 ?
• var pieces: Piece → var 駒s: Piece
Plural Issue• 英語でも実は同じ問題がある
• Data の複数形は → 実は datum の複数形
• sheep の複数形は / fish の複数形?
• 文法を気にせず太く生きる
• (例)Toronto Maple Leafs
Implement Movement• 動きは2種類
• 決まった方向へ決まったマスの数だけ移動
• 連続して移動
http://www.geocities.co.jp/Playtown/6157/oboeru/ugoki.html
Step Movement
Array of Tuple
Checkmate, Foul and other rules
Now Printing
誠意、実装中
Hasn't come that far yet..
そこまで、深いところには、まだだどりついていなかった…
–Kaz Yoshikawa
“May the Swift be with you”
Thank you
[email protected] Yoshikawa