Monthly Archives: 4月 2009

2009-04-13 ,

JavaScript倉庫番の問題を作る

というわけで、一応動くようになったわけですが、別に倉庫番がやりたかったわけではなくて、倉庫番の問題を作りたかったんですね。倉庫番の問題というのはどうやって作るのか。どんな問題が良くて、どんな問題が良くないのか。

とりあえず一番単純なの。プレイは枠内をクリック。

########
#O B @ #
########

単純すぎ。

適当に五つほど箱を置いてみた。

##############
#OO   #   OOO#
####  B  #   #
#  #  ###  B##
# B#   #     #
#    @ #  #  #
#  ### #B #B #
#         #  #
##############

うーん、クリア不可能だ(と思う)。あと、やはり単純というか、すぐに結果が見えてしまうところも気になる。

ここで、最初から作り直すか、それとも、修正してみるか。

##############
#OO   #   OOO#
# ##  B  #   #
#  #  ###  B##
# B#   #     #
#    @    #  #
#  ### #B #B #
#         #  #
##############

クリアできるように修正してみた。壁に一つ穴を開けてはプレイしてクリアできるかどうか考えた。二つ開けて箱を動かしながら少し考えた時点でクリアできることに気がついた。気がつくとちょっと嬉しい。意外と難しくね?

というわけで、今日発見した制作メソッド。

  1. 適当に配置してクリアできない状況を作る。
  2. 任意の考慮時間N[秒]を決める。
  3. 壁に穴を一つ開ける。
  4. クリアできるかどうか、N秒間考える。
  5. N秒経ってもクリアできなければ3へ。
  6. クリアできたら難易度N[秒]の問題(俺基準)が完成。
2009-04-10 ,

JavaScript倉庫番

もはやIEのことは全く考えておりません。

上のテキスト領域はキーフォーカス固定用。他に良い方法が分からなかったので仕方なく。

2009-04-07

メンバ関数の特殊化

template<typename PixelType>
struct Processor
{
    static void proc(PixelType *p)
    {
        proc_inner<PixelType::HAS_COLOR>(p);
    }
private:
    template<bool SUPPORTED_TYPE>
    static void proc_inner(PixelType *p)
    {
        // Do not anything.
    }

    template<> // Error
    static void proc_inner<true>(PixelType *p)
    {
		p->setRGB(1,0,0);
    }
};

げー、これって二重の意味で規格違反だったのね。VCでは通るから自然に使ってた。クラススコープでtemplate<>と書けない(C++03 14.7.3)のと、外側のクラステンプレートを明示的に特殊化せずに、それに囲まれたクラスメンバテンプレートを明示的に特殊化してはならない(C++03 14.7.3/18)のと。

入れ子クラスの部分特殊化はできるのか……。うーん、面倒くさい。

2009-04-04

JavaScriptインタラクティブコンソールIE対応

一応IEでも動くようにしてみた。やっぱりIEでも動かないと、ブラウザ間のちょっとした違いを確認したいときに不便だったので。

with(結果フレームオブジェクト){eval(ソース);}でやったら、Operaだと動かなかった気がしたんだけど、今やったら動くなぁ。うーん、一つにしても良さそうだけど、念のため、場合分けしておくか。