Study Record

[안드로이드] 쥬디의 찜질방 게임 만들기 - 5. 게임 종료 본문

안드로이드

[안드로이드] 쥬디의 찜질방 게임 만들기 - 5. 게임 종료

초코초코초코 2021. 12. 27. 10:42
728x90

1. 예상치 못한 종료

게임을 종료하는 플래그(flag)는 mfinish 변수로 정했다. 이 변수가 false 면 게임이 아직 실행중이고 true 면 게임이 종료된다. 사용자가 게임을 시작하다가 뒤로가기 버튼을 누르거나 한다면 게임은 종료되어야 한다. 따라서 다음과 같이 설정해준다.

 

GameActivity.kt 

override fun onDestroy() {
    mfinish = false
    super.onDestroy()
}

 

2. 게임 종료 시 실행되는 다이얼로그

게임이 종료되면 내가 얻은 점수를 보여주는 다이얼로그를 띄워준다. 그리고 다이얼로그에서 확인을 누르면 RankActivity 에 넘어가 내가 여태까지 한 게임의 점수들을 한꺼번에 보여준다.

게임종료 다이얼로그

 

 

색상 정보

lifghtBrown = #603737
white = #FFFFFF
black = #000000

 

dialog_gameover.xml - 다이얼로그 xml 파일 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

<TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/lightBrown"
        android:gravity="center"
        android:paddingVertical="15sp"
        android:text="게임 종료"
        android:textColor="@color/white"
        android:textSize="20sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/gameover_score"
        android:paddingVertical="30dp"
        android:paddingHorizontal="20dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:background="@color/white"
        android:text="당신의 점수는 20점입니다."
        android:textColor="@color/black"
        android:textSize="20sp" />

    <TextView
        android:id="@+id/gameover_ok"
        android:layout_width="match_parent"
        android:text="확인"
        android:padding="10sp"
        android:textSize="17sp"
        android:textStyle="bold"
        android:gravity="center"
        android:textColor="@color/white"
        android:background="@color/lightBrown"
        android:layout_height="wrap_content"/>

</LinearLayout>

 

GameoverDialog.kt - 다이얼로그 클래스

class GameoverDialog(val activity: GameActivity, val score: Int) : DialogFragment(){
    private lateinit var binding: DialogGameoverBinding
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        binding = DialogGameoverBinding.inflate(layoutInflater)
        return binding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        val scoreText = "당신의 점수는 ${score}점 입니다."
        binding.gameoverScore.text = scoreText

        binding.gameoverOk.setOnClickListener {
            // 확인 버튼을 누르면 게임 액티비티를 종료하고 랭크 액티비티로 연결한다.
            dismiss()
            activity.startRankActivity()
        }
    }

}

 

GameActivity.kt - 랭크 액티비티로 연결

fun startRankActivity() {
	// 게임 점수도 같이 넘겨준다.
    val intent = Intent(this, RankActivity::class.java).apply {
        putExtra("score", mCustomerFinishCount*10)
    }
    startActivity(intent)
    finish()
}

 

3. RankActivity 만들기

new -> Activity -> Empty Activity 를 통해 이름이 RankActivity 인 액티비티를 생성한다.

 

RankActivity.kt

class RankActivity : BaseActivity<ActivityRankBinding>(ActivityRankBinding::inflate) {
    var mRank = 0
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // 게임 결과 점수 가져오기
        mRank = intent.getIntExtra("score", -1)
        
    }
}
728x90