本田とじゃんけんとは
2019年4月9日から19日まで行われたペプシのキャンペーンで、本田圭佑とじゃんけん勝負をする企画である。
勝利すると新作のペプシジャパンコーラがもらえた。1
何で作ったのか
上記でも書いたように4月19日までのキャンペーンだったのでそれ以降はじゃんけんができなくなっていました。
一部では勝率99%と言われているように、自分も4日程参加して全く勝利できませんでした。なので、当時の実力を再現したじゃんけんアプリを開発して雪辱を晴らすことにします。
サンプル動画
期限過ぎて本田とじゃんけんできなくなったので、本田とじゃんけんできるAndroidアプリ開発しました!
— tmk(^ム^) (@tmk2154) 2019年4月20日
勝率は原作再現なのでほぼ勝てない…#本田とじゃんけん pic.twitter.com/qylUKQu9Mz
アプリ概要
開発はKotlinでじゃんけん開始前と後のActivityが2つ、動画の再生にはVideoViewを使っています。
動画再生は全くのやったことがなかったので、調べた時にExoPlayerなどもありましたが途中で再生状態のコントロールやイベントの取得などせず、単純に再生するだけならVideoViewでも十分に動くようだったので、採用しました。
以下じゃんけん前Activityのソースです。
ボタンのどれかを押すと結果ページに遷移します。
onResumeで生成したVideoViewのオブジェクトは、ページ遷移する際onPauseでクリアしてます。
class MainActivity : AppCompatActivity() {
var mVideoView : VideoView? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
override fun onResume() {
super.onResume()
mVideoView = findViewById(R.id.video)
mVideoView!!.setVideoURI(
Uri.parse("android.resource://"
+ this.packageName +"/" + R.raw.honda_first_comes_rock))
mVideoView!!.start()
// グーを押下した場合
val gooBtn = findViewById<Button>(R.id.goo_button)
val intent = Intent(this,ResultActivity::class.java)
gooBtn.setOnClickListener{
intent.putExtra("MyHand","goo")
startActivity(intent)
}
// チョキを押下した場合
val chiBtn = findViewById<Button>(R.id.chi_button)
chiBtn.setOnClickListener{
intent.putExtra("MyHand","chi")
startActivity(intent)
}
// パーを押下した場合
val parBtn = findViewById<Button>(R.id.par_button)
parBtn.setOnClickListener{
intent.putExtra("MyHand","par")
startActivity(intent)
}
}
override fun onPause() {
super.onPause()
mVideoView = null
}
}
以下じゃんけん後のソースです。
原作再現で勝率は0.7%に固定してあります。2
class ResultActivity : AppCompatActivity() {
private var mVideoView : VideoView? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_result)
setSupportActionBar(toolbar)
}
override fun onResume() {
super.onResume()
mVideoView = findViewById(R.id.result_video)
val myHand = intent.getStringExtra("MyHand")
val tmpRid: Int
// 乱数に応じて出すテキストを変更
val randomValue = Random.nextInt(1000)
Log.d("randomValue",randomValue.toString())
// 勝ちパターン 0.7%に固定
tmpRid = if(randomValue < 7){
when(myHand){
"goo" -> R.raw.honda_you_win_chi
"chi" -> R.raw.honda_you_win_par
else -> R.raw.honda_you_win_goo
}
}
// 負けパターン
else{
when(myHand){
"goo" -> R.raw.honda_you_lose_par
"chi" -> R.raw.honda_you_lose_goo
else -> R.raw.honda_you_lose_chi
}
}
mVideoView!!.setVideoURI(
Uri.parse("android.resource://"
+ this.packageName +"/" + tmpRid))
mVideoView!!.start()
}
override fun onPause() {
super.onPause()
mVideoView = null
}
}
リポジトリ
動画をそのままあげるのはまずいと思ったので抜いています。
以下の名前のファイルがあれば動作はするので、もし使ってみたいという奇特な人がいれば以下のファイルを用意してください。
格納フォルダ
「HondaApp/app/src/main/res/raw」
対象ファイル
「じゃんけん開始Tweetの動画」honda_first_comes_rock.mp4
「本田がチーでYOU LOSEと出る動画」honda_you_lose_chi.mp4
「本田がグーでYOU LOSEと出る動画」honda_you_lose_goo.mp4
「本田がパーでYOU LOSEと出る動画」honda_you_lose_par.mp4
「本田がチーでYOU WINと出る動画」honda_you_win_chi.mp4
「本田がグーでYOU WINと出る動画」honda_you_win_goo.mp4
「本田がパーでYOU WINと出る動画」honda_you_win_par.mp4
余談ですが勝率通り本田に勝っている動画がなかなか無く、コラ動画も多かったので見つけるのに少し時間がかかりました。特に「本田がパーでYOU WINと出る動画」は少なそうです。
所見
なんとなく勢いだけで作って見ましたが、レイアウトに凝ったりすると以外と楽しいという学びがありました。
仕事ではプログラムする機会がほぼなく、リハビリがてらやっているので作り方はかなり古かった(2014年ぐらいの知識?)と思うのですが、一応動くものになってよかった。
後、自分でも100回ほど戦って見たのですが全く勝てません…
-
本田とじゃんけん CAMPAIGN https://www.pepsi.co.jp/campaign/cvs/ ↩
-
勝率なんと99%以上!?ペプシの「本田圭佑じゃんけん」が強すぎる https://www.j-cast.com/2019/04/17355553.html?p=all ↩