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;
// 9개의 버튼을 관리할 수 있는 Button 타입의 배열 선언!
Button[] btnArr = new Button[9];
Random rd = new Random();
// 9개의 랜덤수를 관리할 수 있는 int 타입의 배열 선언!
int[] numArr = new int[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에 이벤트 걸어주기!
btn_start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 처음 한번 클릭 이후 버튼을 사용하지 못하도록 만들기!
// true : 클릭 허용, false : 클릭 비허용
btn_start.setClickable(false);
// - 랜덤수 생성
// - 버튼에 랜덤수 부착
// - 순서에 맞춰 버튼 클릭하기
// 1 ~ 9
// 10 ~ 18
// 19 ~ 27
// 랜덤수 생성하는 메소드
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--;
}
}
}
Log.d("random", Arrays.toString(numArr));
}
private void initView() {
btn_start = findViewById(R.id.btn_start);
for(int i =0; i < btnArr.length; i++) {
// getResources() : 리소스 파일에 접근을 할 수 있는 메소드
// getIdentifier() : name(Id이름), defType(view인지 layout인지..), defpackage()
// getPackageName() : 현재 사용하는 패키지의 이름을 가져오는 메소드
int btnId = getResources().getIdentifier("btn" + (i+1), "id", getPackageName());
btnArr[i] = findViewById(btnId);
}
}
}
'안드로이드' 카테고리의 다른 글
텍스트 입력시 화면 전환 (0) | 2022.07.12 |
---|---|
안드로이드 프로그래밍(Activity & Internet) (0) | 2022.07.12 |
주사위 게임 (0) | 2022.07.08 |
Event 예시 (0) | 2022.07.08 |
Event (0) | 2022.07.07 |