コンテンツにスキップ

オリジナル機能を作るためのTips集

色々な機能を付け加えて、コードを理解しつつ、オリジナリティを付け足してみてください。

以下のような機能を追加してみましょう:

  • -ボタンを追加してみよう
  • クリアボタンを追加してみよう
  • +10, -10ボタンを追加してみよう
  • 数値によって文字の大きさを変えてみよう
  • ねべあつ機能を追加してみよう
    • 3の倍数か3がつくときにアホになります
共有ボタンの動作イメージ

カウント数を他のアプリに共有できるボタンを作ってみましょう。

@Composable
fun ShareButton(count: Int) {
val context = LocalContext.current
Button(onClick = {
val shareIntent = Intent().apply {
action = Intent.ACTION_SEND
putExtra(Intent.EXTRA_TEXT, "今、$count 回カウントしました!")
type = "text/plain"
}
context.startActivity(Intent.createChooser(shareIntent, "共有"))
}) {
Text("シェアする")
}
}
// 今まで使ったボタンやTextのように配置をする
ShareButton(count)
回数に応じたアナウンスのイメージ

特定の回数に達したときにメッセージを表示する機能を追加してみましょう。

val achievementMessage = remember { mutableStateOf("") }
LaunchedEffect(count) {
if (count % 10 == 0 && count != 0) {
backgroundColor.value = Color(
Random.nextFloat(),
Random.nextFloat(),
Random.nextFloat(),
1f
)
}
if (count == 50) achievementMessage.value = "50回達成!"
if (count == 100) achievementMessage.value = "100回達成!"
}

これで50回や100回達成時にメッセージが表示されるようになります。

音を再生したい時はMediaPlayerを使用します。 呼び出したいところで以下のコードを記述します。

MediaPlayer.create(context, R.raw.click_sound).apply {
start()
setOnCompletionListener { release() }
}

バイブレーションを実行するAPIの部分です。

object VibrationUtil {
fun vibrate(context: Context, duration: Long) {
val vibrator = if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) {
val vibratorManager = context.getSystemService(Context.VIBRATOR_MANAGER_SERVICE) as VibratorManager
vibratorManager.defaultVibrator
} else {
context.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
}
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
vibrator.vibrate(VibrationEffect.createOneShot(duration, VibrationEffect.DEFAULT_AMPLITUDE))
} else {
vibrator.vibrate(duration)
}
}
}

呼び出したいところで記述をします。

VibrationUtil.vibrate(context, 100) // 100ms 振動

AndroidManifest.xmlにPermission VIBRATEを追加する必要があります。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.VIBRATE" />

より高度な改変をしてみたい方へ

Section titled “より高度な改変をしてみたい方へ”

ぜひ、ChatGPTとペアプロ(一緒に開発をすること)をやってみると面白いかもです。 次のセクションからは、ChatGPTについての資料になります。

アイディア出しや、実際に実装の手順も教えてくれます。 ただし、ChatGPTから出されたコードを何も考えずにコピペしないこと、理解をしてから使うこと。

ChatGPTのイメージ

まるで人間と対話しているかのように質問した内容に回答する対話型のAIサービスです。

例えば「東京の有名な観光地を教えてください。」と質問すると、「東京にはたくさんの有名な観光地がありますね。その中でも特に人気のあるものをいくつか挙げると、東京スカイツリー、浅草の仲見世通りと浅草寺、明治神宮、東京ディズニーランド、秋葉原、上野恩賜公園、東京タワーなどがあります。」といった回答が返ってきます。

  • 自分が知らない要素も出してくれる
  • 特徴の抽出を自動でやってくれる
  • わかりやすくまとめてくれる
  • 対話形式で話し合える
  • 本当に合っているかはわからない
  • 人間が欲している形にして渡されるため、一つだけで満足してしまう時も
  • 計算式は弱い
  • 間違っているのに、合っているように話される

明確な情報がないと、なかなか検索がヒットしません。 自分は当たり前だと思っている情報は相手は知らない。 全て明確に伝えてあげましょう。

  • ChatGPTはどのような人になって欲しいか
    • (エンジニアとか、芸術家とか)
  • 今どのような現状になっているか?
    • 背景だったり、使用言語だったり
  • どのようになって欲しいか、どのように解決したいか
  • その他、回答の方向性がぶれたらそれを修正していく

エラーが発生した時は、以下の手順でChatGPTに質問してみましょう。

  1. エラー内容と、解決方法の方針を書く
  2. コードを貼る
  3. エラー文を貼る

例えば、セミコロンが抜けているエラーが発生した場合

Section titled “例えば、セミコロンが抜けているエラーが発生した場合”
#include <stdio.h>
int main(void){
// Your code here!
printf"Hello World")
}

エラー文:

Main.c:4:26: error: expected ';' after expression
printf("Hello World")
1 error generated.

ChatGPTに質問すると、「このエラーは、プログラム内のprintf関数の呼び出しにセミコロンが欠けていることが原因です。」と教えてくれて、修正されたコードを提示してくれます。

ChatGPTでエラー解決の例 ChatGPTでエラー解決の例
  • ChatGPTで生成された回答をそのまま鵜呑みにしない
    • 知らない単語や構文を使っているところがあれば、しっかり理解をしてから使おう
  • ChatGPTに入力した文章は学習に使われる可能性がある
    • パスワードや鍵などは渡さないようにしよう
  • あなたの代わりに特徴を汲み取って教えてくれるだけです。自分でも把握できるようにしましょう。

カウントアプリに面白い機能を追加するアイデアとして、以下のようなものがあります。

  • ボタンを押した時間や回数をリストで表示する。
  • 記録されたカウント履歴をローカルに保存し、アプリを再起動してもデータが保持されるようにする。
  • カウントが増えるたびに、数字が拡大・縮小するアニメーションを追加する。
  • 例えば、カウントが10、20、30などの節目にエフェクト(花火や振動)を入れる。
  • カウント時に音声を再生する(例:「1, 2, 3…」と読み上げる)。
  • 特定のカウントに到達した際に面白い音を鳴らす。
  • 目標カウント数を設定し、達成したら通知する機能を追加する。
最後まで読み終えました! えらい!