2022-10-26
第33回高専プロコンのNICT賞&最優秀賞、リアルなボードゲームとネットワークを融合させた「HEXELLENT ! by 函館高専」。コミュニケーション手段としてのゲーム、可能性ありますね!

プログラミングの入門としてもよく使われるチェス。グローバルで見ると競技人口が8億人とも言われるチェスは、日本での将棋・囲碁のような存在。ちょっと知っておくとコミュニケーションにも役立ちそう。

「将棋と違って復活できない」くらいの知識だったので、「歩」に当たる「ポーン」が斜めしか取れない、2コマ同時に動く謎ムーブキャスリング、コマが無いのに取れてしまうアンパッサンに驚く。


「chess viewer」
src on GitHub
対局した後、どうやったら勝てたのか、シンプルにふりかえりができるツール「chess-viewer」を作ってみました。さすが長年楽しまれているだけあって、棋譜のデータ形式(PGN)や、フレームワークなどもいろいろあって便利。

chess.jsが、チェスのルールをJavaScriptで記述してくれていて、chessboard-elementはHTML拡張タグでいい感じのチェスボードを表示してくれるので、組み合わせるとチェスに関するアプリが簡単に実装できます。

例えば、コンソールで交互にランダムに打ち合うチェスプログラムはこんな感じ。 import { Chess } from "https://taisukef.github.io/chess.js/chess.js"; import { rnd } from "https://js.sabae.cc/rnd.js"; const chess = new Chess(); while (!chess.game_over()) { const moves = chess.moves(); chess.move(moves[rnd(moves.length)]); console.log(chess.ascii()); } console.log(chess.pgn()) movesから良さそうな手を考えるコードを書けば、コンピューター対戦できますね。AI同士の対戦もコード量や、命令使用量、メモリ使用量などで制限すると熱いかも!

それぞれESモジュールとしてちょっと整えて、HTMLファイル1つで作成。ネットワークが無いところでも使えるように、使用するライブラリを imports.js などでまとめて、deno bundle しておくと便利。更にJavaScriptの最小化&難読化ツール terser を使って圧縮しておくと読み込みが早くなって良さそうです。

deno bundle imports.js | terser -c -m --module > imports.min.js

手紙を使って将棋をする話を聞いたことがありましたが、チェスでも「通信チェス」という文化もあるんですね!伝書鳩を使った例とかすごい!日米スパコンを使った究極対決とかやってみてほしいです。

Tweet
クリエイティブ・コモンズ・ライセンス
本ブログの記事や写真は「Creative Commons — CC BY 4.0」の下に提供します。記事内で紹介するプログラムや作品は、それぞれに記載されたライセンスを参照ください。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / 「一日一創」画像 / RSS