見出し画像

VBA・マクロ開発経験者がGAS(Google Apps Script)をさわってみる 3

Googleスプレッドシート・GASでじゃんけんマシンを作成してみよう、
ということで、前回はGAS操作と必要機能・コーディング検証を
しました。

(前回分はこちら↓)

今回はそれぞれの機能を実装し、一旦完成させてみます。

■画面全体として

■Function全体として

■ログ出力・初期処理等・開始・終了メッセージ表示機能

Logger.log('処理開始');
Browser.msgBox("じゃんけん開始!")

const activeSpreadSheet = SpreadsheetApp.getActiveSpreadsheet(); // 現在のSpreadSheetを取得

/*-------------------------------*/

Browser.msgBox("じゃんけん終了!")
Logger.log('処理終了');

 このFunctionが動作した確認として、システム上の
 開始・終了メッセージをログに出力します。
 また、画面側にもじゃんけんの開始終了メッセージを表示して、
 利用者にガイダンスします。

 シート・セルへの値セット・ゲットをたびたび使用するので、
 スプレットシートオブジェクトは予め初期処理として用意しておきます。

■じゃんけん選択手の情報取得

//選択した手の情報を取得
let mySelectMoji = activeSpreadSheet.getSheetByName('シート4').getRange("H4").getValue()
let mySelect = 0;

Logger.log(mySelectMoji);

if (mySelectMoji == "グー" ) {
  mySelect = 0;
} else if (mySelectMoji == "パー" ){
  mySelect = 1;
} else {
  mySelect = 2;
}

Logger.log(mySelect);

 "出す手を選択してください"リストボックスの値を取得します。
 リストボックスはシート名が"シート4"のシート、セル位置が"H4"に
 ありますので、当該シート・セル位置を指定してgetValue()関数から
 取得します。

 取得後に、マシン側の選択手と比較するために
 それぞれ数値化しておきます(グー:0,パー:1,チョキ:2) 

 (※リストボックスのインデックス値とかとれないもんですかね?
  とれれば上記のようなダサい分岐と数値化はする必要はないんですが)

■じゃんけんマシンの選択手の決定・画面表示

//マシン側の手の情報を取得
//乱数値をrandom関数で取得し数値によって手を決定する
let rand = Math.random();
let jkSelect;

Logger.log(rand);
Logger.log(Math.floor( rand * 3)); //0-1の間の値に3掛けして小数点切り捨てると0~2の3パターンを値が均一に取れる
  
jkSelect = Math.floor( rand * 3)

//マシン側の手の情報を画面に表示
let jkSelectMoji;
 
if (jkSelect == 0 ) {
  jkSelectMoji = "グー";
} else if (jkSelect == 1 ){
  jkSelectMoji = "パー";
} else {
  jkSelectMoji = "チョキ";
}

activeSpreadSheet.getSheets()[3].getRange("B6").setValue(jkSelectMoji)

 マシン側のじゃんけん手を決定するため、ランダム値を
 random()関数から取得します。
 random()関数は0~1の間(例:0.987654 等)の値が実行毎に無作為に
 取得できるので、取得値に3を掛けて小数点を切り捨てる(floor()関数で
 切り捨て)と0~2の3パターンの値がランダムに取得できることに
 なります。

 取得後に、マシン側の選択手を画面表示するために、
 それぞれ文字列化しておきます(グー:0,パー:1,チョキ:2) 

 文字列値をマシン側"じゃんけんっ!!"セルへセットします。
 セルはシート名が"シート4"のシート、セル位置が"B6"にありますので、
 当該シート・セル位置を指定してsetValue()関数でセットします。

■勝ち・負け・あいこ判定

//勝ち・負け・あいこ判定
let result;

//勝ちパターン
if ((mySelect == 0 && jkSelect == 2) || (mySelect == 1 && jkSelect == 0) || (mySelect == 2 && jkSelect == 1)) { 
  result = "勝ちっ!"
//負けパターン
} else if ((mySelect == 0 && jkSelect == 1) || (mySelect == 1 && jkSelect == 2) || (mySelect == 2 && jkSelect == 0)) {
  result = "負けっ!"
//あいこパターン
} else {
  result = "あいこっ!"
}

Logger.log(result);

 それぞれの選択手の値を比較して勝敗を判定します。
 勝ちパターンはグー、チョキ、パーでそれぞれ1ケースの計3ケース、
 負けパターンはその逆になり、同じく計3ケース、
 あいこパターンはそれ以外となるので、それぞれ条件分岐して
 結果文字列を設定します。 

■判定結果画面表示

//勝ち・負け・あいこを画面に表示
activeSpreadSheet.getSheets()[3].getRange("H20").setValue(result)

 結果文字列値を"結果"セルへセットします。
 セルはシート名が"シート4"のシート、セル位置が"H20"にありますので、
 当該シート・セル位置を指定してsetValue()関数でセットします。


これでじゃんけん開始ボタンが押された時に、このFunctionが実行され、
選んだ選択手によって勝敗がランダムで決定するマシンが
一旦完成しました。
思った以上にVBAライクにサクサク作ることができました。

今回はここまでにします。
今後はこの作成物を元にして演出面やそれに伴うロジックの
調査・確認を続けていこうと思います。


この記事が気に入ったらサポートをしてみませんか?