読者です 読者をやめる 読者になる 読者になる

空から降ってくる女の子(ゲームっぽく)

JavaScript Code Golf

空から女の子が降ってくる - ぼくはまちちゃん!(Hatena)

id:murky-satyr先生 の http://gist.github.com/45346 を勉強目的に読んでたら、自分でも書きたくなってついやってしまった。すごく出遅れ感あるけど、折角なので公開。


これで 503 byte

オリジナルとの違い

  • なんとかIE6でも動く(はず)
  • 位置がpxではなく%
  • クリックしなくても一定時間で消える
  • クリックして消した時は+1、タイムアウトして消えた時は-1、それぞれステータスバーに反映される

よって、クリックすればポイントが上がって、放置してるとポイントが下がってしまう感じ。
ポイントを付けただけだが、「ゲーム」っぽくはなっているかなと思う。(ゲームっぽいという言い方は少し卑怯だが。。)

なお、当然だがステータスバーを弄るので、ステータスバーを変更できる設定でないとポイントが見えない。

嵌ったところ

  • IEはBookmarkletからdocument.titleを変更できない
    • 嵌った。。仕方なくステータスバーを使用することに。
  • Firefoxはdocument.titleやwindow.statusの変更に制限がある
    • document.title="hoge"はOKだが、var D=document;D.title="hoge"は動かない。statusも同様のようだ。違った(もうちょっと複雑な条件?)。でも動かない場合がある。これも嵌る。
  • 言うまでもないが、IE6の文字数制限。結局id:murky-satyr先生のコードを参考にさせて頂いてしまった。。

Tips(JS のコードを短かくする Tips - 冬通りに消え行く制服ガールは✖夢物語にリアルを求めない。 - subtechにないもの)

  • 最短のwindowオブジェクトはtop(フレーム内ではない場合)
  • new に引数を渡さない場合、()を省略可能 ( new Image() と new Image は同じ、まあ、これは改めて書くまでもないのかな)
  • Bookmarkletの終わりを void 0 にするより、何も返さないメソッドを呼ぶ( alert, scrollなど)
  • 引数を持たないメソッドにダミーの引数を渡して、式を書く(id:murky-satyr先生のコードより)
    • cloneNode(Y=99); など。これは、 cloneNode(true);Y=99; と実質は同じになる。
  • 近似のより桁の小さい値を使う (100ではなく99など)
  • 何種類かの数値を使う場合、変数を一つ用意して四則演算で使いまわす。
  • 代入と参照を一度に行う
    • (S=(E=(D=document).body.appendChild(document.createElement('div'))).style).position='fixed'; これで D=document, E=div要素, S=div要素のstyle となる

Tips2

id:murky-satyr先生 のコードより、

'left:'+(new Date&63)+'%'

乱数の代用品として、日付のシリアル値をビット演算している。変態っていう言葉はこういうときに使う。