スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ベジェ曲線を使う

あまりベジェ曲線を使ったことがないのですが、Androidアプリのアイコンが汚いかな…と思ったので、書きなおしてみました。

まぁもともと低解像度だけ作っていたアイコンを無理に引き伸ばしてアンシャープとか適当に編集したので、高解像度用のアイコンでは結局ぼやけてしまっていました。そのうえ、曲線が汚い(フリーハンドで描いていた)ので、今回修正したわけですが、なんとか少しはまともになったのかな…?

左が512x512の超高解像度アイコン(クリックで実際の大きさに拡大)、右が72x72のアプリ内に埋め込んで使う用のアイコンです。

Before
「音量さん」アイコン「音量さん」アイコン 72x72


After
「音量さん」アイコン改「音量さん」アイコン改 72x72

Androidアプリ(ゲーム)「ラムゼーゲーム」開発記

ということで、Androidゲームで「ラムゼーゲーム」というアプリを作りましたので、お知らせいたします。



「ラムゼーゲーム」アイコン「ラムゼーゲーム」
お互いに15本の辺へ色を塗っていき、先に三角形を作ったほうが負け!

https://market.android.com/details?id=com.rea33.android.ramseygame


Android端末からは、以下のQRコードよりダウンロードページに移動できます。
「ラムゼーゲーム」QRコード



ゲームの種類としては既存のものですが、国内ではあまり馴染みがないゲームではないでしょうか。
丁寧な解説をされているページがありますので、URLを記しておきます。
すぐるの算数カルチャー講座

↑実際にゲームをすることもできます。おそらくJavaScriptで実装していると思います。

このブログには書いていないのですが、Androidゲームでは前に「15パズル」も作っていました。タッチ操作が活かせるアプリを作りたいと思い、「マウスでパネルをクリックするよりは指でタッチしたほうが操作性が良さそう」ということで、有名なパズルではありますが作っていたんですね。(15パズルについては、また別の日に開発記を書くと思います。)

同じように、「ラムゼーゲーム」もマウスではなく、指で頂点をタッチして彩色するという操作ができればということで、Androidアプリを作りました。そして、COM対戦では必須の人工知能(AI)の実装を行なうというのが、15パズルとの大きな違いですね。

ラムゼーゲームのルールは単純で、手順としては、お互いに合計15本の辺を彩色していくというものです。コンピュータは赤・自分は青で塗るのですが、先に三角形(頂点どうしを結んでできる三角形)を作ってしまったほうが「負け」になります。つまり、うまく三角形を作らないように辺を選んでいく必要があるのはもちろん、勝つためには、相手に三角形を作らざるを得ない状況に追い込む戦略も立てなければいけません。

適当に辺を塗って勝つ場合ももちろんあると思います。しかし、COMに搭載した人工知能では、難易度が高く設定されるほど、何手先もの手を読んで、戦略的に色を塗る辺を選ぶを選ぶようになっています。


ここから、人工知能(AI)についてですが・・・

辺は合計15本あります。相手(COM)が先手だとすると、最初に選べる辺は15本。次に自分が選ぶ辺は14本になります。その次に、再度相手が選ぶ辺は13本。…このようにして、15本の辺を順に選んで塗っていく方法は、全部で

15! = 15×14×13×・・・×3×2×1 = 1 307 674 368 000 通りあります。

1兆を超えます。

実際は15本塗り終わるまでに決着がつく場合があるので、もっと少ないんでしょうが、COMが先の塗られ方を、塗る前に考えていたら、つまり先読みをしていれば、次にどの辺を選べばよいか、という戦略が立てられるということになります。よく、コンピュータがチェスや将棋で人間と対戦するなんていうニュースがありますが、基本的にこのような先読みを行なっています。人間の方も何手か先までは先読みをしながら戦っていくと思われるので、思考としては似てるかもしれません。

まぁ、このままでは1兆以上という、あまりにも厖大な手の数を調べなければならないので、そこまでは先読みをするのは現実的ではありません。そのため、このゲームもそんなに先の手までは読まないようになっています。

ただ、終盤になると、最後まで手を読むことが現実的にできるようになります(例えば、ラムゼーゲームの場合、10手目あれば、最大で6! = 6×5×4×3×2×1 = 720通りの手を調べるだけでOK)

本ゲームの先読みでは、COMが先読みできる範囲で一番イイ手を打つために、COMの相手(つまり、自分)も一番イイ手を打ってくる、という前提で戦略を立てています。ミニマックス法とよばれる方法です。両者とも同じレベルで先読みをし、一番いい手を打つという前提で次に打つ手を決めることにより、「理詰めで確実な手」を選ぶようになっています。なかなかうまく説明ができませんが、まぁ、ネット上に資料はたくさんありますので・・・(^^;

正確には、さらに効率的に先読みができるアルファベータ法という、ミニマックス法の改良版を実装しています。

実装はこのへんが一番難しかったですかね。先読み方法の説明はわかっても、どうコードを書いていいのかということで、かなり戸惑っていました・・・

後は難易度の調整時でテストを重ねる過程で、AIが思考し過ぎで途中で画面が止まったりとか・・・
端末では種類によってはCPUの性能に差があると思うので、自分ので動作確認が済んでも、他の端末でエラーを起こさないかは不安でもあります。(といっても「強制終了しますか」のメッセージがでるだけで、致命的なエラーではなく、終了させずに待機していれば問題はないと思うのですが・・・)

なにはともあれ、遊んでいただければ幸いです。
(難易度がHARDで、かつ自分が先手だと、かなり勝つのが難しいようになっています…)




開発中の画面とか(Androidアプリ)

こんなの作っています...

開発画面

開発画面2

Androidアプリ「音量さん」開発記

今から1ヶ月前に、Androidように「音量さん」というアプリを作り、公開しました。



「音量さん」アイコン「音量さん」
各種音量の一括設定アプリ。表示用のウィジェット(1x1)もあります。

https://market.android.com/details?id=com.rea33.android.onryosan

Android端末からは、以下のQRコードよりダウンロードページに移動できます。
音量さんQRコード




 何をつくろうか考えていたのですが、まずは、初めて作るAndroidアプリということで、「なるべく簡単にできそうなのがいいかな」と思ったんですね。

 それで、着信音量や、メディア生成音量など、Androidでは「音量」の種類が多いかなと思っていたのと、せっかくウィジェットというものがあるからそれも作りたいなと思ったので、試しに音量設定・表示アプリを作ることにしました。

 Androidアプリの作成について、結構参考になるサイトは多かったです。いろいろなクラスとそのメソッドや定数を網羅しているページ、いわゆるリファレンスは英語サイトしかないのですが、検索するとブログを中心に丁寧な説明が多く、非常に助かりました。

 特に、アプリで使える部品(ボタンやテキストボックス、シークバーなど)を確認した上で、各種音量をシークバーを並べてそれぞれ調節できるような画面がいいかなと思っていたわけですが、部品の配置方法や機能の説明資料も豊富でした。

 それどころか、普通に「音量設定アプリをつくろう」と、音量設定アプリの作り方を丁寧に説明されていたブログがありました。http://labs.techfirm.co.jp/android/k-matsuda/180

 まったく新たに作る必要はないなぁと思うくらい、自分がつくろうと思っていた画面構成(シークバーの配置など)でしたね。ただ、どちらかというとウィジェットで音量一覧をコンパクトに表示しておくのがやりたかったんで、結局作ったわけですが、

 一般のアプリに対してウィジェットについては、なかなか日本語で説明された資料は少なく、しかも、思い通りに動かなかったりで、四苦八苦でした。とくにウィジェットをタップするとそのままアプリを起動(アクティビティとよばれる「ページ」を開く)するのが、なかなかうまくいかなくて、3日は悩んでました。多くのウィジェットは、たいていタップするとアプリが起動するようになっているので、そんなに難しいコーディングをするはずはないですよね。

 ウィジェットの仕様(ライフサイクルや設置できる部品の種類、監視するイベントなど)が一般のアプリとして表示するアクティビティとは異なったりするので、普通のアクティビティをつかったアプリの理解もままならぬ状態でウィジェットまで手を出すべきではありませんでした(^^;

 一応、アクティビティ等の最低限の理解をしておこうということで、事前に名刺管理アプリの作り方というのを見て、まずは読んだ通りにつくってみようとは思ったんですが、途中からなんかめんどくさくなって、結局ソースをダウンロードして、記事を斜め読みしながら適当に動作確認しただけでした…

 まぁ、一通り動作するものができたのでいいですが、他にも一括で音量設定をするアプリはありまして、すごくデザインがよいものとか、たくさんあります。

 私のは「できるだけシンプルに」ということで、例えば、音量設定アプリの多くは、マナーモードの設定もまとめてできるようになっていると思うのですが、マナーモードは何かのボタン長押しとかですぐにできるから別にアプリには必要ないんじゃないか、とか、音量を表示するくらいでウィジェットのサイズで幅とってもしゃーないからサイズは最小にしよう、とか、いろいろ手抜き利便性の面での理由を考えて、結果、こんなのになりました。

 Android Marketへの登録もしたわけですが、なぜかAndroid Marketではアプリ登録時に512ピクセル×512ピクセル(512x512)という超巨大サイズのアイコンを登録しなくちゃいけないのがびっくりでしたね。

 それを知らずに、70x70くらいのサイズのアイコン(記事上部に表示されている、「音量」ならぬ「怨霊」さんのアイコン)しか作ってなかったので、むりやり、ぼかし、アンシャープを繰り返しつつ拡大しました。PC版のMarketのページに表示されているのですが、やっぱあんまり綺麗に表示されていませんね。しかも、結局縮小表示されているので、何で512ピクセル四方のアイコンが必要なのかは謎のままです...

Androidアプリの開発記録とか...

かきましょうかね。
義援金募集
FC2「東北地方太平洋沖地震」義援金募集につきまして
プロフィール

れあ

Author:れあ
Twitter(@reakoirer)
数学の問題出題(@mathtam_jp)


ニコ動のユーザーページ


メール:
reakoirer.contact+blog[]gmail.com
([]を@に変えてください。返信不確実;;)

Twitter...A

れあ < > Reload

カレンダー
最新記事
最新コメント
カウンター
月別アーカイブ
カテゴリ
検索フォーム
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。