いまきたこうぎょう。

のんびり、ゆったりとスマホゲームを作ったり作らされたり。

暑くなってきましたね。バテていませんか?
体調に気を付けながら、BounceQuestを100回ダウンロードするのです。

こんにちは。私です。

◆アプリのテストは必要だよね

ひとりでプログラムから何からやってると、どうしても「作る」ことは力が入っても、「ちゃんとテストする」っていうことがなかなかに難しくありませんか?
複数人でアプリを作っているならともかく、個人開発者はそこまで手がまわりませんよね。私だけ?

というわけで、前回のサイコロ勇者から、第三者によるテストをしてもらうようになりました。おかげさまで、ゆぼクエの頃は「バグだらけ」と言われていた今北工業も、サイコロ勇者ではそれほど言われることがありませんでした。
…ゲームとして面白いかとか、バランスがどうか、っていうのはまた別のお話…

また、第三者によって動作を確認してもらうことで、「これでイケる!」と思い込んでいた仕様が実はマズかったということも発見でき、非常に助かります。

一人だとどうしても「これが正解だ」という思い込みに襲われてしまいます。「作ること」が主目的になってしまい、「遊んでもらうこと」をつい忘れてしまいます。
結果的にそれが、評価が下がる原因にもなります。

というわけで、第三者による動作確認はとっても大事。

というお話ではなく…

◆デバッグのチェックリスト、作っていますか?

こっちが本題。
企業なんかでソフト開発をしていると当たり前の話なんですけどね。今回は、「個人の開発」に絞ってます。
アプリのデバッグをする際、きちんとチェックリストを作ってチェックをする。
まあ当然といえば当然の作業。ですが…なかなかそこまで手が回らない。それが個人開発。
デバッグなんてもう開発の最終段階。個人的にはほぼ完成して、もう公開の準備に入りたい。そんな時に、隅々まで細部にわたってきちんとチェックするなんて、個人じゃほぼ無理…じゃないです?
今回のBounceQuestの開発でも、第三者によるテストで終わらせる感じでした。

そんなテストを依頼して、いろいろやっていたところ、Twitterですぎたに(@digigeso)さんがこんなツイートを




なんというグッドタイミング。というわけで早速コンタクト。
本当にタイミングがよく、無料枠でデバッグサービスを受けられることになりました。
今回はデバッグそのものではなく、「デバッグ用のチェックリストを作るサービス」ということですが、それだけでもありがたい。
お渡ししたのはざっくりとした仕様とAPKをお渡し。本当はちゃんとした仕様書を準備するべきなのでしょうが…そこらへんは弱小個人。そんなもの作っていませんて。

そして1週間ほどで作っていただいた「デバッグ用のチェックリストを作るサービス」がこちら。

名称未設定 1

画像が小さくて申し訳ないのですが、エクセルのファイルで、チェックすべき項目をほとんど網羅
あとは、これに従ってチェックをしていき、進捗率が100%になったら完成。
BounceQuestの場合、
「アーケードモードでの動作」「ストーリーモードでの動作」「レベルアップ画面」「ガチャ画面」「装備品の装備画面」などのそれぞれの画面のチェック用シート
ストーリーの誤字チェック用シート
アイテムのステータスチェック用シート
などシートごとでシーンやデータなどに細かく分類され、
OK/NGのチェック、動作確認OS、動作確認Ver、バグなどを記入
そして最後に「通しプレイ」のシートがあるので、それに従ってプレイしながらチェック項目をチェック。
「この項目はいつ、誰が、どの端末で確認したのか」が一覧で把握できるようになっています。
これだけやれば、だいたい通してプレイしたときのバグは無くなるんじゃないかな?というところまで、しっかりと丁寧に網羅してくれました。

これを個人開発者がきちんと作ろうと思ったら、このチェックシートを作るだけでも数日かかるし、その時間がもったいなくて他の作業をしてしまったり…こんな手間かけてられっかー!動けばいいんだ動けばー!っていう方、多いと思います。

という素敵なサービスなのです。
やってる人はやってるだろうし、「常識。こんなの作って当然だろ」という方もいらっしゃると思いますが、それ以上に「こんなの欲しいけどなかなか…」っていう人は多いんじゃないでしょうか。

今回は「デバッグ用のチェックシートを作る」サービスだけでしたが、さらにデバッグ作業までしてくれるサービスも提供予定だそうです。

少なくとも、このシートだけでも個人開発者にとっては非常にありがたいのではないかな?と思います。
ちなみに私はちょうど無料枠でやっていただけましたが、費用については
1アプリのチェックシート作成で2万円
となります。(金額は資料より。増減の可能性はあります)

それ以上の価値はありますよ。ほんとに。
これまできちんと自分でチェックシートを作っていた方にとっても、その手間が省けるぶん良いサービスなのではないでしょうか。
ほんとオススメです。

詳しい話を聞きたい!という方は、Twitterで


をフォローしてDMするんだ!今すぐに!

えっ…あ…私、ブログやってたんだ…!

すいません記事のネタがまったくなくて、すっかり忘れていました。
こんにちは。サイコロ勇者のヘルプと、SQLiteとプライバシーポリシーの記事が人気の当ブログです。

前回のサイコロ勇者のリリースが2019年5月。

約1年ちょっとぶりの新作リリースです。
はい。作ってました。
ていうか、コレと並行でもう1本作ってるので、それぞれの進捗が半分ずつになっているっていうね。

◆BounceQuest-魔王の娘と駆け出し剣士-リリース!

今北工業は、2020年6月1日に、Android/iOS向け新作アプリ「BounceQuest-魔王の娘と駆け出し剣士-」をリリースしました。
基本無料で、アプリ内広告/アプリ内課金ありとなります。

ss0

ダウンロードはこちらから!
GooglePlay-badge-rearrange

Download_on_the_App_Store_Badge_US-UK_135x40


ゲームの内容は、「ストーリーのあるブロック崩し」です。
ボールをパドルで反射させ、ブロック(敵モンスター)に当てて倒す。画面のモンスターをすべて倒すとゲームクリアとなります。

特徴として、
ss1
コミック調のストーリー。(画面はオープニングシーン)

ss2
ステージの合間に挟まれるストーリー。

MyProjectCapture20200528102853
RPG風なレベルアップ

といった要素を、ステージをクリアしていくだけのブロック崩しに加えました。

◆ライトなストーリーとキャラクター

魔界で、魔王が後継者について悩んでいた。
魔王には息子がおらず、娘しかいなかったからだ。そこで魔王は考えた。
魔王たる者、強くなくてはならない。魔物たちを統べるためには、力こそが絶対なのだ。
最も強い者を、後継者とする。
そのため、最も強い者を決める次期魔王決定戦を開催。その優勝者を、一人娘の夫とし、後継者とする。

それを聞いていた、魔王の一人娘「セレーナ」。
「冗談じゃないわ。私のお婿さんを勝手に決めるなんて! 間違ってスライムとかが夫になったら…うわぁ」
そこでセレーナは考えた。
「そうだ。好みの男の人を連れてきて、魔王決定戦で優勝させればいいのよ。そうすればお父様も文句はないハズ!」
こうして、セレーナは夫候補を自分で選ぶため、城を飛び出したのでした。

hero
主人公の「レーン」
村一番の剣士(自称)。能天気であまり深く考えないタイプ。
魔王討伐の勇者募集の看板に惹かれ、勇者になるために村を飛び出したが、やはり井の中の蛙だった。

heroin
魔王の娘「セレーナ」
勝手に婿候補を決められそうになって、自分で婿を選ぶために城を飛び出した。
そこで出会ったレーンを、魔王にするために鍛えることに。

◆ゲーム内容

ss3

画面下部の「パドル」を、タップしたまま左右にスワイプすることで移動させ、ボールがパドルより下にいかないように反射させます。
ボール(レーン)がモンスターに当たると、レーンの攻撃力がダメージとしてモンスターに与えられます。モンスターのヒットポイントが0になると、モンスターが消えます。
画面内のモンスターをすべて倒すとステージクリア。
報酬としてゴールドが与えられます。

ゴールドはレーンやセレーナのレベルアップなどに使うことができます。

ステージは「ストーリーモード」と「アーケードモード」に分かれています。
ストーリーモードは、レーンとセレーナの物語を全50ステージにわたって展開します。
アーケードモードは、ストーリーの無い全150ステージのブロック崩しゲームです。

レベルアップや武器などの強化は、それぞれのモードで共通です。


ss4
また、モンスターにダメージを与えることで出現する「魔法アイテム」をパドルで拾うことで、セレーナの補助魔法が発動します。

icon_shot
ショット…セレーナが、パドルから炎の魔法を発射します。モンスターにヒットすると、ダメージを与えることができます。レベルアップで攻撃力が増加。

icon_big
ビッグ…レーンが巨大化し、ダメージが増加します。レベルアップで巨大化の倍率と、ダメージが増加します。

icon_merage
ミラージュ…レーンが分身します。レベルアップで分身する数が増えます。

icon_shield
シールド…パドルの下にシールドが出現し、ミスを防ぎます。

icon_wide
ワイド…パドルが横に伸びます。

icon_narrow
ナロー…パドルが縮んでしまいます。

◆レベルアップ

MyProjectCapture20200528102853
ステージをクリアすることで獲得できる「ゴールド」を使って、レーンとセレーナを強化することができます。

レーンのレベルアップ
・攻撃力 … モンスターに与えるダメージが増えます
・速度 … レーンの移動速度が上昇します。移動速度が速すぎる方は、最低速度から、現在のレベルまでの間で速度を調節することができます。
・魔法効果時間…セレーナの補助魔法の効果時間が増加します。

セレーナのレベルアップ
・ショット … 炎の魔法のダメージが増加します。
・ミラージュ … レーンの分身数が増えます。
・ビッグ … レーンの巨大化の倍率と、攻撃力が増えます。

◆装備アイテム

レーンとセレーナそれぞれに、装備アイテムを装備させることができます。
装備アイテムは、ステージクリア報酬、または課金で得られる「鍵」をキャンプ画面の「お宝BOX」で使うことで入手することができます。

MyProjectCapture20200528111229
お宝BOX画面

MyProjectCapture20200528111309
レーン、セレーナそれぞれに専用の装備があり、装備をすることで
レーン…攻撃力が上昇
セレーナ…魔法効果時間が上昇
の効果があります。
また、武器のカテゴリ(剣・槍・弓)ごとに決められた追加効果が発生します。

武器の追加効果
レーン専用
剣…ワイド/ナローの出現率が上昇
槍…シールドの出現率が上昇
斧…全魔法の出現率が上昇
ハンマー…ステージクリア時の取得ゴールドが上昇

セレーナ専用
弓…ミラージュの出現率が上昇
スタッフ…ショットの出現率が上昇
ロッド…ビッグの出現率が上昇



また、装備アイテムは強化することができます。
MyProjectCapture20200528111626
装備品は、不要になったほかの装備品と、ゴールドを素材とします。
装備品とゴールドを消費することで、装備品の経験値を獲得します。
装備品の経験値が一定になるとレベルアップし、能力が上昇します。


ゲームの内容としては以上となります。
少しでもお楽しみいただければ嬉しいです。
何卒宜しくお願い致します。

GooglePlay-badge-rearrange

Download_on_the_App_Store_Badge_US-UK_135x40

うわー。停電で機械とまったー。
なのでブログ書きます。

◆条件分岐で呼び出す関数を分岐させよう!

なんかこう、処理を分けたいってありますよね。
ゲームでいうと、「剣のときはこう、斧のときは、槍のときは…」みたいな。
っていうと普通は

void Bunki(int BUKI_ID){
switch(BUKI_ID){
Case 0:
KEN();
Break;
Case 1:
ONO();
Break;
Case 2:
YARI();
Break;
}
}
みたいな。
コード縦に広がるし、5個程度ならいいけど種類が10個20個30個って増えるともう書くのがめんどくさくて死にたくなります。もうほんとめんどくさいです。
いまスキルで処理分けるところ作ってて、ほんともうやーめたって言いたくなりました。


んで、ツイッターなら天才がわんさかいるので








って投げてみたんですよね。
もうほんと天才お願いしますって丸投げ。





普通はそうですよね。
もう諦めてゴリゴリ書こうかって思ってた矢先、やはり神がいた…!









関数ポインタ…だと?
専門学校時代にCで投げたポインタ…うーんめんどくさそうだな…
と思ったけど、いちおうググってみた。
やっぱりポインタだとめんどくさそう…

という中に、ひとつの記事が。

[C#]関数を配列でまとめたい


うん。そう。これ。これがやりたい。
渡すIDを配列のインデックスにできればもう最高。めんどくさくない。

その中の記事からたどりついた、


これ!これだよ!これがさいつよなんだよ!


というわけでデリゲートから配列を作って(っていう言い方であってるの?)、その中に関数をぶち込む。そんで配列から関数を呼び出す!


using System;
public delegate void iFunction();
public struct iArray{
public iFunction iFun;
}

void Awake(){
iArray[] = new iArray[3];
iArray[0].iFun = KEN;
iArray[1].iFun = ONO;
iArray[2].iFun = YARI;
}

void Bunki(int BUKI_ID){
iArray[BUKI_ID].iFUN;
}

こんな感じになりました。ちなみに引数も渡せます。
ただし、引数は配列に入れる関数すべてで引数の型が統一されている必要があります。たしか。

switchだと縦長になって可読性悪くなるし修正するのくsssssssssっそめんどくさいし書くのくsssssssssっそめんどくさいので、私的にこれがさいつよだと思います。



が、



ってことですよねぇ…
なんかバグでて「なんだこれ書いたの誰だ出てこい」ってなってもヤですしね。

なにかのお役に立てたら、という備忘録でした。

ではまた。

↑このページのトップヘ