くまちゃんのiOS/Androidゲームプログラミング

マイペースでゲームつくってます。

【Android】RPG制作 進捗報告

いえね、ここのところ更新できていないのは、作業が地味すぎて画像で報告するほどでもなくて。
ちゃんと制作すすめていまして、ゲームシステムとしてひととおりの機能の実装はほぼできてきました。
前回エントリーからの進捗は、
・ストーリー進行エンディングまで実装
・モンスター複数種類登場
・タイトル画面実装
・エンディング スタッフロール実装
・武器防具データベース実装、装備機能実装

あと残り作業としては、
・武器屋で「買う」「売る」選択ダイアログ(今は「買う」しかできない)
・道具屋で「買う」「売る」選択ダイアログ(今は「売る」しかできない)
・モンスターパラメーター調整
・武器防具 種類増加、パラメーター調整
・レベルアップ(経験値)調整
・道具 種類増やす、パラメーター調整
・登場人物 会話充実

という状況でございます。
プログラミングは峠を越えました。あとは調整なので、そこそこストレスなく遊べる調整ができた時点でリリースしたいと思います。
あと少し。

【Android】RPGでゲットしたアイテムをSQLiteに保存してDialogFragmentでListViewする

...つ、つかれました...
本当にタイトルどおりのことなんですが、かーなーり久しぶりに、ゲームプログラミングを再開しておりました。
AndroidSQLiteをググれば、サンプルはたくさん発見できるので、SQLiteそのものを動かすことは簡単だったんですが、以前から作っていたRPGに組み込もうとしたとたんに、えらく難儀なことになりました。
もともと別画面でデータベースの中身を表示させようとしたのですが、それ以前に別Activityを着火してからの戻りがうまくいかず。単純にfinish()すればいいはずなのに、もとのActivityのメインで走っているスレッドが結構busyなことをさせているようで、タイミングをあわせることができず結局断念。
で、作戦を変えて武器屋のおやじとの会話ダイアログに表示させようとしたんですがそんなサンプルはもちろん存在しない。
そこから検索しまくり、無理からコード書き、エラーの嵐..でここに書く気力が残っておりません。

結論としては、思ったようには実装できました。
ちゃんとモンスターを倒したら、ランダムでアイテムを選択して、データベースに放り込んで、それを表示できて。
これでモンスターを倒す楽しみができたっつーもんです。
売買の楽しみも。
その後に、調合も実装すればさらに楽しいんですけどね。
そのすべてのベースとしてのデータベースですが、なかなかAndroidのサンプルでRPGSQLite使うコードなんて見つからないですね。
自分で頭打ちながら書いていくしかないですね、はい。
f:id:tadakazu1972:20151220181732p:plain
f:id:tadakazu1972:20151220181755p:plain

【JavaScript+jQuery】csvファイルを読み込んでからソートしてHTMLで書き出す⁉︎

いや〜、それは正直、エクセルでソートを済ませておいてから、ファイルをアップロードしてください

...と言いたいのをこらえ、なんとか書き上げることができました。
それにしても、JavaScriptはめちゃくちゃ柔軟なんだけど、その柔軟さがゆえに読み込んだデータにアクセスするようなプログラミングがすっごく不安になるというか。本当にいけてるんだよな?と何度も何度も確認しながらの作業で消耗します。
さらに、今回のようなcsvファイルの読み込み、その後にソート、という2つの処理を組み合わせたサンプルコードはまあ〜見つけられない。
検索してもcsvファイルの読み込みサンプルが大量に出てきてノイズが多すぎて、結局、試行錯誤して自分で書くほうが早かったです。

まあ、そもそもそんなニーズがあまりないでしょうし。
今回、こんなことになったのも現場のニーズから。いろんな理由が複雑に絡み合って、結論としてこれが最良の選択となったわけでして。
そういう意味では自分の動機では絶対書くことのなかったコードなので、鍛えられるいい機会になりました。
そのほかにもあれこれ注文をもらっていて、おかげでcssの経験値も少し積むことができました。漫然とサンプル打つ気にはならなかったので。

あと、27インチ4kモニターでのプログラミングは効率あがりまくりでサイコーです。ウィンドウ開きまくりなので大助かりです。
f:id:tadakazu1972:20151213201936j:plain

Nexus 6Pに機種変しました

Nexus6Pに機種変しました。ソフトバンクです。

いやー、自ら決めておきながら、もう一人の自分が未だ驚いております。ずーっとiPhone信者だったので。
いえね、9月にiPhone6sが発売された時はそりゃあもうしんぼうたまらんかったのですよ。でも、本体ローンが残ってて12月まで、あと3ヶ月のガマンじゃないか、と待っておりました。

その間、プランの変更をあれこれ検討していたのですが、最大の懸念が月額料金。iPhone6sにすると最低の16Gでも今より月額料金が1,000円は増額され8,500円になるのはちょっとさすがに...。手持ちのiPhone5sを下取りすれば今と同水準になりますが、これは娘へあげるため置いておきたくて。MNPも検討しましたが、初期事務費用5,000円以上とネットでも異なる会社サイトを行き来する登録手続きがあまりにうっとおしく、また実店舗はキャッシュバックあるもコンテンツ同時契約30個必須とか狂気の世界なので却下。

また、それと並行してアプリ開発用にAndroidスマホを物色しておりました。1年前にNexus7を購入しAndroidアプリ開発はこれでOKと思っていたところ、開発したアプリをまわりのAndroidユーザーに試用してもらったら予想しなかった不具合がたくさん出て、やっぱりタブレットスマホで実挙動に違いがあるのを知らないと、と。といって、本命のNexus5は未だにいい値段でなかなか安くならず。

悩んでいるうちに契約更新月の12月、そこでふと目にしたのがNexus6Pなら実質無料ということ。まったく考慮にいれていなかったんですが、スペックを見ると8コア、メモリ3G、ストレージ32G、Android6.0も気になる。かたやiPhone6sは1,000円月額増えるけどメモリ2G、ストレージ16G、iOSはこの4年間でよく知ってる。おっとこれは...。

加えて、個人的には最近のiOSはアプリをつくる気が減退してきていました。まあ、3年で10個作ったというのも大きいですが、iPhone6以降の画面レイアウト変更、特にAutoLayoutが苦手なのとSwiftがどうにも水が合わなくて。Storyboardも昔から...。Androidxmlでレイアウトするほうがプログラムしやすいんですよね。もちろん、iOSのCPUとGPUの一体化ゆえのスピード(Metal)はプログラマーには燃える要素であるんですけども、3Dは個人の手には負えない所業ですし。それと、これからちょこちょこ作りたいちょっとしたアプリはわざわざiOSの審査で労力を費やすほどのものでもないことが予想されていて、Google Playであれば(野良アプリならなおさら)すぐにユーザーに配布できるのはやっぱり作り手のやる気にもなります。

...ってなことで、自分的に探求する余地が多くある、ということでNexus6Pに決定となりました。これからしばらくAndroid研究に重点を置くことになりそうです。
f:id:tadakazu1972:20151205160020j:plain

jQuery、Google Map、csvでWEBコーディング

この週末はゲームプログラミングはお休みで、お仕事がらみで試行錯誤をしていました。

正直、WEBサイトはサンプルを動かすぐらいで、きっちりとコーディングした経験値がほとんどないので、あーでもないこーでもないともがき、なんとか依頼のものが実現できたのでホッとしております。
頭ではできるはず、とわかっていながらも、ブラウザを相手にするWEBのコーディングの「クセ」といいますか、「勘所」を押さえないといけないので、時間がかかりました。でも、おかげでレベルアップできました。

今回の依頼は、毎月更新される施設情報のcsvをもとに、左手側にリスト表示+アコーディオン、右手側にGoogle Mapで表示する、というものでした。

特に、jQueryを使ってcsvを読み込んだあと、表示するリスト成分をHTML生成しながら、cssで表示、非表示を切り替えるというアプローチが通常の?プログラミングからするとそれはそれは気持ち悪いといいますかなんといいますか。まあでも、確かにこれでアコーディオンが実現できるのは魅力的なんですよね。

あと地味につらかったのが、リスト表示されている施設をクリックすると、Google Mapの表示を連動させるのですが、もともとGoogle Map上にはその施設の種別ごとにアイコンを表示させているので、クリックした施設をあらわす標準マーカーの経度をちょいずらして表示させているのですが、この「ちょいずらし」がMapのズームに応じて変更しないといけない、というものでした。getZoom()なんというAPIがあるのね。あとはひたすらzoom 17のときは0.0006、18のときは0.0003いや、0.00035か?と調整…。くじけそうになると下町ロケットを思い出して乗り切りました。

まあでも、やってみて驚いたのは、サーバーやデータベースがなくても、csvjQueryでそこそこ動きのあるWEBページつくれるんだ、ということ。
今回、とても重要なことは毎月のデータをメンテする方がフツーの人である、ということ。Excelは使えて、csvファイルをアップロードすることはできる一般人で、それ以外の作業は一切発生しないようにしなければいけない。でも、大層なシステム構築しなくても、ブラウザでかなり高機能なことができてしまう…。いい時代になったもんですね。

27インチ4kモニタ買いました。画面広ッ!コーディング最高。

ブツはLG 27MU67
マシンはMac book pro 13inch retina mid2014
使用目的は完全にプログラミングの作業領域拡大一点張りです。

一ヶ月ほどうんうん悩みました。
最大のネックは、このMBPだと4k@30hzまでしか対応できないことでして、いろんなブログやレビューを見てもマウスカーソルがちらつく、カクつくなどの評価がありかなり不安になっておりました。
また、あまりコーディングに目的を定めた方もおられないため、自分の最大の目的である作業領域の拡大が本当にできるのか、ということの確証が得られないまま、ポチッたので半ば祈りながらの購入でございました。

結果は...満足です。正直なところ、ホッとしました。
実は、やっぱりこのMBPだと、モニターの最大領域である3840x2160は「低解像度」でしか使えないのです。そうです、retinaにならないのですよ。
ディスプレイ設定に「低解像度」の文字を見たときは「まじかああああ」と落胆しましたが、これが意外や意外、全然コーディングに耐えられるんですよ。これにはホッとしました。
その理由がまたおもしろくて、低解像度なんですけど、解像度が高くてモニターサイズが27インチとそこそこ小さいので、文字がボヤけて見えない、つまり「低解像度」というほどの荒さを実感しない、というものなんです。
もちろん、画面に思いっきり近づいてみれば荒さがわかるのですけど、実際に27インチを視野に入れる距離で見るとわかりません。当然、これは個人差があるかもしれないですが、少なくとも私にとっては全然OKのレベルです。
逆に、retinaにこだわると1920x1080の「ふつうのHD」の画面領域しか確保できないので、いくら文字がキレイでも作業領域を拡大したい私には不満なんですね、こっちのほうが。
ただ、途中の2560とか選択できるのかな?と淡い期待は選択に出てこず実現しませんでした。これはソフトいれるなりすればできるかもしれないのですが...。

ゲーム、動画目的の人はまた違った評価になるのかもしれませんが、ブラウザでサンプルプログラム見ながら、コーディングしたい私には目的がかなったのでした。
そうそう、これだけ画面が広ければゲームのマップ作成もはかどる...かも⁉︎
f:id:tadakazu1972:20151123235159j:plain

【iOS】「ねこひろい」アプデ審査完了【Android】RPG開発進捗

今週は順調に2つのOSで進捗がありました。

iOS
前々回のエントリーで書いていました「ねこひろい」のver2.0のアップデート審査ですが、無事5日間で完了となりました。
https://itunes.apple.com/jp/app/nekohiroi/id1030662126?mt=8&uo=4&at=10l8JW&ct=hatenablog
「ねこ缶」を登場させ、これまでの「追いかける」から「よびよせる」スタイルに大きくゲーム性を変更しました。ステージもランダムに、登場するねこもぶち、トラ、クロ、そしてミックスをランダムにしたので、作者としても「次は何が出てくる?」と楽しめるようになりましたね。
今回も、以前報告したのと同様、ビルドしたアプリをアップロードしてからが「処理中」として、iTunes Connectから選択できない状態がしばらくありました。今回は夜中にアップロードして、2時間ぐらい待ってみたんですがダメなのであきらめて寝て、翌日に申請しました。もうこれはデフォですね。

前回のver1.1は約100人の方にアップデートしていただいて、
今回は約50人。だいたい半数ずつ減っていく感じですかね〜。まあ、個人製作でほぼネタもののアプリですから…。
「ねこひろい」はver2.0で自分的にはやり遂げた感があります。
で、頭の中は別のゲームのイメージが湧いてきはじめました。次もやっぱり大量のキャラを動かしたいですね。
というか、この「ねこひろい」で確信したのですが、iOSはアクションゲーム専用OSですよ、ホント。
もうCPUとOS一貫製造のメーカーの本領発揮はここにあり、だと思います。
ちっちゃな2Dゲームがメインの自分の製作スタイルではMETALまでする必要はなく、SpriteKitで存分に大量のキャラを動かせます。
なんというか、ベーマガでできなかったことができている未来、の感覚です。

Android
前回のエントリーでボスを登場させて、一旦今回のアプリ開発の最後の枠を設定したことによって、意識が中身のほうに向きはじめました。
特に明確なプロットを作るわけでもなく、登場人物にいろいろしゃべらせていると、おぼろげながらストーリーが浮かんできて、
今はそのセリフとストーリー進行を管理するフラグの処理と、マップの変更やちょっとした演出をすべて同時に進めていく不思議なスタイルが確立されつつあります。
これ、説明が難しいのですが、Macを立ち上げて、Android Studioを立ち上げているんですけど、セリフが長文になってノッてくると、まるで小説を書いている気分なんですね。
で、このセリフを表示させるためにダイアログの処理やらデータのフラグ処理をちょこちょこコードをいじり、場合によってはマップ変更の処理を追記。
私小説のアプリというか、本でもないし、RPGのスタイルをとった小説というか・・・。
Nexus7の一画面にセリフがおさまらない画面を見て笑ってしまいました。我ながらこれゲームか?と。
f:id:tadakazu1972:20151115154038p:plain
でも、そういう枠にとらわれないのも個人製作ならではだよねー、とまったく予想外に手が動くことが楽しくて。
あー、AndroidRPG製作用OSだなーと実感しております。
f:id:tadakazu1972:20151115154645p:plain