記述日 2020/10/10
更新 2022/8/3 ソースコード見られなかったので貼り付け
GAS Google Apps Script
googleスプレッドシート
GAS&グーグルスプレッドシートでガチャプログラム書いてみた(スクリプトあり)
GAS(Google Apps Script)でプログラムを書いた事がなかったので(js javascriptも書いたことない)
学習&検証がてらガチャのプログラムを書いてみました。
GAS(JS)が初めてなので、いまいちなソースコードなんだろうけど、それにしても実行速度が遅い。
最適化はできるんだろうけど、GASでシミュレータ作るのは向いていないかな。
APP使用回数制限もあるし。
嫌いなVBAで書いてみるかな…
ソースコード
//
//グローバル変数
//
//メモ:getRange(row=行,column=列)
const spread = SpreadsheetApp.getActiveSpreadsheet();
//
//データ
//
const dataStartRow = 2 //データ開始行
const datasheet = spread.getSheetByName(“ガチャ01Data”) //データシート
const DataWeightColumn = 4 //重み列
let DataRangeProbability //確率Range取得用
var DataWeightRange;
var DataWeightValues;
let dataNum
//———-
//ガチャメイン
//———-
function FunctionGacya01() {
//ガチャ引く前の準備
GacyaDataProcessing()
//ガチャ引く
for(let i = 0;i < 100;i++){
GacyaOne(i)
}
}
//———————————
//データ処理
//———————————
function GacyaDataProcessing() {
var msgtmp
//データの数を取得 ※dataStartRow行目からデータ
//列1(A)の先頭行から下方向に取得する
var dataEndRow = datasheet.getRange(dataStartRow, 1).getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow();
Logger.log(`データ最終行 ${dataEndRow}`)
dataNum = (dataEndRow – dataStartRow + 1)
Logger.log(`データ数 ${dataNum}`)
//確率の行Range取得
DataRangeProbability = datasheet.getRange(dataStartRow,3,dataNum,1)
let values = DataRangeProbability.getValues() // returns string[][];
Logger.log(`values.length: ${values.length}`)
let goukei = 0; //確率合計
for(let i = 0;i < values.length;i++){
goukei += values[i] * 100
//Logger.log(`GASによるメッセージ: ${values}`);
}
Logger.log(`確率合計: ${goukei}`);
//重み計算用の一時データをセルに書き込み
var Probability = 0
for(let i = 0;i < values.length;i++){
Probability += (values[i] * 100)
datasheet.getRange(dataStartRow + i,DataWeightColumn).setValue(Probability)
}
//重みデータレンジを取得
DataWeightRange = datasheet.getRange( dataStartRow,DataWeightColumn,dataNum,1)
DataWeightValues = DataWeightRange.getValues() // returns string[][];
for(let i = 0;i < DataWeightValues.length;i++){
Logger.log(`DataWeightValues i:${i} values:${DataWeightValues[i]}`);
}
}
//———————————
//ガチャ引く
//———————————
function GacyaOne( no ) {
var rand = Math.floor(Math.random() * 100) + 1;
//Logger.log(`ランダム値: ${rand}`);
//Logger.log(`DataWeightRange: ${values.length}`);
datasheet.getRange( no+2,8 ).setValue(`ランダム値 ${rand}`)
for(let i = 0;i < DataWeightValues.length;i++){
//Logger.log(`範囲1: ${values[i]} 範囲2:${values[i+1]} `);
if( rand <= DataWeightValues[0] ){
GacyaDisp( no,0 )
}
else if( rand > DataWeightValues[i-1] && rand <= DataWeightValues[i] ){
//Logger.log(`範囲: ${i}`);
GacyaDisp( no,i )
}
}
//
//結果表示(シートに反映)
// rangeNo:重み範囲番号
function GacyaDisp( gacyano,rangeNo ){
//範囲からカードを取得
datasheet.getRange( gacyano+2,9 ).setValue(`範囲 ${rangeNo}`)
var name = datasheet.getRange( rangeNo+2,1 ).getValues() //カード名取得
//シートに出力
datasheet.getRange( gacyano+2,7 ).setValue(name)
}
}
検索用
ガチャ 重み スクリプト GAS js javascript javaスクリプト
コメント