ランダム数値を使ってちょっとしたゲームを作ってみる:「繰り返し」「条件」をつかった事例【GAS】【Googleスプレッドシート】
今回も、基本はgetRange,getValue,setValueと繰り返し・条件です。
乱数を組み合わせることで指定したプログラムに偶然性を組み込むことで、ゲームのようになるので、そんなコードを書いてみました。
ゲームのルール
1.「A3」に初期設定で「1」の値が入っている
2.ボタンを押すと、上か下に移動する。値は「2」に変わる
3.繰り返しボタンを押す
4.結果:上にフレームアウトすれば「OK」・下にフレームアウトすれば
上下にランダムで移動するコード
function game(){
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var data =sheet.getRange(1,4,1,1).getValue();
var random = Math.floor( Math.random() * 2 ) + 1;
if (random == 1){
var step = -1
}else{var step = 1}
for(y=1;y<=5;y++){
var value = sheet.getRange(y,1,1,1).getValue();
if(value == data){
Logger.log(y)
sheet.getRange(y,1,1,1).setValue("");
sheet.getRange(y+step,1,1,1).setValue(data+1);
sheet.getRange(1,4,1,1).setValue(data+1);
}
}
}
解説です
Math.floor( Math.random() * 2 ) + 1;
これはJavaScriptの書き方なのですが、GoogleAppsScriptでも同じように記載できます。
1.Math.random() ⇒0-1未満の乱数を発生
2.Math.random() * 2 ⇒0-2未満の乱数を発生
3.Math.floor(Math.random() * 2) ⇒小数点以下を切り捨てて、0-1の整数にする
4.Math.floor(Math.random() * 2) + 1 ⇒ 1を足して、1-2の整数にする
これで、1か2の結果が出ますので、それぞれ+1、ー1に対応させることができます。
これで、このスクリプトを繰り返すたびに、上に行ったり下に行ったりするゲームになります。
このままでは範囲の外に出たときにエラーになる。
しかしこのままでは、ゴールになったとき、エラーになります。
数値が「A1」にあるときに、「-1」にいどうするという指示が出てしまうと、GoogleAppsScript上、範囲がなくなってしまうのでエラーになってしまいます。
今回、範囲を限定しているので、
条件的分で対応しましょう。
if(y+step<=0)
{Browser.msgBox("OK") }
else if( 6 <= y+step )
{ Browser.msgBox("負け") }
else {
sheet.getRange(y,1,1,1).setValue("");
sheet.getRange(y+step,1,1,1).setValue(data+1);
sheet.getRange(1,4,1,1).setValue(data+1);
}
次の行数=y+step がどうなるかで対応を変える
1.次が「0」
2.次が「6」
⇒ この二つは、指定の枠から出るということになります。
それぞれ、OK・負けと表示するスクリプトにしました。
3.それ以外
次が1~5になる場合です。先ほど記載した条件で次に進んでもらいます。
完成したコードです。
function game(){
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var data =sheet.getRange(1,4,1,1).getValue();
var random = Math.floor( Math.random() * 2 ) + 1;
if (random == 1){
var step = -1
}else{var step = 1}
for(y=1;y<=5;y++){
var value = sheet.getRange(y,1,1,1).getValue();
if(value == data){
if(y+step<=0)
{Browser.msgBox("OK") }
else if( 6 <= y+step )
{ Browser.msgBox("負け") }
else {
sheet.getRange(y,1,1,1).setValue("");
sheet.getRange(y+step,1,1,1).setValue(data+1);
sheet.getRange(1,4,1,1).setValue(data+1);
}}}}
最後、起動ボタンに割り当てる
こちらの記事をご参考ください。
まとめ
タイトルとしてはゲームとしましたが、すごい楽しい感動があるものではありません。少しの+αで基本からの発展につながる事例でした!
今回のシートの共有です。
https://docs.google.com/spreadsheets/d/1kNGj_OJ3D2LmCAbhMDBjLzGygmQ10RwNYb5bsPhccoY/edit#gid=804366251
どんな記事ならサポートしてみようと思えるか、ご要望ありましたら教えてくださいね。