アンドロイドアプリサンプルソース ボタン動作編 | ゲームアプリの攻略情報から人気のスマホサービス・アプリを特集して紹介 | スマホ情報は≪アンドロック≫

アンドロイドアプリサンプルソース ボタン動作編

パズルDE★ぴょん
Android
アプリの言語 日本語
金額 無料
開発者 株式会社アンドロック
AndRockの評価

一言コメント

AndRockで開発したアプリ「パズルDE★ぴょん」のソースを解説します!

スクリーンショット

パズルDE★ぴょん パズルDE★ぴょん

パズルDE★ぴょんの使い方、レビュー

◆イントロダクション

AndRockで開発したアプリ「パズルDE★ぴょん」のソースを解説しながらアンドロイドアプリの開発情報を紹介します。
今回は主にボタン動作を中心にソース解説を行います。
ちなみに、私の開発経験は丸4年程です。
Webシステム開発やFlashを用いたオープンソーシャルゲーム開発に携わってきました。
Androidの環境もタダで構築・開発できるのでどんなものかなーと思い作ってみたアプリがこのスライドパズルゲームアプリです。
Javaは未経験でしたが、初挑戦のアンドロイドアプリ開発でここまで作成できました。

パズルDE★ぴょん

◆パズルDEぴょんの構成

◎ボタンの知識だけあれば大丈夫
おそらく多くの人がAndroidでHelloWorldを体験したあとは
ボタンの動作を確かめるのではないでしょうか。

今回のアプリは、ボタンの動作さえ知っておけば基本的にはOKです。

Buttonクラスを継承したClickButtonクラスを作成しそれに番号等をもたせることで、
今何の番号を表示しているか・どこの位置にいるかの情報をもたせています。

public class clickButton extends Button
{
	private int number_x;		//現在の位置
	private int number_y;		//現在の位置
	private int disp_number;	//表示されている数値
	private int inc_number = 0;	//通し番号
	private Boolean nullButton = false;//現在の番号がNULL(はっぱ)であるかどうか

	clickButton(Context context)
	{
		super(context);
		playingGameLevel = gameLevel;
		setBackgroundResource(image_01);
	}

あとは全体を管理する変数がひとつ用意してあるので
クリックした際に移動可能な方向へ数値の入れ替えを行います。

カエルの画像もsetBackgroundResource(リソースID)で画像を乗せているだけです。
クリックした際に移動可能な方向へ数値の入れ替えを行います。
カエルひとつの動きはこれだけです。

Button kaeru_img = new Button(this);
kaeru_img.setBackgroundResource(R.drawable.kaeru);
kaeru_img.setOnClickListener(new OnClickListener(){
    		@Override public void onClick(View v) {
    			clickButton btn = (clickButton)v;
				moveManage.moveButton(btn);
    		}
		});

▼MoveManage(数値移動管理)クラス

//かえるボタンとはっぱボタンを上下左右入れ替える処理
public void moveButton(clickButton move_btn)
{
	//タッチ回数カウント
	touchStep++;

	int num = move_btn.getIncNum();

	//左の番号
	int left = num - 1;
	//右の番号
	int right = num + 1;
	//上の番号
	int top = num - playingGameLevel;
	//下の番号
	int bottom = num + playingGameLevel;

	if( left >= 0 && clickButtons.get(left).isNullButton()
		 && num % playingGameLevel != 0)
	{
		changeButtonList(move_btn,clickButtons.get(left));
	}
	else if(top >= 0 && clickButtons.get(top).isNullButton())
	{
		changeButtonList(move_btn,clickButtons.get(top));
	}
	else if(right < playingGameLevel*playingGameLevel &&
			num % playingGameLevel != playingGameLevel-1 &&
			clickButtons.get(right).isNullButton())
	{
		changeButtonList(move_btn,clickButtons.get(right));
	}
	else if(bottom < playingGameLevel*playingGameLevel
			&& clickButtons.get(bottom).isNullButton())
	{
		changeButtonList(move_btn,clickButtons.get(bottom));
	}
}
//数値を入れ替える処理
public void changeButtonList(clickButton bef_button,clickButton aft_button)
{
	int tempNum = bef_button.getDispNumber();
	bef_button.setDispNumber(aft_button.getDispNumber());
	aft_button.setDispNumber(tempNum);
	//番号が揃ったか(完成したか)チェック
	checkComplate();
}
//完成したか確認
public void checkComplate()
{
	for(int i=0;i< (playingGameLevel * playingGameLevel)-1;i++)
	{
		if(i+1 != clickButtons.get(i).getDispNumber())
		{
			//完成していない
			return;
		}
	}
	//完成したらダイアログを表示
	showComplateDialog();
}

あとはダイアログとかSQLLiteの処理など細かいものも完成品には入っていますが
正直なくても見た目を整えればカタチになるものはなるので、
まずは数字がうごいて何となく形になった!というだけでも達成感を味わえます。

ちなみにタイマー処理が大変だった印象があります。
もう少し簡単に出来るといいなと思います。(きっともっと良い方法があるのではと・・)

//パズルでぴょんのタイマー処理
public class gameTimer extends TimerTask
{
	static int count = 0;
 :
	@Override
    public void run() {
      handler.post(new Runnable() {
        public void run() {
        	count++;
        }
      });
    }
(省略)
 :

◆苦労話

◎ゲームの手詰まり
出来たと喜んで上司に確認をしてもらったのですが
ランダムに番号を配置するだけではゲームがクリアできない(手詰まりになる)ケースがあることを指摘されました。

15パズルの系統のパズルは、単にランダムに数字を配置しただけでは、
ゴールに到達しない場合があります。よく知られているように、
上の 15 パズルのゴールの盤面から 14 と 15 を入れ換えた盤面は、
ゴールに到達できない不可能な盤面です。
ランダムに数字を配置して問題を出題する方法では、1/2 の確率で正解のない問題になってしまいます」

★詳細はこちら


ということで、まずは完成状態から数字をシャッフルしていくことで対応しました。
この他ちゃんと計算する方法もあるようなのですが
メモリリークも怖いし、ということでシャッフルにしたのです。

◎メモリリーク?
アンドロイドアプリを開発しているとメモリリークの話題が出てきますよね。
「パズルDE★ぴょん」でもリソースを使ってなるべく解放・再利用・・を意識して作りました。
これくらいのアプリだとあまり気にする必要もないのですが、気にしておくにこしたことはありません。
突然エラーで落ちてアンインストールの対象になってしまうのは悲しいですよね。

◆裏話

◎どうでもよくないタイトルと素材
タイトルを決めるのはアプリの印象や方向性を決める大切な作業です。
なんでカエルにしたか・・・上司がカエル好きだから・・・というのもあるのですが
簡単なパズルゲームなので子供っぽいイメージでいいのかなということです。
一発でパズルだなと分かる名前とか。
他の案
・ぴょこっとパズル
・パズルだケロ
などなど・・・

あとは素材をいかに「それらしく」作るかもポイントになるのかなと思います。
同じ内容でも無地背景にボタンを並べるだけとでは当然印象が違います。
(クールな感じを演出するなら有りかと思います)

◎開発環境について
開発中、エミュレーターが動かなかったり、ソースが読み込めないなど意味不明な挙動をしていました。
私はEclipseを使用していたのですが、頻繁に「クリーン」を繰り返しながら作業を進めていました。
原因追求よりもPC再起動であっというまに解決したりします。

◆改善点

◎最大の反省点
パズルDEぴょんには画面遷移がいくつかありますが
Androidの画面遷移の基本であるIntentを使用していません。

試しにゲームを起動している最中に戻るボタンをクリックしてみてください。
アプリが終了したと思います。
これがIntentを使用して画面遷移を行うとちゃんとアプリ内の前の画面に戻ります。
(※作りにもよります)
じつはTableLayoutに乗せている部品を外したり乗せたりを繰り返して
画面遷移しているようにみせかけているだけなのです。

//注意:あまり参考にしないように。
//レコード画面からスタート画面へ戻る
public void removeRecord()
{
	main_layout.removeView(record);
	main_layout.addView(start);
}
//アバウトミー画面からスタート画面へ戻る
public void removeAboutme()
{
	main_layout.removeView(about);
	main_layout.addView(start);
}
//レベルセレクト画面からスタート画面へ戻る
public void removeSelect()
{
	main_layout.removeView(select);
	main_layout.addView(start);
}

なぜこのような作りにしたかはそもそも着手時にボタンの知識だけだったということにもあるのですが
もし改修するとしたらまずそこを直したいと思っています。
今ではIntentを使用してアプリ作成が出来ていますが
やはり開発しやすいしソースもシンプルきれいになります。

パズルDE★ぴょんのダウンロード

Google Playからダウンロード

この記事を共有する

  • このエントリーをはてなブックマークに追加

スマホ情報のAndRockを共有する



follow us in feedly


アンドロイド携帯向けアプリの人気ランキングページです。ビジネスに、遊びに、とてもお役立ちのアンドロイドアプリが勢ぞろい。どのアプリも人気のある「10個」です。厳選されたラインナップ。もしかしたらあなたの携帯ライフを劇的に変えるアプリも現れるかもしれません!日々変わるこのアプリのランキング動向を、ぜひチェックしてください。




人気・定番スマホアプリレビュー

エレメンタルストーリー

エレメンタルストーリー

新感覚のパズルバトルRPG!

サモンズボード

サモンズボード

ガンホーが放つ新時代のボードゲーム

ぐるなび  レストラン情報・飲食店検索

ぐるなび  レストラン情報・飲食店検索

クーポンを使ってお得に食事しよう!




スマートフォン、スマホアプリの使い方を解説

LINE アプリの使い方 完全マニュアル(Android,iPhone)

6000万ダウンロードを突破した無料通話・チャットが使える神アプリLINEの使い方のまとめ


Viberの使い方、設定まとめ (Android , iPhone)

無料通話のできるViberの使い方から、初期設定、日本語化などなどのまとめ


Skypeの使い方、設定(Android , iPhone)

無料通話・無料チャットの定番Skypeの使い方まとめ


無料・おトク電話アプリ「050 plus」のまとめ

スマートフォンで月額を抑えたい人におススメのアプリ!「050 plus」の使い方を解説




キングダムセブンフラッグス攻略情報
ONE PIECE トレジャークルーズ攻略情報
ドラゴンボールZドッカンバトル攻略情報
VR情報総合メディアVRinfo
LINE アプリの使い方 完全マニュアル(Android,iPhone)

アプリ人気ランキング

Androidアプリ
iPhone/iOSアプリ

1
Battery Mix (バッテリーミックス) Battery Mix (バッテリーミックス)

バッテリーの使用状況を分かりやすくグラフで表示

カテゴリ: バッテリー管理

3
Cerberus(サーベラス) Cerberus(サーベラス)

世界最強の盗難防止用セキュリティーアプリ

カテゴリ: セキュリティ

4
2chMate 2chMate

2chMateが使えないiPhoneユーザーがかわいそう!最強の2ちゃんねるブラウザ

カテゴリ: ブラウザ

5
NHK時計 NHK時計

プッ...プッ...プッ...ポーーーン

カテゴリ: 時計


▼アンドロイドアプリのランキング

LINEで絶対使いたいLINEスタンプ検索
ポケモンGO攻略情報
FINAL FANTASY BRAVE EXVIUS攻略情報
AppLink(アプリンク)

新着スマホ情報


▼アプリ・記事の新着一覧へ

LINEで使えるオススメのスタンプアプリ まとめ20選

スマホアプリ カテゴリ一覧

スマートフォンサイト
QR-code AndRock(アンドロック)は、スマートフォンでもご利用いただけます。 QRコードスキャナーで読み取ってご利用ください。
Follow Us