Created
October 10, 2020 13:51
-
-
Save gamebox777/e5a5fe6df42c79314a8f055a201be62e to your computer and use it in GitHub Desktop.
GASのガチャプログラム
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // | |
| //グローバル変数 | |
| // | |
| //メモ: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) | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment