スライドパズルにスライド操作を追加した


スライドパズル に駒をスライドする操作を追加した。
自分でやってみて、スライド出来ないと、物足りなかった。

別アプリにしています。
スライドする操作では 5×5 や 6×6 では 駒が小さくて触りにくい。
4×4 3×4 4×4 の3パターンに絞りました。
問題数も200問に減らしました。

アプリとソースコード
アプリのダウンロードと、ソースコードは、Google code から

スクリーンショット
slide puzzle


Dialog に OnShowListener を実装する


Dialog の OnShowListener は API 8 (v2.2) から公開されていますが。
それ以前のバージョンでも @hide 属性でソースに入っています。
Dialog のソースを見たところ、メッセージハンドラーで実現しています。
v1.6 の Dialog に OnShowListener を実装してみました。

スクリーンショット
Dialog が表示されると、onShow という Toast を表示する。
alert dialog

ソースコード
デモのソースコードは、Google code から

メッセージハンドラーはこんなコードです。

private class ListenersHandler extends Handler {
	private WeakReference mDialog1;
	public ListenersHandler(Dialog dialog) {
    	mDialog1 = new WeakReference(dialog);
    }
    @Override
     public void handleMessage(Message msg) {
     	switch (msg.what) {
         	case SHOW:
             	Log.d(TAG, "Show");
                 ((OnShowListener) msg.obj).onShow( mDialog1.get() );
                 break;
        }
    }
}

呼出し側ははこんなコードです。

AlertDialog dialog = builder.create();
MyDialog my_dialog = new MyDialog( dialog );
my_dialog.setOnShowListener(new MyDialog.OnShowListener() {
	public void onShow(DialogInterface dialog) {
    	Toast.makeText(getApplicationContext(), "onShow", Toast.LENGTH_LONG).show();
        Log.d(TAG, "onShow");
	}
});

Launcher のサンプル


SDKに入っている ホームアプリのサンプルコード を com.android.launcher を参考に改良してみたが
サンプルコードには4個のソース・ファイルがある。
launcher には42個のソース・ファイルがある。
サンプルコード を改良するよりも、launcher をそのままホームアプリにした方が早そう。

donut(v1.6) の com.android.launcher をそのまま移植した。
そのままコピーして、ユーザアプリとして、コンパイルを通るようにしたもの。
ユーザアプリからアクセスできないシステム・プログラム・ファイルは、
launcher と同じようにコピーしてコンパイルを通るようにした。

ソースコードは、Google code から

スクリーンショット
壁紙の変更やウィジェットの配置ができる
launcher


ホームアプリにポップアップ・メニューを追加した


SDKに入っている ホームアプリのサンプルコード を改良した。

ポップアップ・メニュー
現行のホーム画面では、長押しすると、壁紙やウィジェットを選択するメニュー画面がポップアップする。
ホームアプリのサンプルコードには、この機能はないので、追加してみた。
なお、メニュー画面が出るところまで、個々のアクションは作っていない。

ソースコードは、Google code から

追伸
メニュー画面のアクション を作ってみた。

スクリーンショット
最初のメニュー画面 と 壁紙のメニュー画面
home popup wallpaper

ポイント
長押しなので、 onLongClick を実装すればいいはず。
com.android.launcher を参考にした。
サンプルには4個のソース・ファイルがある。
launcher には42個のソ・ファイルがある。
物量が違いすぎるので、必要なところだけ抜き出した。

launcher はこんなコードだった。

public boolean onLongClick(View v) {
	if (mDesktopLocked) {
        return false;
    }
    if (!(v instanceof CellLayout)) {
        v = (View) v.getParent();
    }
    CellLayout.CellInfo cellInfo = (CellLayout.CellInfo) v.getTag();
    // This happens when long clicking an item with the dpad/trackball
    if (cellInfo == null) {
        return true;
    }
    if (mWorkspace.allowLongPress()) {
        if (cellInfo.cell == null) {
            if (cellInfo.valid) {
                // User long pressed on empty space
                mWorkspace.setAllowLongPress(false);
                showAddDialog(cellInfo);
            }
        } else {
            if (!(cellInfo.cell instanceof Folder)) {
                // User long pressed on an item
                mWorkspace.startDrag(cellInfo);
            }
        }
    }
    return true;
}

うんと簡略化して。

public boolean onLongClick(View v) {
	showAddDialog(null);
}

以降 芋づる式に必要なコードを追加していく。
結構 手間がかかった。


スライドパズルに成績を追加した


先週作った スライドパズル に成績を記録する機能を追加した。
自分でやってみて、成績が出ないと、物足りなかった。

(1) メニューボタンから起動します。
(2) 成績の一覧が表示される。
(3) 成績をメールで送信することも出来ます。

今後の課題
(1) スライドパズルでありながら、駒はスライド操作できません。(^^;
移動させたい駒をクリックしてください。

2011-09-30
スライド操作 に対応した

疑問
量的な制限が分からなかった。
成績をメールで送るのに、全回答を1つの文字列にしている。
仮に、1回答あたり100Bとして、5000回答なら、500KB になる。
メモリの許す限り大丈夫なのだろうか。

アプリとソースコード
アプリのダウンロードと、ソースコードは、Google code から

スクリーンショット
slide puzzle score


Android アプリマスターコース 第5日目


android master banner

2011年9月18日(日)にニフティ本社で行われた RainbowApps 主催の Android アプリマスターコース にアシスタントとして参加しました。
コースは、5時間×全5回で、毎回2本づつAndroidアプリを作成するもので、先週の第4日目  の続きで最終回の第5日目になります。
講師は、オクトバの 丸岡和人 さんです。

■ 9本目のアプリ
受講者も慣れてきたようで、思ったように動かないというサポートは減ってきました。
代わりに、アプリの応用についての質問がありました。

(9) LiveWallpaperアプリを作る
・WallpaperServiceの仕組みと使い方
・お絵描きサンプルアプリFingerPaintの応用
・onTouchEventの使い方

gallery wallpaper

■ 10本目のアプリ
Google Map を使用するためには、Google から API Key を取得する必要があります。
その前段階で、自分のPCにて keytool を使って フィンガープリントを取得します。
ここで苦戦する人がいました。
keytool は Windows の場合は “C:\Program Files\Java\jdk1.6xxx\bin¥”にあります。
MAC の場合は、/usr/bin/ にあります。

(10) 現在 のジョギングのルートと過去の走行履歴をGoogle Map上に表示し比較できるアプリを作る
・現在位置の取得
・GoogleMap上に走行ルートを表示
・過去の記録を表示

gps logger

■ マーケットへの登録
最終回ということで、マーケットへの登録方法の説明がありました。
登録料として Google さんに25ドル支払います。
無料アプリは何本登録しても無料です。
無料アプリは売上げの3割が手数料です。

■ ブレイクタイム講座
アシスタントの 高橋信也 さんから、アプリの売上げモデルについて、講義がありました。

1.有料アプリと、無料アプリに広告を付けるのは、どちらがいいか。
有料アプリは、ダウンロード数が100程度らしいです。
100円としても、収入は 7,000 円くらい。
無料アプリは、ダウンロード数が2000で、CPM (Cost Per Mille) が10円として、収入は 16,000 円くらい。

2.広告は何がいいか。
現在 10社以上あるそうですが、手初めは下記の3つから。
(1) AdMob
(2) Ad Maker
(3) MicroAd

参考
Androidマーケットの有料アプリ、約8割が100ダウンロード以下
CPM (Cost Per Mille / cost per thousand)

関連
Android アプリマスターコース 第1日目
Android アプリマスターコース 第2日目
Android アプリマスターコース 第3日目
Android アプリマスターコース 第4日目
・Android アプリマスターコース 第5日目


マインドストーム ライントレーサー


YouTube Preview Image

自立走行の定番 ライントレーサー をマインドストームで試してみました
マインドストームにはカラーセンサが付属しています。
これで床面の濃淡を2値で判定します。
明るければ左方向に、暗ければ右方向に、進むようにします。
これらは、書籍 入門 LEGO MINDSTORMS NXT にて説明されています。

プログラム

試験走行
ロボットは Shooter bot 2 と同じものです。
少しパラメータの調整が必要でした。
モーター出力が100%だと、簡単にコースアウトしました。
出力が70%くらいがいいみたいです。

完成
首を振りながら進む姿がちょっと可愛い。
上段のビデオ。

関連
マインドストーム Shooter bot 2
入門 LEGO MINDSTORMS NXT 第2版

参考
ライントレースのプログラム


DevQuiz の スライドパズル


DevQuiz に出題されていたスライドパズルをアンドロイドのゲームにしてみました。

DevQuiz はプログラムで解答を出す形式ですが。
このゲームは人手で解きます。
全5000問 です。
君は何日で解けるか (笑い)

今後の課題
(1) スライドパズルでありながら、駒はスライド操作できません。(^^;
移動させたい駒をクリックしてください。
(2) ゲームアプリでありながら、成績が記録できません。(^^;
指し手を記録したいときは、logcat を利用ください

2011-09-20
成績を記録する ようにした。

2011-09-30
スライド操作 に対応した

アプリとソースコード
アプリのダウンロードと、ソースコードは、Google code から

スクリーンショット
開始画面 と ゴール画面
slide puzzle startslide puzzle goal

logcat への結果出力
指し手を記録したい人は、エクリプスを起動して、コピペしてね。
slide puzzle logcat

参考
GDD 2011 DevQuiz 開始のお知らせ
GDD2011 DevQuiz のスライドパズルに挑戦してみました


Android アプリマスターコース 第4日目


android master banner

2011年9月11日(日)にニフティ本社で行われた RainbowApps 主催の Android アプリマスターコース にアシスタントとして参加しました。
コースは、5時間×全5回で、毎回2本づつAndroidアプリを作成するもので、先週の第3日目  の続きで第4日目になります。
講師は、オクトバの 丸岡和人 さんです。

■ 7本目のアプリ
アプリを起動して落ちる現象で苦戦する人がいました。
ほとんどは Activity 名のタイポが原因です。
LogCat に落ちた理由が書かれているので、しっかり読みましょう。

(7) らくらくフォン風ホームアプリを作る
・ホームアプリの仕組み
・ボタンの配置
・レイアウトの説明
・画像の利用(Resourceの使用方法)
・電話アプリの呼び出し(Intentの発行)

rakuhome

■ 8本目のアプリ
受講者も慣れてきたようで、コンパイル時のエラーに関するサポートは減ってきました。
実行時に思ったように動かない場合のサポートが多くなってきました。

(8) ニュース情報のウィジェットアプリを作る
・ウィジェットの仕組み
・サービスの仕組み
・AlarmManagerの仕組み
・XMLのパース処理
・AsyncTaskによる高速化

newswidget

■ ブレイクタイム講座
アシスタントの 高橋信也 さんから、アプリのプロモーションについて、講義がありました。

1.プロモーションの方向性として2つある。
ひとつは直接的な収益向上、もうひとつは話題作り。
どちらなのかは明確にすべし。

2.プロモーションには下記のようなチャネルがある。
費用対効果を考えて活用しよう。
(1) アドネットワーク
(2) レビューサイト
(3) メディア広告 (WEBサイト、雑誌)
(4) キャリア連携

関連
Android アプリマスターコース 第1日目
Android アプリマスターコース 第2日目
Android アプリマスターコース 第3日目
・Android アプリマスターコース 第4日目
Android アプリマスターコース 第5日目


入門 LEGO MINDSTORMS NXT 第2版


マインドストーム に付属している NXTソフトウェア には親切なマニュアルがついている。
しかし、PCで読むオンラインマニュアルなのと、英語なので、読みやすいとはいえない。
そこで、概要を把握するために、この本を読んでみました。
高校生くらいを対象にしている感じで、図も多く文章も平易でわかりやすかったです。