Google Chrome アプリケーション に スプレッドシート があります。
知らない、触ったことのない方は、Excel のWeb版の簡易版的なアプリケーションを想像して下さい。
小中学校で配布されているパソコン、ChromeBook、その中のアプリケーションでもあるスプレッドシート、プログラミミングに興味を持つ子ならば、ブロックを重ねて動かすプログラミング以上のことまで、環境を変えることなくできるスクリプトで作っても面白いかな?
そんな発想もあり、作ってみました。
このスプレッドシートは、Excelのマクロの代わりに、スクリプトと呼ばれるコードが記述できます。
Excelと同様に、操作記録を記録しコーディングしてくれますので、試しに記録して、そこから編集する流れも可能です。😸
脳トレ問題の中に、1文字だけ違う文字を探せ!!
みたいなのがありますが、Excelやこのスプレッドシートでも作ることが出来ないのかな?
との思いから、、、作ってみました。
作成したのはこんな感じの問題
数パターンの組み合わせで、毎回違う場所、ランダムな位置に違う文字を出す。
また、探し出すのに要した時間を出すようにしてみました。
「スタート」ボタンを押下で、問題を表示する
この分部の仕組み、流れは?
- 問題を決める。
- この問題も数パターンの中からランダムに選ばれるようにする
- 1文字だけ違う文字の場所を決める。行、列の位置決めもランダムに出るようにする。
- 10行×10列に文字を配置する。
- 開始時間、違う文字の位置を保存する。
といった感じです。
コードはこんな感じに・・・
let startTime; let posRow; let posCol; let spreadsheet = SpreadsheetApp.getActive(); let q, ansN, ansD; // 入力シート let inshert = spreadsheet.setActiveSheet(spreadsheet.getSheetByName('仲間外れ'), true); startTime = new Date(); q = Math.floor(Math.random()*5 ); posRow = Math.floor(Math.random()*9 ); posCol = Math.floor(Math.random()*9 ); switch (q) { case 0: ansN = "B"; ansD = "P"; break; case 1: ansN = "例"; ansD = "列"; break; case 2: ansN = "Q"; ansD = "O"; break; case 3: ansN = "5"; ansD = "S"; break; default: ansN = "力"; ansD = "刀"; break; } for(var r = 0; r< 10 ; r++){ for(var c=0; c<10; c++){ inshert.getRange( r+2, c+2 ).setFontColor("#000000"); if(r==posRow && c==posCol){ inshert.getRange(r+2,c+2).setValue(ansD); }else{ inshert.getRange(r+2,c+2).setValue(ansN); } } } inshert.getRange('M3').setValue(posRow); inshert.getRange('M4').setValue(startTime); inshert.getRange('M5').setValue(posCol); inshert.getRange('M6').setValue(startTime);
プログラミングコードの説明は、省略しますので、時間がある時にでも、調べて下さいネ♪
ランダムな位置に出すには?
Math.random関数を使って、問題と違う文字の表示位置を実行都度取得するようにしました。
この関数の使い方について詳しくは、述べませんが、興味があれば調べて使って見て下さい。
また、条件分岐として、Switch 文、If文と使い分けしております。
Switch文を使うと、問題の追加時が、楽ですから、、、、
ボタンの背面の箇所を使って、値の保存をしています。😓
こんな隠し技?もあります。
「回答」ボタン押下で、違う文字に色を付け、時間を表示する
コーディングしたのは、こんな感じです。
let endTime; let posRow; let posCol; endTime = new Date(); let spreadsheet = SpreadsheetApp.getActive(); let inshert = spreadsheet.setActiveSheet(spreadsheet.getSheetByName('仲間外れ'), true); posRow = inshert.getRange('M3').getValue(); posCol = inshert.getRange('M5').getValue(); inshert.getRange('M6').setValue(endTime); inshert.getRange( posRow+2, posCol+2 ).setFontColor("#ff0000");
公開しているプログラミングコードは、参考であり、この通りに作らないとダメではありません。
当然、このような方法よりも、もっとよいコーディング例は、たくさんあることでしょうし、自分で考えられるかも知れません。
Google スプレッドシートで、こんなことも出来ますよ~といった事例として書いております。
色を変えるには?
違う文字の色を赤にしています。
赤くするので、問題生成時に、おなじ色に設定する処理を追加しています。
このために、1文字違う文字を出す位置を覚えておくといった処理にしています。
開始した時間と「回答」を押下した時間の差(引き算)でタイムを計算しています。
こちらは、セルに計算式をあらかじめ埋め込んでいます。
最後に
最後に、「回答」時に、正誤を判断する仕組みもありかと思いますが、(現在のアクティブな場所と正解の位置などで)そこまでする必要もないかと思い組込んでいません。
改良の可能性を持たせていますので、追加機能を組み込んで見て下さい♪