
この「GASではじめるプログラミング(後編)」の土台となるゲームブックについて、前編でつくった機能を再確認します。また、講師の紹介、コーストの特徴などを知ることができます。
GAS の公式リファレンスサイトの使い方について、簡単に押さえておきましょう。GAS のプログラミングでは、リファレンスで、クラスやメソッドの使い方を押さえながら学習することが、長い目で見たらとても大切で力になります。※初級編(前編)で学習済みの方はスキップして下さい。
この後編で作っていくゲームブックがどのようなものか、デモンストレーション動画を観て把握しましょう。
この「GASではじめるプログラミング(後編)」で追加していくゲームブックの主な機能について、概要を整理します。
メイン.gs / ショップ.gs / 戦闘.gs / 戦闘履歴.gs / 制御.gs の5つの gs ファイルで実装していくゲームブックの機能について、要素を洗い出して整理します。
スクリプトエディタで、それぞれの gs ファイルを作成します。また、グローバル変数として、ゲームブックの各シートを宣言しておきます。
メイン画面で実装したいことについて、要点を確認します。その上で、一つ目として、旅籠機能について実現したいことを確認します。
まずは、旅籠機能の現在のプログラム(前編で作成したプログラム)について、そのコードを確認し、ロジックフローとして整理しておきます。
これから作る「旅籠料金の出し分け」機能について、その実現アプローチを検討します。その上で、ロジックフローで整理して、プログラムの流れを把握します。
確認したロジックフローに従って、「旅籠料金の出し分け」機能のコードを実装します。完成したら、そのプログラムの動きを確認しましょう。
現在の初期化プログラムについて、プログラムのコードを確認し、ロジックフローで整理しておきます。
ショップ画面・戦闘画面・戦闘履歴画面の三つのシートを初期化するための関数を作成し、前編で作った 初期化プログラム:onFileOpen() 関数から呼び出すコードを書いておきます。なお、三つの関数の中身の処理は、この時点では空っぽにしておきます。
ショップ画面の移動で、どのような挙動にしたいか、実現したい機能について整理します。
ショップ画面に移動したときに、以下の処理を行うようにコードを書きます。
・ショップ画面の項目を変数で宣言する / ・ショップ画面移動時にメイン画面から情報を転記 / ・その他の項目のクレンジング
コードに登場した Range クラスの clearContent() メソッドについて、前編で紹介した説明を振り返って復習しましょう。
ショップボタンを押してショップ画面に移動したときに、その街のアイテムだけをリストで表示する関数:listItem() を呼び出すコードを書きます。なお、処理の中身は、後ほどショップ.gs のチャプターで書き上げます。
コードに登場した Spreadsheet クラスの setActiveSheet() メソッドについて、前編での説明を再確認しておきましょう。
ショップボタンに対して作成した関数を割り当てることで、この機能が完成します。出来上がったら、プログラムの動きをデモ動画で確認しましょう。
実行ボタンが押されたときに呼び出される main_pressExec 関数について、前編で作成した現在時点のプログラムをロジックフローで整理して理解します。
コードに出てきた setDataValidation() メソッドについて、前編での説明を再度確認しておきましょう。
実行ボタンから呼び出される main_pressExec 関数の現在時点のプログラムコードを、ロジックフローと照らし合わせて、構造を確認しておきましょう。
通常ストーリーとボスバトルを分岐させるための要点を整理し、完成形のプログラムの挙動をデモ動画で確認しましょう。
ボスとの遭遇時の分岐をどのように実現するか、そのアプローチを検討していきます。
main_pressExec 関数の中で、SCENE_TYPE によって処理が分岐されるようにコードを改修していきます。
同じ処理を重複して書いている箇所のうち、ストーリーシートから現在のストーリー行を取得してくる部分を、getStoryLine という独立した関数を作成し、その中にコードを移動します。
同じく重複処理になっている箇所である、次のシーンのSCENE_ID 等の情報を取得する部分について、setSceneInfo という独立した関数を作成し、その中にコードを移動します。
main_pressExec 関数から、二つの関数を切り出すために、プログラムコードを修正します。そして、切り出し後のコードを、ロジックフローで整理して確認しましょう。
コードをを書き換えた後の main_pressExec 関数の動きを、デバッガを使って確認しましょう。
最初に、「戦う」が選択されたときに、どのように戦闘へ進んでいくのか、その流れを整理しましょう。
メイン画面の実行ボタンが押されたときに起動する main_pressExec 関数の中で、ボスバトルへ遷移するためのプログラムコードを作っていきます。
メイン画面から戦闘画面へ移動するときに実行される setBattleBasicInfo 関数のコードを、ボスバトルの時とクエストの時で処理を分岐させるようにプログラムを改修します。そのために、まず現在の setBattleBasicInfo のコードをロジックフローで整理して、どのように変更するかを検討した上で、コードを書き換えていきます。
ここまでで改修したメイン画面からボスバトルへの遷移について、プログラムの動きをデバッグで確認しましょう。確認の結果、問題点が見つかるため、次のレクチャーでその克服方法を検討・実現しましょう。
ボタンから呼び出す関数に、引数を指定するための工夫を考えます。pressQuest 関数という新しい関数を作って、これをボタンに割り当て、そのコードの中で、setBattleBasicInfo 関数に引数を指定しましょう。
ボスバトルが終了した後、メイン画面に戻るとき、どのようにクエストと処理を分岐させる必要があるかを検討して、実現のためのアプローチを整理しておきましょう。
最初に、ショップ.gs ファイルで実装する機能について、その概要を確認しましょう。また、デモンストレーション動画で完成後のアプリケーションの動きを確認しておきます。
ショップ画面で、街ごとに購入可能なアイテムが出し分けられるようにします。そのための表示の制御の仕方を検討して、実現アプローチを整理しましょう。
メイン画面のショップボタンに割り当てられている pressShop() 関数の中に書かれた listItem 関数(中身は空っぽの状態)が、街ごとに購入可能なアイテムをセットする処理です。この listItem 関数の中身をどのように実現するか、アプローチを検討してロジックフローで整理しましょう。
listItem 関数のコードを、ロジックフローと照らしながら書き上げていきましょう。
listItem 関数のコードに登場した Array.push メソッドについて確認しておきましょう。配列の末尾に要素を追加するメソッドです。
続いて、ショップ画面で「アイテム詳細」ボタンが押された時の動きについて検討しましょう。ロジックフローまで整理します。
整理したロジックフローに従って、実際にコードを書いていきましょう。checkItem と getItemInfo という二つの関数を作成して、この「アイテム詳細確認」機能を実現していきます。
ここまで作ったショップ機能のプログラムの動きを、デバッグで確認しましょう。
コードに登場した Array.push メソッドに関連して、配列操作のメソッドを4つほど紹介しておきます。
配列の末尾に要素を追加する .push() メソッドについて、その概要と使い方を紹介し、簡単な例文を書いていきます。
配列の先頭に要素を追加する .unshift() メソッドについて、その概要と使い方を紹介し、簡単な例文を書いていきます。
配列の末尾の要素を削除する .pop() メソッドについて、その概要と使い方を紹介し、簡単な例文を書いていきます。
配列の先頭の要素を削除する .shift() メソッドについて、その概要と使い方を紹介し、簡単な例文を書いていきます。
ショップ画面でアイテムを購入する処理を、どのように実現できるか、アプローチを検討しましょう。
検討したアプローチを、どのようにコードに落とし込んでいくか、まずはロジックフローを整理します。そして、そのフローに照らして実際のコードを書いていきましょう。
ここまでに作成したアイテム購入機能のプログラムの動きを、ゲームブックでのデモ動画で確認しましょう。その結果、問題となる部分が見つかりますので、次のレクチャー以降ではその対策を考えます。
アイテム購入時に、所持金が足りないケースについて検討し、対策のためのコードを追加していきます。
アイテム購入時に、現在の装備品と同じ装備品を買ってしまうケースについて検討し、対策のためのコードを実装します。
アイテム購入時に、「詳細確認」ボタンを押し忘れて「購入」ボタンを押してしまうケースについて検討し、対策のためのコードを追加します。
修正したプログラムについて、ロジックフローで整理した上で、プログラムの挙動をデバッガで確認しましょう。
ゲームブックの初期化が行われるときに、ショップ画面の内容も初期化されるようにします。
「戻る」ボタンが押されたら、メイン画面に戻るようにします。
最初に、戦闘.gs で実装する機能について、概要を確認しておきましょう。
街ごとのクエスト選択がどのように機能するか、デモ動画で確認します。その上で、これをどのように実現するか、簡単に検討します。
クエストを呼び出すための listQuest 関数を作成します。まずは、ロジックフローを整理して、そのフローと照らしながら、プログラムコードを書いていきましょう。
作成した listQuest 関数を、ボタンから呼び出せるようにします。クエストボタンには、pressQuest 関数が割りあたっていますので、その中から listQuest 関数を呼び出すように、コードを書き足しましょう。
街ごとのクエスト選択のプログラムの動きについて、デバッグで動きを確認しましょう。
戦いで桃太郎が選択できるスキルを追加していきます。イヌ・サル・キジを呼び出す3つのスキルについて、それぞれの効果と消費コストを確認しましょう。
戦闘プログラム bat_pressExec の現在のプログラムを確認しましょう。まずは、プログラの流れをロジックフローに整理します。そして、そのフローに照らして、現在のコードを理解しておきましょう。これが、次以降の本格的な戦闘プログラム作成の
整理した現在のロジックフローをベースにして、新しいスキルを追加するロジックを、どの部分に追加していくかを整理します。その上で、フローに照らしてコードを書いていきましょう。
ATK や DEF の計算結果の数値を四捨五入するために、Math クラスの .round() メソッドを使います。メソッドの処理の概要と、引数・戻り値を確認しましょう。
ここまで作成した「スキル追加」のプログラムの動きを、デバッグを使って確認しましょう。
戦闘の結果、対戦相手ごとに持っている経験値と銀貨を獲得できるようにプログラムを作っていきます。まずは、どのような動きになるか、デモ動画で確認しましょう。
経験値と銀貨の獲得の処理について、どのように実現するか、どの場所で起動するのが良いか等、実現のためのアプローチを検討します。
戦いに勝利した時と敗北した時で、獲得できる報酬の量が変わります。まずは勝利したときに動く関数 winTheBattle を作成しましょう。
戦いに敗北した時の報酬獲得処理のための関数 loseTheBattle を作成します。
バトルタイプが「クエスト」の時と「まもの退治」(ボスバトル)の時とでの戦いの流れの分岐を整理します。ポイントは、クエストの時は QUEST_LIST、ボスバトルのときには MONSTERS テーブルを、それぞれ参照することです。
戦闘開始前の段階での、バトルタイプによる処理の分岐について、ロジックフローを整理した上で、コードに反映していきましょう。
バトルタイプに応じて分岐された戦いが終わった後、物語のシーンをどこに設定するかを検討して、その実現方法を整理しましょう。ロジックフローとコードを仕上げていきます。
出来上がったボスバトルとクエストとの分岐処理について、プログラムの動きをデバッグで確認しましょう。その際、敗北した時の処理に考慮した方が良い点が見つかりますので、それについて修正方法を検討して実装します。
桃太郎の物語を題材に、Google Spreadsheet を使ってゲームブックを作りながら、GAS (Google Apps Script) というプログラミング言語でプログラミングの基礎を学習していくコースの後編(設計・実装編)です。
桃太郎の物語のゲームブックで、さまざまな機能を作りながら、プログラム実現のための構想力・設計力、そしてコードの実装力を身につけていきましょう。
ビジネス職の方がプログラミングを身につける上で、最初の大きなハードルですので、まずは本講座で体験して、コードをたくさん書いて少しずつ向上を目指しましょう。
■ 初心者の方の入門に:Google Apps Script (GAS)は最適
・プログラミング初心者でも、ゲームブックを作りながら実践的に学習
・GAS の基礎文法とプログラミングの基礎知識をしっかり抑えます
・プログラミングでのテクニックもマスター
・説明は端折らずとことん丁寧に解説、入門レベルの方に寄り添います
・全くの初心者の方も心配いりません! 安心して最初の一歩を踏み出せます
■ GASを学習したことがある方にも最適
・文法や例文は学んだけれど、自分で作ろうとすると難しい。そんな方にぴったりな作りながら学ぶ実践的内容
・前編と後編で一つのアプリケーションを完成させることで自然と構想力・設計力・実装力が身に付きます
・基礎学習で残った疑問・もやもや…。とことん丁寧な説明が解消します
・ステップアップに悩まれている初級者の方にも、ぴったりの講座です
■ とにかく作って作って設計力と実装力を身につけましょう!
・この後編では、とにかく色々な機能を作り沢山コードを書いて、設計力と実装力を身につけていきます。
・前編で学んだ知識をフル活用して、さらに新しく出てくるクラスとメソッドも活用して、レベルアップを目指しましょう。
■ 記憶を助ける「音読」と「6秒静止画」
・コードの音読が、描き慣れない GAS のコードを感覚的に親しみやすくします
・音読のリズムを自分のものにして、学習効率を高めましょう
・文法・メソッド・コードの説明の後にある6秒静止画で自分なりに振り返りをしましょう
・この時間で、講義で視た・聴いた内容をさっと思い出すことで、記憶に残りやすくなります
■ 誰でもいつでも使える Google スプレッドシートだからこそ!
・誰でも無料で使える Google スプレッドシートでプログラミングを気軽に始められます
・Google スプレッドシートだからこそ、書いたプログラムがすぐ動かせます
これは、プログラムを学ぶ上でとても大切です。Google Apps Script は、Google スプレッドシートで GAS のコードを書くと、すぐに動かせます。かっこよくなくても、大袈裟でなくても、自分で書いたプログラムでモノが動く。その楽しさを感じることが、プログラミングスキル向上の一番のコツです。是非、Google Apps Script でのものづくりを、楽しみながらチャレンジしてみてください。
■この講座で学べること
・この講座では、以下のような事項が学習できます。
スプレッドシートを使ったアプリケーション(ゲームブック)を作る上でのアプローチの整理の仕方(設計力) / 設計をコードに落とし込む実装の実践的な訓練 / Goolge Apps Scipt ( GAS ) の文法 / GAS の入門的な知識 / プログラミング一般の入門的な知識 / GAS の変数・定数 / GAS のデータ型 / GAS の配列 / GAS スプレッドシート操作 / Google Apps Script のリファレンスの使い方 / Google Apps Script での文字列操作 / グローバル変数とローカル変数 ...etc.