りんご
みかん
めろん
すいか
いちご
さかな
さくら
からす
もみじ
まぐろ
しゃけ
いくら
くじら
いるか
らくだ
こあら
さんま
きつね
たぬき
ねずみ
きりん
きのこ
てがみ
つくえ
たまごやき
じどうしゃ
じてんしゃ
ぴーまん
じゃがいも
さつまいも
おんせん
ましゅまろ
えんぴつ
けしごむ
じしゃく
こくばん
しゃしん
にんげん
ちょこれーと
とうもろこし
とうがらし
かれーらいす
ぶろっこりー
にんじん
おうさま
おひめさま
すてーき
やきにく
ありがとう
どらごん
ものほしざお
れいぞうこ
そうじき
えあこん
ぱそこん
きーぼーど
いんたーねっと
だうんろーど
しんじつ
うそはっぴゃく
いちげきひっさつ
おにいちゃん
せいてんのへきれき
ねこふんじゃった
さるのこしかけ
こーひーぎゅうにゅう
てぃっしゅぺーぱー
がいどぶっく
こたつふとん
じかんていし
でんしゃ
おんどけい
いぬもあるけばぼうにあたる
ぶたにもしんじゅ
うまのみみにもねんぶつ
あたまかくしてしりかくさず
いそがばまわれ
おににかなぼう
さるもきからおちる
つきとすっぽん
ぜんはいそげ
とうだいもとくらし
なきっつらにはち
ねこにこばん
りんご
みかん
めろん
れもん
すいか
いちご
さかな
さくら
もみじ
かえで
からす
ひよこ
すずめ
つばめ
さかな
まぐろ
しゃけ
いくら
くじら
いるか
らくだ
こあら
さんま
さらだ
わかめ
こんぶ
とうふ
ばなな
きつね
ぱんだ
たぬき
ねずみ
きりん
きのこ
とびら
かがみ
てがみ
かめら
かばん
つくえ
はさみ
らじお
くるま
ばいく
あにめ
まんが
くすり
じごく
やかん
たんす
こたつ
ふとん
もうふ
といれ
ぴあの
ぎたー
どらむ
まほう
ひかり
ほのお
こおり
まくら
ますく
めがね
よろい
ぱずる
ぎんが
おうごん
ぷらちな
がっこう
かみなり
ふみきり
てつどう
あきかん
さいころ
おにぎり
たんぽぽ
ぴーまん
らーめん
きゃべつ
かぼちゃ
たまねぎ
はくさい
やきそば
さばみそ
しいたけ
すてーき
ぶたにく
やきにく
からあげ
とんかつ
ころっけ
はちみつ
まっちゃ
すずらん
らいおん
ばくだん
おるがん
ふるーと
わりばし
てぶくろ
ろぼっと
がらくた
おんせん
にわとり
えんぴつ
けしごむ
ひまわり
じしゃく
てぶくろ
こくばん
しゃしん
あいろん
すりっぱ
どんぶり
かいだん
にんげん
どうぶつ
すぷーん
ふぉーく
みそしる
くしゃみ
こむぎこ
こしょう
かみのけ
にんじん
おうさま
でんしゃ
おはよう
おやすみ
あしあと
どらごん
とんかち
そうじき
りもこん
ひこうき
えあこん
ぱそこん
しんじつ
ゆうれい
さっかー
やきゅう
ちきゅう
うちゅう
とうがらし
たらばがに
びすけっと
ましゅまろ
たまごやき
じどうしゃ
じてんしゃ
すべりだい
じゃがいも
さつまいも
ちゃーはん
はんばーぐ
ふらいぱん
にんぎょう
がむてーぷ
ころしあむ
おんどけい
ぴーなっつ
だんぼーる
せんぷうき
きーぼーど
おひめさま
かぶとむし
ありがとう
れいぞうこ
たからばこ
ゆきだるま
ぴらみっど
ぎゅうにゅう
ちゅーりっぷ
ちょこれーと
とうもろこし
ちょきんばこ
さんどいっち
あすれちっく
ぽてとさらだ
かれーらいす
ぶろっこりー
ほうれんそう
さやえんどう
すぱげってぃ
きょうりゅう
ものほしざお
だうんろーど
だいやもんど
がいどぶっく
あこーでぃおん
びにーるぶくろ
いんたーねっと
うそはっぴゃく
いっせきにちょう
いちげきひっさつ
きそうてんがい
せいてんのへきれき
ねこふんじゃった
さるのこしかけ
こーひーぎゅうにゅう
てぃっしゅぺーぱー
いぬもあるけばぼうにあたる
ろんよりしょうこ
はなよりだんご
ちりもつもればやまとなる
たびはみちづれよはなさけ
らくあればくあり
うそからでたまこと
しらぬがほとけ
みからでたさび
ぶたにもしんじゅ
うまのみみにもねんぶつ
あたまかくしてしりかくさず
いそがばまわれ
おににかなぼう
さるもきからおちる
つきとすっぽん
ぜんはいそげ
はるはあけぼの
とうだいもとくらし
なきっつらにはち
ねこにこばん
ぎょふのり
ふくすいぼんにかえらず
へそでちゃをわかす
view source

JavaScript

document.title = 'バラバラことば 並び替えクイズ  アナグラムパズル';

document.oncontextmenu = function () {return false;}

$(function(){
  let clearCount = 0;
  let aryOrg = [];

  let $h1 = $('<h1>').text(document.title);
  let $p = $('<p>').text('パネルを入れ替えて元の言葉をつくろう');
  $('#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);

  function setItems(){
    $panels.empty();
    $btns.empty();
    $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 = [];
    let max = 3;
    if(aryOrg.length < max){max = aryOrg.length;}
    for(let i=0;i<max;i++){
      let item = itemAry.pop();
      items.push(item);
      charAry = charAry.concat(item.split(''));
    }
    console.log(items);
    charAry = _.shuffle(charAry);
    let j = 0;
    items.forEach(function(v){
      let item = v;
      let $item = $('<ul>');
      $panels.append($item);
      item.split('').forEach(function(t){
        $i = $('<li>').text(charAry[j]);
        $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($('.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);
       itemText = $('#items').text();
       aryOrg = itemText.split('\n');
      }
    }
  }

  //let itemText = $('#items').text();
  //let aryOrg = itemText.split('\n');
  //aryOrg.pop();

  let search = location.search.substring(1);
  if(search){
    aryOrg = decodeURI(search).split(',');
  }
  let key = getURLKEY();
  if(key){
    key = decodeURI(key);
    aryOrg = key.split(',');
   }


  if(!aryOrg.length){
    $.get('/csv/kana.txt', function(data){
      aryOrg = data.split('\n');
      aryOrg.pop();
      ary = _.shuffle(aryOrg);
      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 0;
  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;
}
.ok li{
  background-color:#afa;
}

b{
  display:block;
  margin:8px auto;
}
#btns{
  height:80px;
}
button{
  display:block;
  margin:8px auto;
  padding:24px;
}

HTML

ページのソースを表示 : Ctrl+U , DevTools : F12

view-source:https://hi0a.com/demo/-js/js-game-text-anagram/

ABOUT

hi0a.com 「ひまアプリ」は無料で遊べるミニゲームや便利ツールを公開しています。

プログラミング言語の動作デモやWEBデザイン、ソースコード、フロントエンド等の開発者のための技術を公開しています。

必要な機能の関数をコピペ利用したり勉強に活用できます。

プログラムの動作サンプル結果は画面上部に出力表示されています。

環境:最新のブラウザ GoogleChrome / Windows / Android / iPhone 等の端末で動作確認しています。

画像素材や音素材は半分自作でフリー素材配布サイトも利用しています。LINK参照。

動く便利なものが好きなだけで技術自体に興味はないのでコードは汚いです。

途中放置や実験状態、仕様変更、API廃止等で動かないページもあります。