Dear!くろうどぃあ!

このブログでは、私、くろうどの趣味に関する事を記述します。
当面は、「RPGツクールMV」をメインにします。

バグを減らすために考えておくこと

2017-12-06 11:50:01 | RPGツクールMV
  • はじめに

さて皆さん。
この記事は、「ツクール Advent Calendar 2017 ( https://adventar.org/calendars/2748 )」の12月6日の記事です。
創作関連アドベントカレンダーとの事らしいです。

この記事では、創作ツールとしてRPGツクールMVを取り上げて、その中でもテストについて書きます。

ちなみに、RPGツクールMVのアドベントカレンダーに関しては、( https://adventar.org/calendars/2288 )もありますので、見てください。



  • バグとは?

さて、バグとは何でしょうか?
ココでは、「作者の想定する動作と異なる動作をする事」としておきましょう。
つまり、理想と現実が異なるわけですから、「問題」なわけですね。
「問題」であれば「解決」しましょう。

「問題」とは、理想と現実のギャップの事です。
※ちなみに、某所ではバグの事を「故障」って呼んだりしますね。

それから、この記事では、RPGツクールMVに関しての内容になりますので、コンピュータゲームにおけるバグという事になります。

そして、バグを見つける作業を「テスト」と呼ぶ事にしておきます。

※当然ですが、「想定する動作(理想)」がどういう物なのか、つまり「仕様」は、把握または決めておいてください。

 

  • テスト手法

前述の通り、バグが発生するという事は、ゲームの故障であり問題であるわけですから、なるべく発見して解決しておきたいものです。

バグを発見するためには、多くの場合、ゲームのテストプレイをする事になるでしょう。

では、どのようにテストプレイすれば良いのでしょうか?

闇雲にテストプレイしても時間だけが過ぎて行き、バグが見つけられない可能性があります。
そこで、テスト項目(どのようにテストプレイするのか)という物を考えます。

テスト項目を考える上で押さえておきたいのが、「同値分割」「境界値分析」という考え方です。

例えば、「変数A > 0」かつ「変数A < 5」という条件があるとします。
同値分割だと、「0以下、1以上5未満、5以上」の3つに分かれ、それぞれのグループに含まれる値をテストするという考え方です。
境界値分析だと、条件の境界値である「0、1、4、5」の4つの値をテストするという考え方です。
これを組合せてテスト項目を作ります。


とは言え、これは一番細かい部分のテスト手法なので、ゲームのテストプレイでどこまでやるのか……というのはあります。
ですがまぁ、この記事では、このテスト手法を元に話をします。


  • バグを発見するためのテストプレイ

それでは、実際にゲームを見てみましょう。

村人5人に話しかけてから村長に話しかけたらクリアになるゲームです。

RPGツクールMVの初心者講座に「複数の人から情報を聞かないと先に進まないイベントを作る」というページがあるので、それを元に説明します。
https://tkool.jp/mv/guide/006_005e.html

 



テスト項目は以下です。

  1. ゲーム開始時(話しかけた村人の数→0人)
  2. 村人1人に話しかけた(1人)
  3. 同じ村人に5回話しかけた(増えない)
  4. 村人4人に話しかけた(4人)
  5. 村人5人に話しかけた(5人)
  6. 村人が6人以上いるなら6人に話しかけた(6人)

※上記のそれぞれで村長に話す(5人以上ならクリア)

この場合、村長に話しかけるテストプレイを6回する事になります。

※テスト項目の2番は省略してもいいかもしれません。


  • ゲーム作成段階でバグを減らす

さて、ゲーム作成やプログラミングに慣れてくると、どういう所にバグが潜んでいるかが分かるようになってきます。

前述の村人5人のゲームで考えてみましょう。

このゲームのイベントは、村長と、村人5人以上で作られます。
この時、村人はセリフこそ違えど、話しかけた数のカウント処理は同じです。
それぞれの処理を見てみましょう。

    • 村長

村長に必要なのは、変数(話しかけた村人の数)が 5 以上であるかどうかの条件分岐イベントです。



    • 村人

村人に必要なのは、変数(話しかけた村人の数)を 1 加算する処理です。
同じ村人に話しかけた時には加算しないようにする必要があります。



慣れてくると、これらのイベントを作る時に、前述の6個のテスト項目が頭に浮かびます。
例えば、「同じ村人に2回話しかけたらどうなるんだろうか?」という疑問が浮かぶわけです。
その疑問を元にして、イベントコマンドを見た時に、「同じ村人に2回以上話しかけた時には加算しないようにする」処理を加える事が出来れば、バグを事前に減らせた事になります。

 

  • おわりに

テストは地味で面倒くさい作業ですが、品質を向上させるために必要な作業です。
この記事で書いたように、テストにもやり方があります。
上手にテストをする事で、効率よくバグを発見し、やがては、作成時にバグを減らす事も出来ます。
テストを意識する、つまり、どのようにゲームを動かしたいのかをイメージして作成しましょう。

それでは~。


【アドベントカレンダー2017】ラノゲツクールMV先行体験版を触って、RPGツクールMVとの違いなど……

2017-12-05 00:01:41 | RPGツクールMV
  • はじめに

さて皆さん。
この記事は、「RPGツクールMVアドベントカレンダー2017」の12月5日の記事です。

https://adventar.org/calendars/2288

この記事では、ラノゲツクールMV先行体験版を触って感じた事などを書き、どのようなツールなのか紹介できればと思います。

 

  • ラノゲツクールMV概要

さて、ラノゲツクールMVは2017年12月14日発売予定のツクールシリーズ最新作です。
RPGではなく、物語ゲームやノベル系のアドベンチャーゲーム(以下、ラノゲ)を作るためのツールです。

ですが、スクリプトを改造とまで行かずとも、ラノゲツクールMVの本来の機能だけでも、色んなジャンルのゲームが作れるようです。
サンプルとして、ブラックジャックがありました。


ちなみに、キャッチコピーは「あなたしか知らない物語は、やがてみんなの物語へ」のようです。

Twitterでも言ってる人を見かけましたが、良いコピーですよね~。

 

※以下の画像は、プロジェクトのシーン作成画面と、データベース画面。



  • RPGツクールMVとの違い

RPGツクールMVとの違いですが、RPGでは登場人物の他に武器や魔法、敵キャラクターといった「データ」に、「マップ」と発生する「イベント」を作成しますが、ラノゲでは「登場人物」を設定して「シーン」を書けば基本的には作れるので、シンプルと言えるかもしれません。

(RPGツクールMVのイベント作成だけが連続しているイメージ)

機能面では、「リスト(可変長配列)」が使える、ピクチャ番号に変数が使える、「ホットスポット」という機能で画像にクリックを受け付けられる……など、コマンドに関しては、RPGツクールMVよりも機能が豊富です。

ただし、プログラミングの知識がなければ、それらの機能が何なのか、分かりにくいかもしれません。

ヘルプだと機能名から機能の使い方を引きますが、作りたい物から機能を逆引き出来るといいかもしれません。
(そのためのフォーラムかしら?)

ツクールweb(https://tkool.jp/

 

  • ラノゲツクールMV入門

さて、ラノゲツクールMVを使って、普通にラノゲを作る場合、物語が一本道であれば必要なコマンドは、メッセージ表示、キャラクター表示、音楽再生、シーンの変更などの物語部分と演出だけでも作れるでしょう。

ここに選択肢による分岐をちょっと足しても、変数や(変数による)条件分岐、ループといったプログラミング的な要素を使わずに作れるでしょう。

これは、(ゲームを作成する難易度に関わる)ちょっとしたポイントかもしれません。


選択肢による分岐では、変数を使わなくても済むのです(ラベルやシーンに移動させる)。
つまり、プログラミングに興味がない方は、物語の流れや構成を工夫すれば、プログラミング的なコマンドを使わなくても済むのです。

※以下の画像は、選択肢の表示と、「いいえ」を選んだら選択肢をループさせている。「はい」を選ぶと次のシーンへ進む。

※上の画像で使っているコマンドに、演出系のコマンドを使うだけでも、ラノゲを作る事は出来そう。

 

  • 先行体験版で私がやった事

サンプルのブラックジャックを改造して、「クリベッジ」というトランプゲームを作っています(未完成)。

※「クリベッジ」というのは、配られたカードを相手と交互に出して役(ポーカーで言うとペアやストレートなど)を作るなどして得点を稼ぐゲームです。役として得点になる組合せが多く(カードの値を足して15になると得点になるというのが特徴的)、徐々に得点が増えていきつつ、時々高得点が得られたりして楽しいゲームです。得点のカウントにはクリベッジボードという物を使います。


ラノゲツクールMVのおかげで、画像処理はかなり楽だったと思います。

特に、「ホットスポット」という機能で、いわゆるピクチャのボタン化が出来るので、カードを選択する処理で、選択肢を表示するのではなく、カードをクリック出来るように作れました。
(画像周りは苦手意識があるのです)

※作成中の画面。

 

  • ちょっとしたアドバイス
    • インデント(字下げ)

条件やループの中身はインデントで表現するようです。
設定したコマンドで左右キーを押すと、コマンドがちょっと左右に移動するのが、それです。
慣れるまで、分かりにくいと思いますので、特にループに関しては、ラベルを使ってループさせた方が分かりやすいかもしれません。

    • リスト

リストは、RPGツクールMVには無かったコマンドです。
変数が連続した物で、RPGで言うとパーティメンバー4人全体を長さ4のリストとして、勇者ハロルドがリスト0番のデータ……という感じです。
(変数ABCDの4つをリストXの1つにまとめられると考えてください)

※リストを使う事で、スタックやキューといったデータ構造を利用する事が出来ます。

※「リストのシャッフル」というコマンドも用意されているので、カードゲームを作る時にシャッフル処理に悩む事もありません。

※以下の画像は、リストの概念を図にした物です。

 

 

  • おわりに

色々と書いてきましたが、ラノゲツクールMVは、作りたい物が明確にある人向けな気がします。

RPGツクールMVは、テキトーにデータをいじってるだけでも楽しめる部分はありますが、ラノゲツクールMVは文章を書かない事には成果物が何もないからです。

ここは、いきなりつまづく可能性があるので、気を付けましょう。
そこさえ乗り越えれば、あとは、永遠の大海原(大草原?)が待っているはずです。

それでは〜。