バレンタインチョコ欲しい!

バレンタインチョコ欲しい!

いまさらながらこのゲームほしいですよ。

Magic Bitboard

秋にある某大会へ向け、mini shogiのプログラムを作り始めていて、データ構造にbitboardを用いる予定。将棋やチェスでbitboardを用いると、rookやbishopの様な、ある方向への連続した駒の利きを持つ駒の移動可能先を求める手段が問題となるらしく、コンピュータチェス界では様々な解決方法が提案されている模様*1

恐らくcom将棋で実際に使われてる方法はほとんどrotated bitboardなのでしょうが、どうやらmagic bitboardという方法の方が速度的に有利らしいので頑張って実装してみようかと思います。

実装に使うmagic numberという謎の数字を、乱数でひたすらtry and errorしながら見つけ出す作業をしないといけなという凄まじい世界らしいです。

magic numberの探し方と、magic bitboardの実装のサンプルコード

追伸:
前回リンクだけ貼りまくったCDのうち2枚ほどかいました。タワレコオンラインで調べたらどちらも1400円ぐらいだったので。Pantha du princeのBlack Noiseがすごく良いです。

Black Noise

Black Noise

Tarot Sport (Dig)

Tarot Sport (Dig)

欲しいCDリスト

プログラミングとは一切関係ないけど、欲しいCDのリストをまとめる。
最近そこそこ忙しい上にお金が無いのであとで買うために。

Into The Great Wide Yonder (lim.ed. Dvd)

Into The Great Wide Yonder (lim.ed. Dvd)

Tarot Sport (Dig)

Tarot Sport (Dig)

Black Noise

Black Noise

Where You Go I Go (Bonus CD) (Spec)

Where You Go I Go (Bonus CD) (Spec)

Angles Without Edges

Angles Without Edges

ZODIAC

ZODIAC

Ocean Eyes

Ocean Eyes

時空の彼方へ-スペシャル・エディション- 【初回生産限定盤】

時空の彼方へ-スペシャル・エディション- 【初回生産限定盤】

Continent

Continent

100 Days 100 Nights (Dig)

100 Days 100 Nights (Dig)

プログラム書きたいのだけど前期中はちょっと忙しくて
隙間時間に少しずついじる程度で終わるかも・・・。

git

以下のページを参考に自宅のサーバーにgitのリポジトリを作成。
前にsubversionを自宅においてたけど、OSがクラッシュして以来、全くソースコード管理してない状態でkiftwiを作成してたので、そろそろコードをバージョン管理したい。

次はRailsのアプリのデプロイのためにCapistranoを導入してみる。

CSS3+Javascriptでテキストベースの将棋盤麺表示

Web上における将棋盤面の表示方法は今のところだいたい以下の4つ。

  1. Java/Flashなどの独立したリッチなアプリケーション(動的)
  2. 駒画像+Javascriptを利用したアプリケーション(動的)
  3. 棋泉やKifu For Windowsを利用して生成した画像(静的)
  4. CSA、KI2形式などのテキスト表示(静的)


このうち、1はよく棋戦のネット中継で使われてるし、2はfloodgateのjavascript将棋盤やNHK将棋トーナメントのサイトに使われているようなもので、3は棋戦のネット記事やBlogなどで見かける。普通の人は余り見かけることはないと思うが将棋プログラマーの人はよく知っているかと思う。
今回そのうちの1つとして今後加わるであろう方法を一つ記述しておく。それが、タイトルのCSS3+Javascriptによる表現。素人なので申し訳ないがCSS3についての詳細は詳しくは知らないけど、現状Webkitで実装されているブラウザ(GoogleChromeSafari)ではの-webkit-transformというプロパティを使うと文字や画像を書いてさせられるらしい。
将棋は盤上の駒がどちらの手番のものかを識別するために、自分の駒は自分基準の正位置になっているわけなので、それをWeb上で実現しようとすると今まででは反転させた駒の文字の画像や、識別子を使った後手の駒表現などをしなければならなかった。しかし、これを利用すれば、従来のように反転された駒を表示する際にわざわざ画像を使わずに全てテキストの1文字で表現出来ることになる。

使い方は

.reverse {
  -webkit-transform:rotate(180deg);
}
<span class="reverse"></span>

という感じで単位はdegで角度を使うらしい。これを対応しているブラウザで開けば飛車の飛という文字は逆さまに表示されるみたい。
今後CSS3でこれと同じようなものが正式に採用されればいいなと願うなど。先取り気味だけど、暇つぶしにテキストベースの将棋盤をJavascriptで作成して自己満足したい。これを使えばサクサクと将棋盤面でAmazonのCarousel UIみたいなことも出来たりしないかと思ったり。(一枚画像形式の盤面画像が予め用意されてればそれでも出来るけど画像は動的に生成するのが大変)


  • webkit-transformプロパティ自体は他にもいろいろ出来るらしく興味深い。

rotate(deg) 回転(deg で指定。30deg など)
rotateX(deg)
rotateY(deg) 横(縦)回転。-webkit-transform-style、-webkit-transform と組み合わせて使うことで 3D 的表現が可能。(deg で指定。30deg など)
scale(xy[x,y]) 拡大・縮小(数値を指定。1 や 0.5 など)
skew(deg) スキュー(シアー)(degで指定。30deg など)
translate(xy[x,y]) 移動(px で指定。30px など)
perspective(deg) 遠近感(数値で指定)


参考リンク:

各ブラウザで先行実装しているCSS3プロパティまとめ | CSS-EBLOG

*追記:Aptanaのプロジェクト漁っていたら昔作りかけていたjQuery製の将棋盤(棋譜再生用 Javascript 将棋盤を参考に作っていた)が見つかりました。んで、駒の表示だけいじって-webkit-transformしてみたらこんなん出来ました。Tableタグで盤面表現していて、フォントはブラウザから強制的に行書体を使用してSSをとりましたw反転しても文字は綺麗に表示できてるわ。

一つも画像は使っていません。(ブログでの↓の表示は画像ですが・・・)

たとえばCGIでサーバーからSFEN表記などで将棋の盤面を吐かせて、Javascript使ってブラウザ上で上記の様な盤面に変換させてやると(もしかしたら)おもしろいインターフェイスが作れるかもしれない。

Effective/Efficient C++を読書中

5五将棋のプログラムを作るため現在Effective/Efficient C++を読書中。
C++で作成するため。本当はC#使いたいのだけど、5五将棋に関してはC#ではカバーしきれないほど、実行速度が影響しそうなので仕方なくC++を使う予定です。
C++については現状、String型が便利なクラス付きCぐらいにしか思ってないので一から勉強します。

タイトルの本はどちらもまだチラ見程度ですが、

  • Efficient C++:C++の構文を使っていかに正しく間違いの無いプログラムを書けるか
  • Effective C++:C++の構文を使っていかに実行速度をCに近づけることが出来るか

という主題があるかと思います。
特に、C++オブジェクト指向的な使い方(classのnew delete)とかSTLの挙動とか、実行速度などが分かっていないので、どちらの本もすごい参考になりそうです。

あー論文の締め切りが月末にorz