728x90
SMALL
[DoActivity]
package com.example.ex221205
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.os.Message
import android.util.Log
import android.view.View
import android.widget.Button
import android.widget.ImageView
import android.widget.TextView
import kotlin.random.Random
class DoActivity : AppCompatActivity() {
var isPlaying : Boolean = true
var score : Int =0 //점수를 저장하는 변수
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_do)
val tvScore = findViewById<TextView>(R.id.tvScore)
val btnStart = findViewById<Button>(R.id.btnStart)
val tvTime = findViewById<TextView>(R.id.tvTime)
val imgViews = ArrayList<ImageView>()
for (i in 1..9){
val resId = resources.getIdentifier("imageView$i", "id", packageName)
val imgView = findViewById<ImageView>(resId)
imgViews.add(imgView)
imgView.visibility = View.INVISIBLE
}
btnStart.setOnClickListener {
val thread2 = TimeThread(tvTime)
thread2.start()
for (i in 0 until imgViews.size){
val imgView = imgViews.get(i)
imgView.visibility = View.VISIBLE
val thread = DoThread(imgView)
thread.start()
imgView.setOnClickListener {
if(imgView.tag ==1){
score++
}else{
score--
if(score<0){
score =0
}
}
tvScore.setText("현재 점수 : $score")
}
}
}
} // onCreate() 끝
val handler2 = object : Handler(Looper.getMainLooper()){
// Ctrl+O : handleMessage
override fun handleMessage(msg: Message) {
super.handleMessage(msg)
val time = msg.arg1
val tv = msg.obj as TextView
tv.setText(time.toString())
}
}
inner class TimeThread(val tv:TextView): Thread(){
//Ctrl+O: run()
override fun run(){
super.run()
for(i in 30 downTo 0){
val message = Message()
message.arg1 = i
message.obj = tv
handler2.sendMessage(message)
Thread.sleep(1000)
}
isPlaying = false
val intent = Intent(this@DoActivity, MainActivity::class.java)
startActivity(intent)
}
}
val handler = object : Handler(Looper.getMainLooper()){
override fun handleMessage(msg: Message) {
super.handleMessage(msg)
val imgView = msg.obj as ImageView // 어떤 이미지뷰에 적용될 건지??
val img = msg.arg1 // on 이미지인지 off이미지인지(이미지 정보를 담고 있는 리소스)
val tag = msg.arg2 // 현재 이미지의 상태!! 1이라면 일어나있음, 0이라면 앉아 있음
imgView.setImageResource(img)
imgView.tag=tag
}
}
inner class DoThread(val imgView: ImageView) : Thread(){
override fun run() {
super.run()
while (isPlaying){
var level = score * 20
if(score >= 40){
level = 800
}
//랜덤하게 0~5초 후에 일어나게!!
val onTime = Random.nextInt(5*(1000-level))
Thread.sleep(onTime.toLong())
val message = Message()
message.arg1=R.drawable.on
message.arg2=1 //두더지가 일어남을 의미!!
message.obj = imgView
handler.sendMessage(message)
val offTime = Random.nextInt(3*(1000-level))
Thread.sleep(offTime.toLong())
val message2 = Message()
message2.arg1=R.drawable.off
message2.arg2=0 //두더지가 앉아있음을 의미
message2.obj = imgView
handler.sendMessage(message2)
}
}
}
}
[activity_do.xml]
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".DoActivity">
<TableLayout
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/guideline3">
<TableRow
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<ImageView
android:id="@+id/imageView1"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
app:srcCompat="@drawable/off" />
<ImageView
android:id="@+id/imageView2"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
app:srcCompat="@drawable/off" />
<ImageView
android:id="@+id/imageView3"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
app:srcCompat="@drawable/off" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<ImageView
android:id="@+id/imageView4"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
app:srcCompat="@drawable/off" />
<ImageView
android:id="@+id/imageView5"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
app:srcCompat="@drawable/off" />
<ImageView
android:id="@+id/imageView6"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
app:srcCompat="@drawable/off" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<ImageView
android:id="@+id/imageView7"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
app:srcCompat="@drawable/off" />
<ImageView
android:id="@+id/imageView8"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
app:srcCompat="@drawable/off" />
<ImageView
android:id="@+id/imageView9"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
app:srcCompat="@drawable/off" />
</TableRow>
</TableLayout>
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.45" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="40dp"
android:text="두더지 게임"
android:textSize="40sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tvScore"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="현재 점수 : 00"
android:textSize="40sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView" />
<Button
android:id="@+id/btnStart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:text="게임 시작"
android:textSize="24sp"
app:layout_constraintEnd_toEndOf="@+id/tvScore"
app:layout_constraintStart_toStartOf="@+id/tvScore"
app:layout_constraintTop_toBottomOf="@+id/tvScore" />
<TextView
android:id="@+id/tvTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="10"
android:textSize="48sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
728x90
LIST
'Full Stack 교육 회고록' 카테고리의 다른 글
미니 어플리케이션 만들기(3)- MainActivity (0) | 2022.12.11 |
---|---|
미니 어플리케이션 만들기(2)- 로그인, 파이어베이스, firebase 연결 (0) | 2022.12.11 |
2022.12.05-안드로이드 (0) | 2022.12.06 |
2022.12.05- firebase 설정하기 (1) | 2022.12.05 |
2022-12-02 (0) | 2022.12.02 |