読み書きプログラミング

日常のプログラミングで気づいたことを綴っています

囲碁AIアプリの作り方4

今日は碁盤描画周りです。

間口の一番広いウェブアプリを対象にします。
JavaScriptの碁盤描画のライブラリをまずご紹介します。

  • eidogo: HTML5以前では事実上のデファクトスタンダードだったオープンソースのウェブアプリです。DOMで描画します。耳赤サイトでも現役で活躍しています。
  • jGoBoard: canvasを使った美しい碁盤ライブラリです。ついー碁や慎始(どちらも私の自作ウェブアプリです)で利用させていただいています。AZ.jsの碁盤もこれです。有料の商用の場合、ライセンスの確認が必要です。
  • WGo.js: 同じくcanvasを使った碁盤ライブラリです。AlphaGo Teachで使われています。実装に特徴があって市松模様上に描画したcanvasを2枚重ねることで長いラベルにも対応しています。
  • Sabaki: Electronを使った碁盤アプリです。ElectronなのでJavaScriptで書かれておりウェブアプリ版もあります。Leela Zeroにも対応し、今も積極的に開発が続いているこころ強いソフトです。DOMで描画しています。

個人的にはHTML5が安定した現在にあっても碁盤描画はcanvas描画ではなくDOMで構成するのが筋がいいと思っています。
ですが、ちょっと遊ぼうと思うとcanvasが自由ですね。

碁盤になる自家製描画ライブラリをご紹介します。
まずはどんなものかライブラリを使ったウェブアプリから。

https://new3rs.github.io/allelo-intro/index.html

(Google Chromeで見てください。Safariだと肝心な部分の描画が欠けます。)

描画に思いっきり特長があるので、あえて囲碁と呼ばずに「アレロ」と呼んでいます。
わかる人にわかると思いますが、ルールは囲碁のTromp-Taylerルールと同値です。Tromp-Taylerルールは純碁から地埋めをなくしたルールでわかれば一番シンプルなのですが、文章で読むと難しい感じがします。
そういう理解のための障壁をなくすため、出来うる限り可視化に努めました。

石と石がくっついたり、呼吸点がなくなったりする様子がわかりますし、なぜ石が盤上から消えるのかもうまく説明できたと思っています。「アレロ」はこれから色々展開していく予定です。乞うご期待。

さて、このウェブアプリの描画ライブラリが、allelo-boardです。

github.com

コードはまだ整理されて居ないのですが、HTML template, customElement, WebGLSVGHTML5の次の技術を駆使しています^^
描画の実装のご参考になれば幸いです。

(商標やデザインなど今後権利化していく可能性があります。)

今日はこの辺で。