週末のアプリ作成

androidアプリ個人開発者の実態を報告します。アプリの収入も公開中です♪

ショッピング神アプリを目指して

こんばんわ、TF's appsです。

今回の記事は夢を語らせて頂きます。

ショッピングにおける神アプリを目指してというテーマで書いてみます。

 

私はショッピングに関するアプリを3つリリースしています。

一番のヒット作がこのアプリ

価格比較 どちらがお得 (金額計算アプリ)

https://play.google.com/store/apps/details?id=tfsapps.loveprice

f:id:TFs_apps:20200119180048p:plain

 

生活していると同じ商品だけどどちらがお得なんだろうって事がありますよね?

お店によっても価格は異なりますし、ポイントがあるお店や、割引があるお店、そもそも普段から安いお店、そんな時に単位当たりの価格比較ができるのがこのアプリです。

 

1本当たり、1個当たり、1グラム当たりなどで金額計算できて一番安いのはどれかが分かります。1円でもお得に買い物したい方にお勧めのアプリです。

f:id:TFs_apps:20200119180229p:plain

 

その他にもこんなアプリも作っています。

↓↓↓

価格比較 どちらがお得 TAX 軽減税率対応

https://play.google.com/store/apps/details?id=tfsapps.whichprice

 

価格比較 買い物上手(金額計算アプリ)

https://play.google.com/store/apps/details?id=ftapps.goodshopping

 

 

 

おかげさまで

2,330DL(ダウンロード)されています。

リリースしてから1年9カ月です。

 

しかし神アプリと言われるにはまだまだ程遠いですよね。

個人アプリではこんなものなのかぁとも思いますが、

もっと凄い個人アプリ開発者は沢山いらっしゃいますので(汗)

実際使って頂いている方にそのように思ってもらえたら嬉しいですけど。

 

しかし

チャンスは無限大である

ユーザー様と一緒に成長して神アプリにすれば良いのだと

アプリに寄せられるコメントや

類似アプリのコメントを確認することで

きっとユーザーに一番フィットしたオンリーワンのアプリができると思います。

 

そう神アプリになるいはインストールしてくれたユーザーと一緒に歩んでいけば、

少しずつですが着実に目指す姿に近づけるということです。

個人開発者でもいつかは大きな会社と対抗できるアプリに成長できるチャンスがあるのです。

Twitterでも沢山の仲間たちが日々個人開発しているのを見ています。

きっと彼らはそんなエネルギーに溢れた方々です。

 

刺激を貰いながら今日も週末のアプリ作成を進めていきます。

ではまた次回お会いしましょう♪

 

 

 

 

 

 

 

 

 

ドラクエやFFから学ぶリピートプレイ術

こんばんわ、TF's appsです。

年始早々、休日出勤を控えている中、ブログを書きます。

今回の記事は「名作であるドラクエやFFからリピートプレイ術を学ぶ」という議題で考えていきます。

 

ゲーム歴30年の私はドラクエやFFを愛しています。

特にリピートプレイが多い作品と言えば

 

FFですと3、4、5です。

f:id:TFs_apps:20200117223305p:plain



ドラクエでも3、4、5となります。

f:id:TFs_apps:20200117223319j:plain

 

正直、それぞれハードを何世代も超えてプレイしています。

 

ファミコン

スーパーファミコン

PS1

PS2

PSP

スマホ

などでソフトを買ってプレイしています。

 

 

はじめからクリアまで何回したのか覚えていないくらいです。

ではなぜそんなにハマるのかという事を考えていきます。

 

38才のおっさんが小学校の頃を思い出しながら、

自分の気持ちに正直になって振り返りました。

 

まずは

単純である

ストーリーが分かりやすく、

そして複雑なシステムもない、

失敗要素がない(取返しのつかない要素)

また容易にクリアできる

 

次に

プレイ時間の妥当性

最近のRPGではやりこみ要素が多いので

クリアするまでに30時間以上かかるような

作品が多くないでしょうか!?

正直、良いおっさんは疲れます(汗)

また長くなると何処かで息継ぎをしたくなり、

私の場合、FF9は一度休憩して、再プレイ

するまでに半年かかった記憶があります。

そのような気持ちにならない程度の時間で

クリアできるのが魅力です。

 

最後に

美化された記憶である

はじめてプレイした作品や

はじめて知ったジャンルやゲームシステムは

その人の中で美化されていると思います。

 

人って知ることに喜びを感じ

はじめて知った事の記憶というのは

特別なものとなります。

つまり、私にとってゲームを始めたばかりで

未知であったジャンルやゲームシステムというのは

特別な記憶であると自然に埋め込まれています。

 

そのゲームが、私にとっては

FF3~5、ドラクエ3~5なのです。

 

これらのゲームだけではありません。

他にも印象に残っている作品はいっぱいあります。

 

RPGですと

他にもスターオーシャンシリーズ、テイルズシリーズ、幻想水滸伝エストポリス伝記、ヴァルキリーシリーズ

 

格闘ですと

ストリートファイター、鉄拳

 

シミュレーションですと

信長の野望三国志スーパーロボット大戦ファイアーエムブレム

 

スポーツですと

ウイニングイレブンみんなのゴルフパワプロ

 

シューティングですと

グラディウスエースコンバットスターフォックス

 

レースですと

グランツーリスモマリオカート

 

・・・

・・・

まだまだあり

無限に出てくる

・・・

・・・

 

どれも私にとっては大切なゲームです。

 

ただその中でもゲームを知らなかった

少年の私が特に衝撃を受けたFFとドラクエです。

なんせ始めてゲーム機(ファミコン)を買って

中古ソフトでプレイしたのがドラクエ3とFF3です。

 

一生忘れないでしょう

 

こんな記憶に残る作品をアプリで提供できればと思います。

明日からも週末のアプリ作成、地道に続けていきますね。

ではまたお会いしましょう♪

 

アプリ作成 手順3「基本処理の実装 」 サンプルコード紹介

こんにちは、TF's appsです。

今回の記事は娘のための学習アプリ作成 第3弾です。

まだまだこれからですが基本的な処理を実装しました。

基本動作ができた様な状態です。

11個のサンプル漢字をランダムに表示するような動作ができております。

 

1.画面遷移

1-1.アプリ初期画面

アプリ起動時の初期画面です(まだまだ作成途中です)

説明文や進捗などはまだ処理を実装しておりません。

これから作成予定です。

f:id:TFs_apps:20200113124416p:plain

 

1-2.問題表示の画面

初期画面から「はじめる」ボタンを押すと

問題を表示する画面となります。

f:id:TFs_apps:20200113124725p:plain

 

1-3.こたえの画面

問題の画面から「こたえ」を押すと

ポップアップでこたえの漢字を表示します。

f:id:TFs_apps:20200113124846p:plain

 

2.サンプルソース

基本動作を作る上で作成したソースを抜粋で

まずは、11個の漢字情報を保有するテーブルを作成します。

各種初期値を用意しておき

コンストラクタのタイミングで初期値をセットします。

メイン処理から「次の漢字頂戴ね」という命令を実行できるように、

KanjiTableSearchというメソッドを用意します。

 

KanjiTable.java


public class KanjiTable {

private List<Kanji> Kanji_List = new ArrayList<Kanji>();
final int Maxkanji = 11;
private final Random rand = new Random(System.currentTimeMillis());
private Kanji nowkanji;

static String[] kanji_data = {
// 漢字
"刀", //1
"丸", //2
"弓", //3
"工", //4
"才", //5
"万", //6
"引", //7
"牛", //8
"元", //9
"戸", //10
"午", //11
"", //12
};

static String[] onyomi_data = {
// 音読み
"トウ", //1
"ガン", //2
"キュウ", //3
"コウ、ク", //4
"サイ", //5
"マン、バン", //6
"イン", //7
"ギュウ", //8
"ゲン、ガン", //9
"コ", //10
"ゴ", //11
"", //12
};

static String[] kunyomi_data = {
// 訓読み
"かたな", //1
"まる、まる(い)、まる(める)", //2
"ゆみ", //3
"", //4
"", //5
"", //6
"ひ(く)、ひ(ける)", //7
"うし", //8
"もと", //9
"と", //10
"", //11
"", //12
};

static String[] exp_data = {
// 例文
"このカタナ", //1
"マル太の木", //2
"ユミ矢", //3
"コウ作", //4
"天サイ", //5
"一マン円", //6
"つなヒき", //7
"ギュウにゅうをのむ", //8
"ゲン気なこども", //9
"トじまりをする", //10
"しょうゴ", //11
"", //12
};

static String[] kakusuu_data = {
// 画数
"2", //1
"3", //2
"3", //3
"3", //4
"3", //5
"3", //6
"4", //7
"4", //8
"4", //9
"4", //10
"4", //11
"", //12
};

//コンストラク
public KanjiTable() {
int i;

/* 漢字リスト作成 */
for (i = 0; i < Maxkanji; i++) {
Kanji list_data = new Kanji(kanji_data[i], onyomi_data[i], kunyomi_data[i], exp_data[i], kakusuu_data[i]);
Kanji_List.add(list_data);
}
}

//漢字の検索
public Kanji KanjiTableSearch()
{
int index1 = 0;
int i;

for(i=0;i<Maxkanji;i++)
{
index1 = rand.nextInt(Maxkanji);

//検索済みの漢字(すでに表示済み)
if (Kanji_List.get(index1).isAlive == false)
{
continue;
}
//初ヒットした漢字
else
{
Kanji_List.get(index1).isAlive = false;
nowkanji = Kanji_List.get(index1);
return nowkanji;
}
}

return null;
}
}



メイン処理はこんなまだまだこれから磨きを掛けていきますが、

現状はこんな漢字です。

 

各種表示するオブジェクトを用意しておき

はじめるボタンのイベントである「onStart」と

こたえボタンのイベントである「onResult」のみ

簡単ですが実装した状態です。

 

activity_main.java

package tfsapps.kanjicard;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

private KanjiTable _kanji_table; //漢字検索テーブル
private Kanji _display_kanji; //表示中の漢字
private String _display_status; //表示中のアプリ説明文
private String _display_progress; //表示中の進捗情報
android.support.v7.app.AlertDialog.Builder popup;
private TextView popuptext;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

//漢字テーブルの作成
_kanji_table = new KanjiTable();
}
/* アプリ画面の表示 */
public void DisplayScreen()
{
TextView text_onyomi = (TextView) findViewById(R.id.text_onyomi);
TextView text_kunyomi = (TextView) findViewById(R.id.text_kunyomi);
TextView text_kakusuu = (TextView) findViewById(R.id.text_kakusuu);
TextView text_exp = (TextView) findViewById(R.id.text_exp);

text_onyomi.setText(_display_kanji.on_yomi);
text_kunyomi.setText(_display_kanji.kun_yomi);
text_kakusuu.setText(_display_kanji.kaku_suu);
text_exp.setText(_display_kanji.exsample);
}

/* はじめる */
public void onStart(View view) {
_display_kanji = _kanji_table.KanjiTableSearch();
DisplayScreen();
}
/* こたえ */
public void onResult(View view) {
popuptext = new TextView(this);
popuptext.setText(_display_kanji.kanji);
popuptext.setGravity(Gravity.CENTER);
popuptext.setTextSize(90);

popup = new android.support.v7.app.AlertDialog.Builder(this).setView(popuptext);
popup.setTitle("こたえの漢字");
popup.setPositiveButton("OK", null);
popup.show();
}

}

 

今日はここまでです。

最後に過去の記事も参考にどうぞ!!

www.tfsappsone.com

 

www.tfsappsone.com

 

 

アプリ作成 手順2「ベース画面の作成 」 サンプルコード紹介

こんにちは、TF's appsです。

 

今回の記事は娘のための学習アプリ作成 第二弾です。

 

 

作成時間どれくらいでしょう?

作業を始めてから約2時間でメイン画面の骨組みを作りました。

ソースもすべて公開していますので、ぜひ参考にどうぞ!!

 

1.完成画面(本日の成果)

f:id:TFs_apps:20200112161050p:plain

 

2.作り方

まずはスケッチを作成します。イメージ画です。

f:id:TFs_apps:20200112161748j:plain

 

スケッチをベースにして、いざandroid stadioを起動して、

activity_main.xmlを編集していきます。

f:id:TFs_apps:20200112163229p:plain

今回もアプリもシンプルな画面となりますので

もくもくと作業していきます。

 

メイン画面の構成としては大きく3種類となります。

 

(1)アプリの説明文を表示するテキストエリア

(2)問題となる漢字の情報(音読み、訓読み、画数、例文)を

   表示するテキストエリア

(3)ボタンエリア(はじめる、こたえ)

 

TextView と Button しか画面の構成上の部品はありません。

問題の進捗をメーター表示しようと考えたのですが、これも文字の方が良いかなと思って、当初のスケッチから変更しました。

 

あとは、LinearLayout を使いながらこれらの部品を均等に並べていきます

今日はここまでです。

ではまた次回お会いしましょう♪

 

前回の記事も参考にどうぞ↓


 

3.ソース全文(activity_main.xml


<?
xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true"
android:layout_weight="1">

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">


<LinearLayout
android:id="@+id/linearLayout4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bak_status"
android:orientation="vertical" >

<TextView
android:id="@+id/text_status"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="44"
android:layout_marginTop="2dp"
android:layout_marginBottom="2dp"
android:focusable = "true"
android:focusableInTouchMode = "true"
android:text=" ここに説明文を表示 "
android:gravity="center_horizontal"
android:textSize="38sp" />

<TextView
android:id="@+id/text_status2"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="30"
android:layout_marginTop="2dp"
android:layout_marginBottom="2dp"
android:text=" ここに進捗を表示 "
android:gravity="center_horizontal"
android:textSize="24sp" />

</LinearLayout>

<LinearLayout
android:id="@+id/linearLayout0"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_marginStart="2dp"
android:layout_marginEnd="2dp"
android:layout_below="@+id/linearLayout4"
android:orientation="horizontal">

<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="3"
android:background="@drawable/bak_noselect"
android:orientation="vertical">

<TextView
android:id="@+id/ttl_onyomi"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="40"
android:layout_marginEnd="2dp"
android:layout_marginStart="2dp"
android:layout_marginTop="2dp"
android:layout_marginBottom="2dp"
android:background="@drawable/bak_ttl"
android:text="音読み"
android:textSize="38sp" />

<TextView
android:id="@+id/ttl_kunyomi"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginEnd="2dp"
android:layout_marginStart="2dp"
android:layout_marginTop="2dp"
android:layout_marginBottom="2dp"
android:layout_weight="40"
android:background="@drawable/bak_ttl"
android:text="訓読み"
android:textSize="38sp" />


<TextView
android:id="@+id/ttl_kakusuu"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginEnd="2dp"
android:layout_marginStart="2dp"
android:layout_marginTop="2dp"
android:layout_marginBottom="2dp"
android:layout_weight="40"
android:background="@drawable/bak_ttl"
android:text="画数"
android:textSize="38sp" />

<TextView
android:id="@+id/ttl_exp"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginEnd="2dp"
android:layout_marginStart="2dp"
android:layout_marginTop="2dp"
android:layout_marginBottom="2dp"
android:layout_weight="40"
android:background="@drawable/bak_ttl"
android:text="例文"
android:textSize="38sp" />

</LinearLayout>

<LinearLayout
android:id="@+id/linearLayout2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="7"
android:background="@drawable/bak_noselect"
android:orientation="vertical">

<TextView
android:id="@+id/text_onyomi"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="40"
android:layout_marginEnd="2dp"
android:layout_marginStart="2dp"
android:layout_marginTop="2dp"
android:layout_marginBottom="2dp"
android:background="@drawable/bak_text"
android:text=""
android:textSize="38sp" />

<TextView
android:id="@+id/text_kunyomi"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginEnd="2dp"
android:layout_marginStart="2dp"
android:layout_marginTop="2dp"
android:layout_marginBottom="2dp"
android:background="@drawable/bak_text"
android:layout_weight="40"
android:text=""
android:textSize="38sp" />

<TextView
android:id="@+id/text_kakusuu"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginEnd="2dp"
android:layout_marginStart="2dp"
android:layout_marginTop="2dp"
android:layout_marginBottom="2dp"
android:background="@drawable/bak_text"
android:layout_weight="40"
android:text=""
android:textSize="38sp" />

<TextView
android:id="@+id/text_exp"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginEnd="2dp"
android:layout_marginStart="2dp"
android:layout_marginTop="2dp"
android:layout_marginBottom="2dp"
android:background="@drawable/bak_text"
android:layout_weight="40"
android:text=""
android:textSize="38sp" />

</LinearLayout>

</LinearLayout>


<LinearLayout
android:id="@+id/linearLayout3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/linearLayout0"
android:orientation="horizontal">

<Button
android:id="@+id/btn_start"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginEnd="2dp"
android:layout_marginStart="2dp"
android:layout_marginTop="2dp"
android:layout_marginBottom="2dp"
android:onClick="onStart"
android:text="はじめる"
android:textColor="#ffffff"
android:background="@drawable/bak_btn_1"
android:textSize="40sp"
android:textStyle="bold" />

<Button
android:id="@+id/btn_result"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginEnd="2dp"
android:layout_marginStart="2dp"
android:layout_marginTop="2dp"
android:layout_marginBottom="2dp"
android:onClick="onResult"
android:text="こたえ"
android:textColor="#ffffff"
android:background="@drawable/bak_btn_2"
android:textSize="40sp"
android:textStyle="bold" />

</LinearLayout>

</RelativeLayout>

</ScrollView>

子供がゲームをするのはダメなのか?

こんばんわ、TF's appsです。

今回の記事は「子供」と「ゲーム」についてです。

 

まずは改めて簡単に自己紹介から

ごく普通の家庭を持つパパです。

住宅ローンを抱え、妻子を持つ、38才のサラリーマンです。

職業はソフトウェアの開発、趣味でもアプリ作成をしている者です。

 

私とゲームとの出会いはかれこれ30年になります。

小学校2年生の時にドラクエと初めて出会いました。

f:id:TFs_apps:20200110225326j:plain

 

そう世界が変わりました

 

学校から帰ったら泥んこ遊びや野球、サッカーをしていたのですが

何よりもゲームを優先する遊びに変わりました

 

とは言え、私の家(小学校の頃)では土日だけゲームができる

というルールがありましたので

平日は説明書を読んだり、攻略本を読み漁るような過ごし方でした

 

ドラクエだけでなく、マリオ、ファイナルファンタジーストリートファイタースーパーロボット大戦グラディウス信長の野望ウイニングイレブングランツーリスモ・・・など、メジャーなタイトルは大体している気がします。

 

うーん。。。数えきれない

ジャンルを問わず、数百本のゲームはしているのではないでしょうか? 

今までのプレイ時間を計算すると、

恐ろしいことになりそうですね(汗)

 

両親からはゲームについてよく注意されましたが

私はこう言い返していました

 

「将来ゲームを作る、ゲームをしているけど

 ゲームの勉強をしているんだと」

 

でもこれがマジで将来の目標となった

 

小学校卒業後、地元の中学に行き

高校受験に失敗して、滑り止めの高校にいき

高校2年の頃には、将来の道は迷う事なく

ゲームが作りたいと思うようになりました

 

大学は自分の学力で行ける中で

希望としたコンピュータグラフィックを

専攻としている所に入学しました。

(大学受験も滑り止めでしたが)

受験は全て失敗した人生です

 

大学に入ると、ゲームを作るのには

高度なプログラミングの知識がいる事が分かりました

高校生の頃からゲームを独自で作って

いる友人が居て、レベルの差に愕然となりました

(今思えばその時代に独自でゲームを作っている

 友人はかなり優秀な人だった気がします)

 

でも大学で覚えたプログラミングは楽しくて

ソフトウェアに携わる仕事がしたいと思って

ゲーム事業も行い、システム開発もする

会社に入社する事になりました。

今は会社が変わっておりますが、仕事の

内容は大きくは変わっていません。

 

ここまで、ダラダラとおっさんの人生を

振り返えりましたが。。。。

 

ゲームは決して悪ではないです

私みたいな

ゲームと出会い

ソフトウェア業務をしている人

 

凄く多くいると思います。

ITが日常となっている今の世界においては

今後も便利を世に生み出す人たちでしょう。

(厚かましく私がそうとは言いませんが・・・)

 

ただゲームが原因とされる事件が起きている事も事実です。

 

どんな事でも一緒で適度な付き合い方が必要でしょう。

趣味でも行き過ぎると体を壊したり

人間関係も崩れてうまくいかないことがあります。

 

ゲームも適切にプレイすれば良いでしょう

ゲームから色々学びました

初めてPCを触った時も

難しいと感じたことはありませんでした

少しゲーム感覚があり

もっと触ってみたいと感じていたと思います

 

自分の子供も少しずつ

ゲームに興味が出てきています

ルール作って楽しんで貰いたいと切に願います^^v

 

 

 

現実逃避でストレス発散する毎日

こんばんわ、TF's appsです。

年末年始9連休を過ごし、2020年の仕事が始まっています。

 

今年初のダークサイドな記事となっています。

いや~仕事は楽しくないですね。。。。

 

なぜこんな気持ちになるのだろうっと考えます。

思えば15年ほど前の新入社員の頃は希望が大きいかった気がします。

そう毎日楽しいかった!!

 

もちろん、社会人生活が始まり、苦しいこともあったが、

新人の頃は気持ちの大小関係はこんな感じでしょう

 

楽しい > 苦しい

 

それが今や完全に逆転ですね

 

楽しい苦しい

 

新年始まってまだ3日目でこんな負の気持ちが大きくなるとは、

今は38才、60才まであと22年ほどですか?

まだ折り返し地点にも来ていないという事実

 

人生とは厳しいものです。

よく私の祖母が言っておりました

「毎日毎日が修行と思いなさい」

 

この楽しくない毎日を帰宅後に現実逃避するルーティンがあります。

 

それは、

酒 そして 酒 そして 妄想

 

昨日は妻と豪華客船飛鳥2での旅行で話が盛り上がりましたね

勤続30年もすれば特別休暇と旅行券が会社より支給されます。

その旅行を二人で想像していました。

豪華客船ですべてを忘れて旅行したいよねっとそんな感じです。

 

 

最近、仕事が楽しくなくなった理由はハッキリしています。

自分がしたい仕事から離れたからです。

そう私はプログラミングが好きで今の仕事に就いています。

 

今はプログラミングできない状況となり

クレーム処理など人の嫌がる仕事や人のマネジメントが増えて来たからです。

 

年相応の立場といえばそうかもしれませんが、

出世したいわけではありません、

ただ毎日家族と笑って過ごす時間が今より欲しいですし、職場では黙々とプログラミングしたいと切に願いながら。

 

今も麦焼酎を片手にネットサーフィンしながらこの記事を書いている次第です。

がむしゃらに好きな仕事をしていた10年ほど前に戻りたいですね。

 

まぁそんな現実逃避をしながら今日も眠りつきたいと思います。

ではまた次回お会いしましょう♪

 

アプリ作成 手順1「まずはアプリの基本構造を考えてみる 」 サンプルコード紹介

こんばんわ、TF's appsです。

 

今回の記事は「実演しながらアプリ作成の手順」を紹介していきます。

その第一弾です。

 

【基本構造を考える】というテーマとなります。

 

まずはさっそく作るアプリのテーマを考えます。

ざっと今まで作ったアプリを振り返るのも良いのですが、

今回のテーマははっきりしています。

 

私の小2である娘用に漢字学習アプリを作成していきたいと思います。

冬休みの宿題を見ていて少し心配になりました。

どうも娘は漢字が苦手のようですので、

小2で覚える漢字を順番にランダム表示されていく

アプリにしていきたいと思います。

 

ではさっそくいつも作成するように絵コンテを描いてみます。

 

手順1:作成するアプリの絵を描く

イメージとしては英語を勉強する時に誰もが使用した

単語カードのように漢字を順番に表示していくアプリです。

 

アプリの簡単な動作としては、

 ①音読みや訓読みの読み方が表示する

 ②その漢字を書く(紙に書く)

 ③答え合わせを行う

 

下記のような画面にしていきます。

f:id:TFs_apps:20200105192432j:plain

 

手順2:Android Studioで新規プロジェクト作成

まずは名前を決めて空プロジェクトを作成します。

KanjiCardという名前にしてみました^^

f:id:TFs_apps:20200105192804p:plain

 

f:id:TFs_apps:20200105193434p:plain

 

手順3:データ構造を考える

アプリの骨格となるデータ構造を考えます。

本業でもソフト設計する場合は画面やデータ構造から考えていきます。

土台となるこの部分がしっかりしていないと下流の工程で大変な事態になります。

上流工程は肝となりますので特に重要です。

 

漢字カードですので

まずは漢字データを集約したデータクラスを作成します。

Kanjiという名前にします。

 漢字  「刀」

 音読み 「トウ」

 訓読み 「かたな」

 例文  「このカタナ」

 画数  「2」

f:id:TFs_apps:20200105192838p:plain

 

次にランダムに漢字を表示するエンジンとなるクラスを作成します。

KanjiTableという名前です。

各漢字のデータのデフォルト値を定義して

テーブルのコンストラクタで初期値(漢字、音読み、訓読み、例文、画数)を与えます。

f:id:TFs_apps:20200105193528p:plain

f:id:TFs_apps:20200105193543p:plain

f:id:TFs_apps:20200105193606p:plain

f:id:TFs_apps:20200105193623p:plain

 

今回のアプリは特に事前にマーケティングとかはしておりません。

自分の娘の学力をアップさせるためのアプリです。

 

冬休みは間に合いませんでしたが、

少なくとも春休みにはこのアプリを使って

小学校2年生の1年間の漢字のおさらいをして貰いたいです。

 

今のところはここまで作成した時点で終了しています。

まだまだ道のりは先ですが

コツコツとこれからも週末のアプリ作成を進めていきます。

最終回にはソースコードの公開も考えております。

これかもどうぞ完成まで応援をお願いします。

 

最後にお断りです。

本業の仕事では組み込み系のソフトを作っており、

C言語で使用しています。

オブジェクト指向言語はあまり得意ではありません。

趣味で作っているandroidアプリのjavaくらいしかまともな経験がありませんので。

少しC++C#は遊びでかじっておりますが・・・。

 

今後も残念なコードを紹介していきますが

予めご了承下さい。

 

では次はこれより進んだ状況を紹介していきますね。

また次回お会いしましょう♪