[ペチパーの大冒険] ゲーム制作#18「Javascript直接書ける君」

2025/02/14

ゲーム 開発

t f B! P L
eyecatch プログラミングの問題を考えている時に、実際にそれの解答を試すために、ブラウザのデバッグコンソールを立ち上げて打ち込んでいるのだけれど、なんか面倒い! きっと、このブログを読んでくれている人が、その問題にチャレンジするときは、もっと「めんどくさ〜!!!」と思っているに違いありません。 というワケで、その場でJavascriptのコードが書けて、確かめられる「Javascript直接書ける君(仮)」というダッサダサの名前のツールを作ってみようと思います。 もちろん、セキュリティも考慮してあるモノにするので、違った開発視点での参考にもしてもらえると思いますよ。

タグに書かれたJavascriptを実行

プログラムを書いて、それを反映するには、formタグが適しているので、改行も入力できる、textareaタグを使うのが一般的です。

textarea方式

ソースコード <textarea class="input"></textarea> <style> .input{ width:100%; height:150px; border:1px solid black; border-radius:5px; padding:10px; } </style>

contentEditable方式

HTML5では、フォーム系のタグ以外でも文字の入力が可能になっています。(知ってますか?) ソースコード <div class="input" contentEditable="true"></div> <style> div.input:empty::before{ content : "* DIVタグ"; font-size:0.8em; color:#999; } div.input{ overflow:auto; } </style>
cssの擬似要素を組み合わせると、placeholderっぽくもできてしまいます。

どっちがいいんだい?

別にどっちを使ってもいいと思います。(なんじゃそりゃ) 入力フォームの不正アクセスなどを防止したい場合は、contentEditableは効果があるかもしれませんね。

Javascript直接書ける君(デモ)

答えに「2つの変数の和」を返す問題のサンプル。

変数:Aと変数Bの和(合計)を返す関数、「addition」を完成させてください。(A,Bは、それぞれ乱数値が入ります)

ソースコード

html

<textarea class="input" name="sample_1">function addition(A,B){ return }</textarea><button type="button" name="sample_1">解凍</button>

css

button{ padding:5px 20px; border:0; background-color:black; color:white; border-radius:5px; cursor:pointer; } button:hover{ opacity:0.5; }

javascript

function clicl_sample_1(){ const text = document.querySelector(`textarea[name="sample_1"]`).value const A = Math.floor(Math.random() * 10) const B = Math.floor(Math.random() * 10) const res = Function("A,B", ` try{ ${text} return addition(A,B) } catch(e){ return "プログラムにミスがあります。" } `)(A,B) if(A+B === res){ alert(`正解 : A:${A},B:${B},結果:${res}`) } else{ alert(`間違い : A:${A},B:${B},結果:${res}`) } } document.querySelector(`button[name="sample_1"]`).addEventListener("click", clicl_sample_1)

あとがき

eval()関数を使わずに、Functionを使った判定にすることで、表示しているページとは切り離した、仮想環境でのプログラム実行をするようにしています。 もちろん、try~catchで、ある程度のプログラムエラーは拾うようにしていますが、 構文間違いなどの場合は、JSエラーが出て、プログラムが止まってしまいます。 プログラム文字列の構文チェッカー機能などをつけるとできるようになるかもしれませんが、ちょっと難易度が上がるので、その辺は別機会に考えたいと思います。 とにかく、この仕組みを使って、今後プログラミング謎解きやクイズを量産していき、ブログに掲載したいと思います。

人気の投稿

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。

ブログ アーカイブ