코딩 공부/Android
[Android] 숫자 게임 만들기
희원96
2022. 7. 11. 16:49
기능 정의
- 랜덤 숫자 생성(makeRandom)
- 버튼에 랜덤 수 넣기(numberlnit)
- 정답을 맞췄을 때 버튼 숨기기(answerChek)
package com.example.ex_0711;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import java.util.Arrays;
import java.util.Random;
public class MainActivity extends AppCompatActivity {
Button btn_start;
// 랜덤 수 생성
Random rd = new Random();
// 9개의 버튼을 사용할 int 타입의 배열 선언
int[] numArr = new int[9];
// 9개의 버튼을 관리할 수 있는 Button 타입의 배열 선언
Button[] btnArr = new Button[9];
//정답을 체크할 수 잇는 변수
int ans =1;
// 횟수를 체크할 수 잇는 변수
int cnt = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 버튼을 초기화하는 메소드
initView();
// 게임 시작을 하기 전에는 버튼들이 보이지 않도록 설정
for(int i = 0; i < btnArr.length; i++){
btnArr[i].setVisibility(View.INVISIBLE);
}
// btn_start에 event 걸어주기
btn_start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//처음 한번 클릭 이후 버튼을 사용하지 못하도록 만들기!
// true : 클릭허용 / false : 클릭 비허용
btn_start.setClickable(false);
// - 버튼에 랜덤수 부착
// - 순서에 맞춰 버튼 클릭하기
// 랜덤 수 생성하는 메소드
makeRandom(cnt);
numberInit();
// 9개의 버튼에 이벤트 리스너 달아주기!
for(int i = 0; i < btnArr.length; i++){
//변수인 i를 상수로 변경시키기!
final int pos = i;
btnArr[i].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 실제 맞춰야 하는 정답과 눌린 버튼의 값이 같은지 판단!
// 익명클래스에서는 변수는 사용이 불가능 하다! -> 상수만 사용 가능!
if(numArr[pos] == ans){
btnArr[pos].setVisibility(View.INVISIBLE);
ans++;
++cnt;
// 첫번째 판이 끝나면 다음판으로 넘어갈 수 있는 기능 만들기!
if(cnt == 9){
makeRandom(cnt);
numberInit();
}else if(cnt == 18){
makeRandom(cnt);
numberInit();
}else if(cnt == 27){
makeRandom(cnt);
numberInit();
}else if(cnt == 36){
makeRandom(cnt);
numberInit();
}else if(cnt ==45){
btn_start.setText("end");
}
}
}
});
}
}
});
}
private void numberInit() {
for(int i = 0; i < btnArr.length; i++){
btnArr[i].setText(numArr[i] + "");
// 사라진 버튼들 띄우기
btnArr[i].setVisibility(View.VISIBLE);
}
}
private void makeRandom(int cnt) {
// 버튼에 랜덤 수 부착
// 순서에 맞춰 버튼 클릭
for(int i = 0; i < numArr.length; i++){
numArr[i] = rd.nextInt(9)+(1+cnt);
// 중복 수 체크하기
for(int j = 0; j < i; j++){
if(numArr[i] == numArr[j]){
i--;
}
}
}
}
private void initView() {
btn_start = findViewById(R.id.btn_start);
for(int i = 0; i < btnArr.length; i++) {
// gerResources() : 리소스 파일에 접근 할 수 있는 메소드
// getIdentifier() : name(ID 이름), difType(View 인지 layout 인지..), defPackage()
// getPackageName() : 현재 사용하는 패키지의 이름을 가져오는 메소드
int btnId = getResources().getIdentifier("btn" + (i+1), "id", getPackageName());
btnArr[i] = findViewById(btnId);
}
}
}