‘Weather Typing’のエントリ

Weather Typing 3.1を公開。ここまででWT2をベースにした作り直しは完了。UIがまだ分かりにくいところがあるのとさすがにマニュアルを作らないといけないけど。

バージョンアップのポイントは,去年のタイピングサミットでの要望の反映とバグ修正。特にロビー機能が使いづらかったのとリプレイがかなりバグっていたのを修正した。

この先は,ずっとやりたかった新たな機能の追加,なんだけど,いろいろ作りたいものがたまってきているので少し先かも。

それにしても,デスクトップアプリはダウンロード実行するハードルが高い。ブラウザで警告が出てOSで警告が出てウイルス対策で警告が出て,全て無視しないと実行できないとは。

WT3の進捗。ロビーというか対戦の仕方を改善しないといけないのでしばらく修正していたのだが,まずはチャットと対戦ウィンドウの分離,その他ロビーで表示するレベルの選択,状態表示,音再生などWT2が持っていた機能はひととおりできた。

2016013001

で公開しようと思ってロビーにつないでみたのだが,現バージョンも含めて問題点がたくさん。やっぱり実際に試してみないと出てこないバグがあるわけで,公開まではもう少し時間かかりそう。必要なのは分かっていてなかなかできなかったんだけど,WT1の開発の頃のようにできるだけロビー常駐するようにしてみます。

いつも年末にやっているソフトウェアのアップデート。MSDNは,去年PremiumからEnterpriseに強制アップグレードされたのだが,Premiumと同様2年で30万円のままらしいので更新。あとはOffice 2016。ついでに今まで使っていたWindows Live Mailも更新されなくなってしまったので,Outlook 2016に更新してみた。以前乗り換えようとしたときは重すぎて諦めたけど今のPCスペックなら問題なさそう。

といったところで終了だったんだけど,なんか突発的にお金が増えたのでAdobe CC Completeを衝動契約してみた。一週間で7年分も利益が出るとは。PhotoShopとIllustratorしか使わないけど。

WT3は・・・ずっとロビーのUIを考えてるんだけどいい案がなくて進まない。これ以上考えても仕方ないので,とりあえずチャット画面を別ウィンドウで開くようにしようかな。

タイピングサミット以来,忙しいのと英語数学の勉強をしていたせいでプログラムしてなかったのだが,そろそろ落ち着いた。とりあえずリハビリとして,しばらくほっておいたAnalog Book Readerのバージョンアップ。1ページ表示できるようにして欲しいという要望を何人かからもらっていたので実装してみた。他にも自分が普段使っていて欲しい機能をいくつかサポートしてみた。

Analog Book Readerは普段使っているので次はこれをやろうというのが自然に出てくるのだが,ウェザタイは普段自分が使ってないのでなかなか手が出せなかったりする。まずはタイピングの練習を復活させるところからやるというのが遠回りに見えて確実なのかも知れない。

前回のあらすじ

昨年,タイピングサミットに初参加してWeather Typingへの要望をたくさんもらい,来年は新バージョンを持ってくることを約束するのだった。

準備

てことで,WT3をなんとか対戦ができるところまで完成させたので,大会で使ってもらえるか売り込んでみた。予想通りWindows XPがネックにはなるものの,今年はWindows 7を数台用意する予定とのことで,了承してもらえた。自分も大会のトラブルシュートを兼ねて2日目に参加することに。タイピング自体は前日に一夜漬けをしたが,シングルプレイでギリギリレベル5がやっと。団体戦は去年1ワードしかとれなかったので今年は2ワード取得を目標にしよう。

当日

第7回タイピングサミットの2日目。ほぼ全員が月姫打online(TOL)をやっていたので少し教えてもらったり。去年プレイ動画を見たが,タイピングで戦略性を極めるとこういう感じになるんだろう。相手フィールドを見ながらどれだけのワードを溜めるかとか,キャラクターごとの特殊能力を使って逆転するとか,ぷよぷよ~んを連想するが,実力差があるプレイヤー同士でも勝負になりそうなのはよさそう。だが,やっぱりウェザタイはタイピング要素だけの方向性でいきたいのでこういった戦略性をタイピングだけで表現するのが次の課題。

WT3団体戦

午後の団体戦。WT3をこういった大会で使うのは多分初めてなので,途中で動かなくなったりしたら怖いなあ,という他の参加者とは違う緊張感を持ちながらの参加。間近で見たことでいろいろな要改善点が判明。特にウィンドウが小さいと4人目のプレイヤーの得点が隠れてしまうのは計算外だった。ニコ生配信もしていたので,問題文を大きくすると得点が見えず,得点を見えるようにすると問題文が見えなくなるという。団体戦の結果は他の方のレポートを見てもらうとして,自分はCチームの1人目で参加,5ワード取得。数字,英語,よく分からない言語などが混在したワードで,得意なワードなら取れるという斬新設計。でも得意なワードで戦うというのは新コンセプトでも考えているところで,大きなヒントになりそう。

そういえばワードがXMLになっていて,今回のワードを準備するのに苦労したとというのを聞いて,実は今まで通りテキスト形式のワードも使えるよ,という話をしたらショックを受けていた。マニュアルも用意できなかったので分からないですよね。すみません。スコアとかワードとか,互換性がとれるところはできるだけ互換性をとっています。

囲まれる会

団体戦の後,去年に続けて作者が囲まれる会を開催して頂く。団体戦で気付いたことも含めて改善点を列挙。言いたかったことと違う,言い足りないこと等あれば随時Twitter等で受け付けます。

  • Result画面を表示するのに一瞬固まる
  • カナ入力で「か」「ひ」などをShiftを押しながら打てない
  • 自分がワードを取ったときと相手がワードを取ったときで音を変えられないか
  • ウィンドウを小さくしたときに,4人目のプレイヤー情報を表示できない
  • Ctrl+何かのショートカットで画面が切り替わった後,ハイフン(のばし記号)が拡大縮小になってしまい打てなくなる
  • ネット対戦でホストができるかどうかが分かるようにしてほしい
  • 全体的に動作が重い
  • インターネット上に置いてあるワードを気軽に使えるようにしたい
  • レベルを日本語ワードと英語ワードで分けたい
  • XPで動かしたい
  • 記録をCSV等にExportしたい
  • 結果画面で,グラフ中のワードとスピードの両方を確認したい
  • ロビーでチャットをしながらシングルプレイがしたい
  • ロビー対戦以外で,対戦中に色を変えられない
  • ロビーに入るのにユーザ登録がいるのが入りづらくなっている
  • 対戦相手を締め切るボタンでしめきるといきなりゲームが始まる
  • 観戦モードのような,チャットが盛り上がる要素が欲しい
  • シングルプレイでもワードを混ぜられるといい
  • 入力方式のカスタマイズ
  • 英語以外の言語対応
  • 団体戦モード

なお,団体戦エキシビジョンでたにごんさんがリタイヤしたのは途中でハイフンが打てなくなったのが原因です。

次バージョン

今回,なんとかサミットに合わせてWT3を公開でき,大会で使ってもらった。ただ来年以降も使ってもらうには改善もいろいろある。それとは別に,本来WT3でやりたかったこともたくさんあるので,今回もらった要望なども合わせて作り込んでいく予定。

・・・でもラジコン作りとかもあるので作るのは遅いかも。

Weather Typing 3をリリース。WT2をベースに今の技術で作り直したバージョンなのでできることはあまり変わらないのだが,いろいろ改善はできた。何を改善したかは要望集を参照。主に去年のタイピングサミットでもらった要望を中心に,WT2の作りでは実現しづらかったものを修正した。

で,本当にやりたいのはここからで,以前の日記に書いた新コンセプトを作っていく。新コンセプトを意識して作ってきたのでいくつかのアイデアはすぐに実現できるかな。

ウェザタイのインストーラを作ってみた。公開は一通り全部の環境で試した後を予定。

.NET FrameworkとかVCランタイムとか必要なものが増えたり、ファイアウォールの設定を元に戻したりを考えるとインストーラがあった方が便利ってことで。慣れている人向けに今まで通りzipも公開する予定。

インストーラというとやっぱりInstall Shieldかな、使い慣れてるし、ってことでVisual StudioについてくるInstall Shield Limited Editionを調べたんだけど、ライセンスとか制限で悩むのが面倒なのでWiXを使ってみた。WiXはインストーラをXMLで作れるもので、Windows Installerを理解していれば割とサクサク作れる。

2015081301

Weather Typingのインストーラ自体はファイルを指定するだけなので簡単。その後、.NETとVCランタイムを入れるためBundleを作る。あらかじめ用意されている.NET用のパッケージを使うとアンインストールとかがうまくいかなかったので自分で定義したり、バンドルのUIが英語しかなかったので日本語wxlファイルを作ったり結構苦労した。

WT3テスト公開して,日々バグ報告が挙がってきている。致命的な問題も既にいくつか挙がっていて,すごく助かる。テスティングのクラウドアウトソーシングってことですね。単に他人にテストしてもらっているとも言えるけど,開発者としてはテストリソースが足りないのを補えて,ユーザとしても早く使えて貢献もできるという方法で,双方にメリットがある気がする。

今はまだバグ報告系のものが多いけど,使いづらい系の指摘も募集中ですので,使い慣れてしまう前に指摘よろしくです。その辺の指摘が欲しくて,あえて使い方を何も説明していなかったりもします。

Weather Typing 3をテスト公開。テストに参加して頂ける方は以下からダウンロードしてください。

Weather Typing 3テスト公開用ページ

まだまだバグが残っているので,バグを発見した方はtwitterでもメールでも何でもよいので,連絡よろしくです。

Twitterにも書いたけど,Weather Typing 3のテストバージョンは今月末に公開予定。一ヶ月テストして,9月正式リリース,その後新コンセプト版を検討かな。

WT3プロジェクト開始以来ずっと考えていた新コンセプトが決まった。「タイピングの奥深さが分かる仕組みと競い合う場」という感じで,いろんなタイピング要素を許容した上で,それを「ワードを早く打ち切った方が強い」の単一の価値基準で競うというもの。

タイピング要素は,TODみたく動体視力とか反射神経とかタイピングに関係の薄い要素は排除して,WTらしくガチな要素。例えばどんな入力方式か,ローマ字のカスタマイズの最適化,どれだけ難しいワードを打ったのか,など。今までも結局はこの辺りの要素が含まれて対戦結果が決まっていたわけだけど,それを,見て分かるようにしたい。今までのWTだと「早いなあ」で終わりだったのだが,「上級者はこんなことしてるのか」というのが分かるように。

で,コンセプトが決まった後いろいろなアイデアが出てきているのだが,どうしよう。締切まで時間がないのと,このコンセプトだとWT2ネットランキングのリセットが必要なんだよね。一旦WT2を使いやすくした版を作ってから別ものとして出すか迷い中。

余談だが,このコンセプトまでくるのにはいろいろヒントがあったわけで,それぞれ感謝。
・タイピング同人誌でタイピングの奥深さを知ったこと
・タイピングサミットでもらった要望の中の隠れた需要
・折角作るなら戦略性を上げて対戦特化すれば? というY氏のアドバイス
・ぷよぷよ(?)

WT3。スコアファイルの構成が決まった。ついでに公開鍵を使って私が署名したファイルだけをアップロードできるようにしてみたり。掲示板でちょうど指摘があったけど,ワードのランダムアルゴリズムもDRBGを使ってワードを原理的に予測不能にしたりして暗号技術をふんだんにつかっている。今時のアプリ開発ではこういう技術は必須ですね。

対戦もローカルで動いてきたのでインターネットを介した対戦をしてみた。が,結局対戦はうまくいかず。UXとかバグとかいろいろ課題が分かったので,テスト公開はもう少し修正してから。

課題の一つで,TextBoxの挙動がおかしいというのがあって,以下のようなTextBoxを作ると,IME変換中にIME入力すると,それまでに入力した文字が消えてしまうと言うもの。どうもUpdateSourceTriggerがIME変換時もProperty変更だと思っておかしな動作をするっぽい。


回避策だけど,UpdateSourceTriggerを手動でやればいいかと思って,以下を作ってUpdateSourceTriggerを消してみた。

public class IMETextBox : TextBox
{
    protected override void OnTextChanged(TextChangedEventArgs e)
    {
        GetBindingExpression(TextBox.TextProperty).UpdateSource();
        base.OnTextChanged(e);
    }
}

この後IME変換中だったらUpdateSourceしない処理を付けようとしてたんだけど,何故か上のコードだけでちゃんと動いてしまった。なんか将来動かなくなりそうだけど今は時間がないのでこれで。適当な対策なので,使う場合はWPFのソースを見て原因を調べてから使って下さい。そして原因を教えて下さい。。。

Weather Typing 3 の対戦部分を作っているが,C#のソケットは同期関数と非同期関数がある。通信中にUIをブロックしたくないので,BeginConnect~EndConnectなどの非同期関数を使うのだが,相当めんどう。処理がその場で終わらないので処理の続きは基本コールバック関数になる。するとイメージ的には以下のようなワケの分からない処理になってしまう。実際には再AcceptとかするのでLambda式では書かないけど。

class Server
{
	Callback OnLogin;
	Callback OnError;

	void Start()
	{
		try
		{
			BeginAccept(() =>
			{
				try
				{
					BeginReceive(() =>
					{
						try
						{
							if("login")
							{
								OnLogin();
							}
						}
						catch(Exception)
						{
							OnError();
						}
					});
				}
				catch(Exception)
				{
					OnError();
				}
			});
		}
		catch(Exception)
		{
			OnError();
		}
	}
}

Analog Book Readerでも非同期処理で苦しんだけど,WindowsRTの場合はだいたいの関数がawaitできるのでまだよかった。同じ事をするのにこんなにすっきり書ける。

class Server
{
	Callback OnLogin;
	Callback OnError;

	async Task Start()
	{
		try
		{
			await Accept();
			await Receive();
			if("login")
			{
				OnLogin();
			}
		}
		catch(Exception)
		{
			OnError();
		}
	}
}

ゴールデンウィークで捗ったのでWeather Typing 3の進捗。ひととおり対戦ができるようになった。まだ旧ウェザタイの対戦を真似して作り直したところなので新しいことはあまりないが,画面の大きさを変えたり,一対戦ごとにルールや対戦相手を変えたりはできるようになっている。安定化したら一度テスト公開しようかな。

対戦モードはシングル,インターネット対戦,LAN対戦,ロビー,CPUの5つ。インターネット対戦は,ロビーを使うことでIPアドレス指定を不要にしたモード。IPアドレスが必要な場合はLANモードで直接指定もできる。

2015043001

2015043002

2015043003

アメリカ出張。飛行機の中で,Twitterで話題?のちきりんさん著「マーケット感覚を身につけよう」を読んだ。自己啓発書なんかは読まないからよく分からないけど,この本は多分そういうのとは違う気がする。

この本はマーケット感覚(価値の見つけ方)が主題の本だけど,お金が発生しないことでもあてはまることが説明されていて,自分の場合はフリーソフト作成にあてはまる。そこで,フリーソフト作成とマーケット感覚について考えてみたのでここに残しておこう。飛行機で映画見ない人はひたすら何かを考えてしまうわけですね。

フリーソフトというのは,自分のために作ったソフトを公開して,同じことに困っている人にも使ってもらおうという趣旨のものだが,ユーザは多い方がフィードバックももらえて作者もユーザも嬉しい。ただ,フリーソフトの性質上,万人に受け入れられるものではなく一部の人が嬉しいものなので,狭い市場でどれだけピンポイントでユーザに届けられるのかというのを考えないと,全く知られずに終わってしまう。

フリーソフトの価値

そもそもフリーソフトの価値って何? という話になるのだが,今まで漠然と考えていたのは以下。

企業が作るもの:

  • 万人受けするものを作らないと規模が出ないので,一部の人だけが満足するようなソフトは作りづらい
  • 作成者がユーザであることは希で,受注だったり上が決めた企画だったりするので,ユーザの感覚と開きが大きい

フリーソフト:

  • 採算度外視なので,一部の人しか満足しないようなソフトでも作れる
  • 作成者がユーザであることがほとんどなので,ユーザの感覚を熟知している

ゲームだと制作者の熱意によってまた違ってくるかも。個人的には,企業が作ったものはライトに使う分にはいいけど,ヘビーに使おうとすると使いづらい。逆にフリーソフトはその分野を知っている人ほど使いやすい印象。代表例だと,TV/DVD視聴ソフトとか電子書籍リーダーなんかは単なるコンテンツのおまけ程度で,使う人のことを全く考えていないUIが多い。

てことで,1年前に作ったAnalog Book Readerでは,そこの不満を解消するために,ユーザからしたらこういうのが欲しいんだよ,的な電子書籍リーダを作った。その辺は以前の日記で書いているのでいいとして。ただ,ダウンロード数はあってフィードバックももらっているんだけど,いまいちフィードバックをもらって解決して,的なループまでいっていない。

成功例

14年前,学生の時に作ったWeather Typingはマーケットをあまり意識しないで作っていたが,たまたまタイピングコミュニティの人達に届いてフィードバックをたくさんもらい,一緒に育てることができた。これを再度分析してみる。

Weather Typingは,当時SEGA ザ・タイピング・オブ・ザ・デッドをやり続けて,タイピング対戦だけに特化したソフトがあればいいのに,というきっかけで作ったが,対戦ができることが価値かというとそうではないんだろう。

その後,GANGASさんで紹介してもらってタイピングゲームのコミュニティから使ってもらうようになり,掲示板で議論しながら対戦機能を完成させていった。SWOTっぽく分析すると

  • 企業とは違い,作者がユーザに近いところにいるのでリアルなフィードバックが得やすい位置にいる
  • 作者自身がユーザなので要望の取り込み方,取捨選択の基準がしっかりしている
  • 学生で時間があるので,ロビーサーバでユーザとチャットしたり実際に対戦したりできた

という強みがあって,

  • 当時できつつあったタイピングソフトユーザのコミュニティ
  • TVでタイピングソフトが取り上げられて,ちょっとした流行になっていた

という環境があって,

  • 作者に直接要望を言えて,
  • タイピングソフト利用者にとって違和感なく実装してくれる

という価値をユーザに提供していたことになる。と思う。で,フィードバックを実現していくことで,「この作者に要望を出せば理想のソフトができる」という信頼を得られ,さらにフィードバックが来るようになり,ループができた。

今作っているWeather Typing 3も,タイピングサミットでもらった要望をまとめあげる予定なのでそこはブレていないが,もう少し小出しに出していかないと求めるものとずれていってしまういそうだ。一応この日記で情報は出していってるが,動くものを少しずつ公開していった方がいいのだろう。

今後の作戦

じゃあAnalog Book Readerはこれからどうしようか。今までは,ターゲットが毎日本を読むヘビー読書家なので,Windowsアプリだとあんまりそんな人はいないのかなあ,くらいに思っていた。

でもこの本を読んだ後だと,例えば

  • 現状,電子書籍リーダーは各社が自社のコンテンツを見るためのソフト(自主的な規制状態)になっているため,自由競争になっていない。
  • ユーザは,電子書籍リーダーなんて紙に比べて読みにくいでしょ,と思っているため,電子リーダーだからこそできる価値に気付いていない

という,ある種ブレークスルー直前状態なわけで,ここになんとか貢献できないかなあ,という想いがある。

究極的には,電子書籍リーダーが,単なるおまけ的なアプリから,紙ではできなかった読書体験をするアプリとして認知されるようにしたい。なので,そういうコミュニティ的な活動が盛り上がってAmazonとかを巻き込んでいく必要があるんだろう。まだそんなコミュニティはなさそうなので,盛り上げることになるのだが,それをどうするか,そこまでは本には書いてない,よなあ。

Weather Typing 3の対戦機能を実装中。対戦相手の管理を自力で実装しているのだが,ホストの作成や参加はロビーを使うようにするつもり。サミットでも言われたが,IPアドレスを調べて他の人に教える,というやり方は難しく,ロビーを使えば気にしなくて済む。旧ウェザタイはインターネット前提ではなかったのでああいう形だったが,今は前提としてもいい気はする。

ウェザタイのウィンドウからホストを選択するとロビーに隠し部屋ができて,チャットもその場でできる,って感じかな。ロビーもウェザタイのウィンドウに入れられるとなおいいけど。

で,ロビーを前提にするということは,対戦モードで使う名前をロビーの名前にするということになるが,折角なので,対戦モード,ロビー,ランキングのユーザは統一を図りたい。というより旧ウェザタイがバラバラになっているのがおかしいのだが。一番ちゃんと管理してるのはランキングなのでランキングのユーザに統一するのがいいけど,どうだろう。何かいいアイデアがあれば教えてもらえると助かります。


というところで技術的な壁が一つ。ランキングのパスワードはPerlのCrypt関数(LinuxのCrypt関数と同じ)で不可逆暗号している。復号はできないので,Javaで作ったロビーから同じアルゴリズムを使えないと統一できない。調べたところ,Linux Cryptアルゴリズムは当然公開されていて,鍵が特殊なDESらしい。Cの実装例はいくつか公開されていたので,参考にしつつJavaに実装はできた。

対戦モードの進捗としては,進んできてはいるんだけど,まだまだかかりそう。10月までに終わるのか。

Weather Typing開発。スコア関連機能とワード関連機能は実装完了。ということでついに対戦機能にとりかかる。ランキングとかロビー機能にも手を付けたいが,来年のタイピングサミットを考えると間に合わなくなりそうなので対戦機能を最優先で。

Weather Typingのワードファイルだが,ワードの名前とか著作者を入れたいので,txtからxmlにしようとしている。で,今までのワードファイルから変換するためにWordMakerを作り直しているのだが,アプリ一個作るってことなので思ったより大変。とりあえずこんな感じ。

2015020701

Weather Typingの開発は,ローカルランキングの実装が終わって,そろそろWebランキングの作り直しを考えているところ。以前作り直そうとしたときはJavaを考えていたけど,最近だと何がいいのかなあ。Java/Ruby/Python/PHPってところなんだろうけど,とりあえずRuby on Railsを勉強してみようか。

というところで明日からまたアメリカ行きなので,Ruby勉強しつつワードファイルの実装でも片付けるか。

Weather Typing V3開発。ランキング部分の実装をしているが,まあまあのUIができた。

2015011001

この辺のUIはなかなかよい例がなくて,WebとかExcelとかを参考に数日費やしてみたが,最終的に,ヘッダをクリックするとポップアップツールが表示されて,ソート,検索ができるようにした。もちろん部分インクリメンタルサーチや候補選択による完全マッチもできるので,Qwertyのみ見たいとか,公式ワード1~3だけ見たいとかもできる。DenasuページにあるオンラインランキングもこんなUIにしたいが,HTML+JavaScriptで実現できるかな。

冬休みということでWeather Typing 3の開発。プレイ結果をグラフで表示しようとしてここ数週間止まっていた。せっかくなのでWPFで描画できないか調べると、ItemsControlでグラフを描画する例があった。が、やってみると意外に面倒。点や線は確かにXAMLでBindingできるのだが、座標変換とかはコードビハインドなので、結局プログラムで描画してる気分。

というところで現状のUI。サミットの要望はほとんど入れてないし、まだまだ変わると思うけど。
Weather Typing 3

Weather Typing 3

Weather Typing 3

あとは対戦モードを開発しないといけないのだが、その前にV1との互換性とワードを考えてみる。

スコアファイルは今まで取ってなかった履歴情報も記録できるようにするつもりだが、過去の互換性は取るつもり。履歴ファイルとリプレイは、いろいろ改善するためにあえて互換性を切りたい。当然旧バージョンとの混合対戦も不可。

あとOSも,とりあえず.NET4.5で作っているのでWindows XPでは起動しない。Windows 7でも新しい.NET Frameworkインストールが必要だが、Windows Updateで入るのでまあよいか。

ワードについては、英語ワード追加と日本語ワードの整理。日本語は、ワード1~3をマージ+スマホで打ちにくい記号を外す+新ワードをいくつか追加して1つにまとめるというのを考えている。新ワードはぱじさんに話をしたところ、1日で400くらい作ってくれた。すばらしい。

タイピングの伝道師として有名なPocariさんがTwitterで発表していたけど、Japanese added to Intersteno Internet Contest、つまり国際タイピング競技会に日本語が登録されたらしい。タイピングサミットの時にウェザタイ対戦で盛り上がっている様子を動画に撮っていたのだが、このためだったんですね。多少は貢献できたということなのかな。

要望を受けていた画像の回転は実装完了。かなりいろんなところをいじったのでちゃんとテストする必要があって,リリースは来週かな。ついでにWindows Dev Centerにあるクラッシュレポートも対応したいんだけど,いまいちどこで落ちてるか分からない。

Analog Book Readerのユーザさんから英文メールが。縦横が入れ替わっているドキュメントを読むことがあって,その場合に読みづらいという要望。電子書籍リーダーとして足りない機能の一つなので,次のバージョンで対応する予定。簡単かと思ったが,ブックマークとかマーカーとかも回転させないといけないので結構いろんなところを直さないといけない。

Weather Typingの画面デザインを進めている。プログラミングと違ってどこまでいっても終わりがないのでここが一番時間がかかる。最初にWeather Typingを作ったときはUI知識もデザイン知識もなかったし、DirectXで画面を作っていたので使いにくいところがたくさんある。ゲームを終わらせないと設定変えられないとか、その辺を洗い出して再設計しているのだが、進まない。

Weather Typing 3.0開発,とりあえずQwertyのシングルモードは打てるようになった。スマートフォン版をWindowsで使えるようになった感じ。ウィンドウを拡大縮小できるし,文字の拡大縮小もできる。

2014092801

というところで設定とか対戦の実装を始めるのだが,出張でしばらく空いてしまいそうなので,その間にデザインを考えている。タイトル画面はこんな感じか? アイコン適当だけど。

2014092802

C#版Weather Typingを作る上でどうしても性能が出ない部分がある。キーボード入力部分と打鍵音再生。キーボード入力はWindows Messageでもいいけど,どうしても遅延が発生するのと,ツール対策上もっと低レイヤーが望ましい。打鍵音再生は普通に再生すると音飛びが発生しまくるし複数音同時再生ができない。

ということでC#でゲームを作るときに今は何を使うのか調べてみたところ,予想以上に混沌としていた。まず現行のWeather Typingで使っているDirectXをC#から使うManaged DirectXだが,.NET 4.0以降では使えない。そしてDirectXの後継XNAだが,別途ランタイムが必要で,既に廃止が決まっている。その後は・・・あれ,何もないのか。どうすればいいのさ。

てことでもうC#からP/InvokeでDirectXを呼び出しちゃうことにした。

最近The Gamification Revolutionという本を読んでいる。いろんなことにゲーム的な要素を取り入れることでモチベーションを高められるというもの。Twitterなんか,フォローア数とか,最近一般に使えるようになったTwitter AnalyticsのImpressionsとか,あからさまにゲーム性を出してる感がある。こういうのをフリーソフト作りのヒントにしたい。

Weather Typingはランキング,ロビーや大会などでライバルに勝つというのがモチベーションにつながるのは分かるけど,それ以上何かないかな。TOD2は成績評価してたり,タイプウェルはアチーブメント的なのを導入してるのか。打鍵数とか練習時間が記録されるとか,全配列で一定の点数を出すと何か嬉しいことがあるとか,パッと思いつくのはそんなところかな。

Analog Book Readerも開発中から何かゲーム要素を付けたいとは思っていて,読書時間を記録するようにしたんだけど,もっと積極的に読書を面白くする方法はないだろうか。本を配布しているサイトを運営しているなら,やりようはありそうなんだけどなあ。

Windows 7問題が解決したところで新しいWeather Typingを少し考えてみる。まずは今までの要望を整理。サミットで頂いた要望も追加しておいた。

Analog Book Readerは一般向けに作ったので機能をできるだけシンプルにしたけど,Weather Typingはコアなユーザ向けなので多少複雑でも機能性とカスタマイズ性を重視するのが基本路線。といっても今のままのUIでは使いづらいのでUIは考えないといけない。

少し前からiOS/Android版をWindowsに逆移植し始めていて,C#+WPFではシングルプレイはある程度できた。ここにiOS/Android版では付けなかった対戦機能とカスタマイズ機能を付けると基本は完成するはず。

それにしてもC#+WPFの開発効率はすごい。今までJava/Objective Cで作っていたUIをXAMLに移植するとコードが数分の1くらいになるイメージ。今までコードで表示していたユーザ情報やランキング情報も,Binding使えばほぼ何も書かなくていい。画面回転でレイアウトを変えていた部分もかなりめんどうなコードだったが,XAMLなら何もしなくても可変サイズに対応できる。ここまで楽ならより凝ったUIにするのも考える余裕が出る。

Weather Typing 2.2.3を公開しました。といってもWindows 7のフリーズを直しただけなので,今困っていない方はアップデート不要です。なお,Windows XPはサポート対象からは外しましたが,テストはしているので動かしてOKです。

前回原因は書いたので,解決策を書いておく。結局IMEとDirectPlayの初期化の競合は避けられず,IMEはウィンドウが作成されたときに自動でロードされてしまうので,DirectPlayの初期化をウィンドウが作成される前にやることにした。理論上はこれで競合する可能性はなくなったはず。

5年ぶりにバージョンアップしたけど,当時のビルド環境を揃えるのが大変だった。今のVisual Studio 2013でビルドしてもいいけど,XP SP2で動かなくなるし,新しい環境でのテストもしていないので,Visual Studio 2008を新たにインストールしたり,XPやVistaのテスト環境を作ったり,ついでにダイアログのバージョンとかReadmeとかマニュアルとか,結構めんどう。早いところC#版に移行しよう。

というわけで,協力して頂いた皆様ありがとうございました。