あてはめことば あなうめクイズ
あてはめことば あなうめクイズ | ひまあそび-ミニゲーム hi0a.com
  view source
  JavaScript
  
document.title = 'あてはめことば あなうめクイズ';
document.oncontextmenu = function () {return false;}
$(function(){
  let clearCount = 0;
  let aryOrg = [];
  let kigouAryOrg = ['●','○','★','☆','◆','◇',];
  let textsOrg = 'あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをんー';
  let $h1 = $('<h1>').text(document.title);
  let $p = $('<p>').text('記号で隠された元の言葉をつくろう (濁点とかは無視OK)');
  $('#demo').append($h1).append($p);
  //console.log(aryOrg);
  let items = [];
  let charAry = [];
  let selectPanels = [];
  let $panels = $('<div>',{id:'panels'});
  let $btns = $('<div>',{id:'btns'});
  $('#demo').append($panels).append($btns);
  let key = getURLKEY();
  let $texts = $('<ul>',{id:'texts'});
  $panels.after($texts);
  textsOrg.split('').forEach(function(v,i){
    if(i> 0 && i % 15 === 0){
      $texts.append($('<br>'));
    }
    $i = $('<li>').text(v);
    $texts.append($i);
    $i.on('click', function(){
      let ele = $(this);
      let isFind = false;
      kigouAry.some(function(k){
        kk = convKana(k);
        if(v===kk){
          ele.addClass('ok');
          $('.item li[t="'+k+'"]').text(k);
          isFind = true;
          checkResult();
        }
      });
      if(!isFind){ele.addClass('ng');}
    });
  });
  $hint = $('<li>').text('☆ヒント').addClass('hint');
  $texts.append($hint);
  $hint.on('click', function(){
    $(this).addClass('y');
    $('#texts li').each(function(){
      let ele = $(this);
      let t = ele.text();
      kigouAry.forEach(function(k){
        kk = convKana(k);
        if(t===kk){
          ele.addClass('y');
        }
      });
      if(Math.random()*15<2){
        ele.addClass('y');
      }
    })
  });
  function convKana(t){
    t = t.normalize('NFD')[0];
    kanaConvAry = [
      ['っ', 'つ'],
      ['ゃ', 'や'],
      ['ゅ', 'ゆ'],
      ['ょ', 'よ'],
      ['ぁ', 'あ'],
      ['ぃ', 'い'],
      ['ぅ', 'う'],
      ['ぇ', 'え'],
      ['ぉ', 'お'],
      ['ゎ', 'わ'],
    ];
    kanaConvAry.forEach(function(k){
      t = t.replace(k[0],k[1]);
    });
    return t;
  }
  console.log(convKana('じ'));
  function setItems(){
    $panels.empty();
    $btns.empty();
    $texts.find('.y').removeClass('y');
    $texts.find('.ok').removeClass('ok');
    $texts.find('.ng').removeClass('ng');
    $panels.removeClass('clear');
    itemAry = _.clone(aryOrg);
    if(clearCount<5 && !key){
      var itemAry = _.filter(itemAry, function(v){
        return v.length < 6;
      });
    }
    itemAry = _.shuffle(itemAry);
    items = [];
    charAry = [];
    kigouAry = [];
    let max = 3;
    if(aryOrg.length < max){max = aryOrg.length;}
    var item = itemAry.pop();
    items.push(item);
    console.log(item);
    charAry = charAry.concat(item.split(''));
    console.log(charAry);
    kigouAry.push(charAry[0]);
    for(let i=0;i<itemAry.length;i++){
      item = itemAry.pop();
      charAry.some(function(c){
        //console.log(c);
        reg = new RegExp(c);
        if(item.match(reg)){
          console.log(item);
          items.push(item);
          charAry = charAry.concat(item.split(''));
          kigouAry.push(c);
          return true;
        }
      });
      if(items.length>2){break;}
    }
    console.log(items);
    //charAry = _.shuffle(charAry);
    let j = 0;
    console.log(kigouAry);
    j = 0;
    let blkCount = 0;
    items.forEach(function(v){
      let item = v;
      let $item = $('<ul>');
      $item.addClass('item')
      $panels.append($item);
      item.split('').forEach(function(t){
        $i = $('<li>').text(t);
        kigouAry.forEach(function(k,i){
          if(t === k){
            $i.text(kigouAryOrg[i]);
            $i.attr({t:t});
          }
        });
        if(!$i.is('[t]') && blkCount < 4 && item.length>3){
          if(Math.random()*9>6){
            $i.addClass('blk');
            blkCount++;
          }
        }
        $item.append($i);
        $i.on('click', function(){
          if($(this).parent().hasClass('ok')){return;}
          if(selectPanels.length){
            //changePanel(selectPanels[0], $(this));
            //checkResult();
          } else {
            //selectPanels.push($(this));
            //$(this).addClass('select');
          }
        });
        j++;
      })
    });
/*
    console.log(charAry);
    let len = charAry.length;
    $panels.addClass('ready');
    for(i=0;i<48;i++){
      let r = Math.floor(Math.random()*len);
      $('#panels li').eq(r).trigger('click');
    }
    $panels.removeClass('ready');
*/
    let encodeText = '';
    $('#panels ul').each(function(){
      encodeText += ',' + $(this).text();
    });
    //console.log(encodeText.substring(1))
  }
  function changePanel(a,b){
    let c = $('<li>');
    a.before(c);
    a.removeClass('select');
    b.after(a);
    c.after(b);
    c.remove();
    selectPanels = [];
  }
  function checkResult(){
    if($panels.hasClass('ready')){return;}
    if($panels.hasClass('clear')){return;}
    items.forEach(function(n){
      $('#panels ul').each(function(){
         let m = $(this).text();
         if(n===m){
            $(this).addClass('ok');
         }
      });
    });
    checkClear();
  }
  function checkClear(){
    if($('#panels .ok').length >= items.length){
      $btn = $('<button>').text('次の問題へ');
      $btn.on('click', function(){clearCount++;setItems();});
      $panels.addClass('clear');
      $btns.append($btn);
      if(clearCount===4){
        $b = $('<b>').text('次から長い単語や、ことわざも出てくるぞ!');
        $panels.append($b);
      }
      if(key && clearCount < 3){
        $b = $('<b>').text('特別指定問題クリア!もとのページにもどろう!');
        $panels.append($b);
       aryOrg = aryOrgCsv;
      }
    }
  }
  //let itemText = $('#items').text();
  //let aryOrg = itemText.split('\n');
  //aryOrg.pop();
  $.get('/csv/kana.txt', function(data){
    aryOrg = data.split('\n');
    aryOrg.pop();
    aryOrgCsv = aryOrg;
    ary = _.shuffle(aryOrg);
    let search = location.search.substring(1);
    if(search){
      aryOrg = decodeURI(search).split(',');
    }
    if(key){
      key = decodeURI(key);
      aryOrg = key.split(',');
    }
    setItems();
  });
  //setItems();
});
  CSS
  htbl,body{
  overflow:hidden;
}
#demo{
  display: grid;
  place-content: center;
  place-items: center;
  user-select:none;
}
#items{
  display:none;
}
ul{
  display:flex;
  margin:8px auto;
  max-width:100%;
}
li{
  display:inline-block;
  width:60px;
  height:60px;
  line-height:60px;
  text-align:center;
  border:2px solid #000;
  margin:1px;
  cursor:pointer;
}
@media screen and ( max-width:640px) {
li{width:32px;}
}
li:hover{
  background-color:#eee;
}
li.select{
  border:2px solid #f00;
}
li.blk{
  background-color:#000;
}
.ok li{
  background-color:#afa;
}
b{
  display:block;
  margin:8px auto;
}
#btns{
  height:80px;
}
button{
  display:block;
  margin:8px auto;
  padding:24px;
}
ul#texts{
  display:block;
  margin:8px 0;
  max-width:100%;
}
ul#texts li{
  display:inline-block;
  width:40px;
  height:40px;
  line-height:40px;
  font-size:13px;
}
ul#texts li.y{
  background-color:#ffa;
}
ul#texts li.ok{
  background-color:#afa;
}
ul#texts li.ng{
  background-color:#faa;
}
ul#texts li.hint{
  width:160px;
}
ul#texts li.hint.y{
  display:none;
}
  HTML
  
    ページのソースを表示 : Ctrl+U , DevTools : F12
    view-source:https://hi0a.com/game/game-text-kigou/
  
  ABOUT
  
    hi0a.com 「ひまあそび」は無料で遊べるミニゲームや便利ツールを公開しています。
    プログラミング言語の動作デモやWEBデザイン、ソースコード、フロントエンド等の開発者のための技術を公開しています。
    必要な機能の関数をコピペ利用したり勉強に活用できます。
    プログラムの動作サンプル結果は画面上部に出力表示されています。
    環境:最新のブラウザ GoogleChrome / Windows / Android / iPhone 等の端末で動作確認しています。
    画像素材や音素材は半分自作でフリー素材配布サイトも利用しています。LINK参照。
    仕様変更、API廃止等、実験途中で動かないページもあります。