mazinlabsのブログ

RubyとかCloudとかその辺の記事を書いたり書かなかったり

DevQuiz - Web Game

前回に引き続きDevQuiz。
今回はWeb Gameを見せられる&高速化させたコードを晒してく。

// 色を記憶する連想配列を作成
hash  = {}

// カードの枚数分だけめくる
cards = document.getElementsByTagName("td").length;
for(var i = 0; i < cards; i++){
  var element = document.getElementById('card'+i);

  if (element != null) {
    // カードをめくるためのマウスイベントを設定
    var myevent = document.createEvent('MouseEvents');
    myevent.initEvent('click', false, true);
    element.dispatchEvent(myevent);

    color = element.style.backgroundColor;
    if(hash[color] == null){
      // カードの色が連想配列になければ色をKeyにしてカードidを格納する
      hash[color] = i;

      // 1枚目のカードを開いた時点でペアを作れなかったので、
      // 次のカードをめくり、色を連想配列に格納せずに次の操作へと移行する
      var target = document.getElementById('card'+(i+1));
      target.dispatchEvent(myevent);
    }else{
      // カードの色が連想配列にあればそのカードを開いてペアを作成する
      var target = document.getElementById('card'+hash[color]);
      target.dispatchEvent(myevent);
    }
  }
}

このコードの変えたら60番台の問題も速攻で終わった。
連想配列バンザイ!