05.09 1to45 게임 만들어보기

최고고·2022년 5월 9일
0

~사실 05.07에 했지만
다시한번 정리해보는시간~

가이드라인 더블클릭하면 퍼센티지 나옴

제약조건 :


어플 실행시 버튼 9개 전부 안보이게 하기

  1. 버튼의 id값을 저장하는 배열을 선언 (아이디는 int 주소이기 때문)
  2. 반복문에 넣어 findVieById의 매개변수로 배열의 id값을 넣어 Button객체를 생성한다.
  3. 생성된 버튼 객체의 setVisiblity를 invisible로
  4. 현재 파일의 이 버튼 객체에 적용시켜줌 (셋온클릭리스너)

스타트버튼 클릭시 버튼이나오게

  1. 랜덤함수 이용해 객체 생성해 크기가 9인 배열을 int [] arr = new int[9]; 생성해 안에 랜덤으로 추출한 값을 넣어줌
  2. 이때, 랜덤 값이 중복되지 않아야하기때문에 아래처럼 이중for문을 이용했다.
  3. 새로운 for문으로 숨겨졌던 버튼 객체를 생성하고 버튼 안의 텍스트를 랜덤값 배열을 차례대로 setText로 지정해줌
        btn_start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //btn.setVisibility(View.VISIBLE); ==> 숨겨진 버튼 나옴
                //랜덤으로 9개 버튼이 보여지게 함
                //btn.setText() -> 버튼 내용 지정
                //버튼 내용 지정 후 숨었던 버튼이 보여지게 해야됨

                Random rd = new Random();
                int [] arr = new int[9];
                for (int i = 0; i < arr.length; i++) {
                    arr[i] = rd.nextInt(9)+1 ;
                    for (int j = 0; j < i; j++) {
                        if (arr[i] == arr[j]) {
                            i--;
                            break;
                        }
                    }
                }
                for(int i =0; i<btnArray.length; i++) {
                    Button btn = findViewById(btnArray[i]);
                    btn.setVisibility(View.VISIBLE);
                    btn.setText(String.valueOf(arr[i]));
                }

            }
        });

1~45까지의 랜덤 텍스트가 담긴 버튼을 생성, 사용자가 버튼을 순서대로 클릭하면 사라지게

int clickNum 은 클릭되어진 숫자가 담긴 텍스트 int clickNum = Integer.parseInt(btn.getText().toString());
전역변수로 선언한 int posNum
숫자의 순서대로 클릭하면 버튼이 사라지게 하려면 => 버튼 안에 담긴 clickNum과 내가 클릭한 posNum이 같을 때 조건을 주면 됨

화면의 마지막 번호 클릭시 다음 랜덤숫자 버튼 출력

화면당 1~9, 10~18, 19~27, 28~36, 37~45 이 나오게 되어야함
버튼 숫자가 바뀌어야할 시점 9,18,27,36,45
바뀌어야할 시점은 클릭한 숫자를기억하는 posNum을 9로 나눴을 때 0이어야 됨

    @Override
    public void onClick(View view) {
        Button btn = findViewById(view.getId());
        int clickNum = Integer.parseInt(btn.getText().toString());
        //순서대로 클릭했을때만 없어지도록
        if (clickNum==posNum){
            btn.setVisibility(View.INVISIBLE);
            posNum++;
        }else {
            Toast.makeText(MainActivity.this, "순서대로 클릭해주세요.", Toast.LENGTH_SHORT).show();
        }
        //마지막 번호클릭시 다음 랜덤 숫자 버튼으로 출력
        //1~9, 10~18, 19~27, 28~36, 37~45  바뀌어야할 시점 9,18,27,36,45
        if ((posNum-1)%9==0){       //바뀌어야할 시점은 클릭한 숫자를기억하는 posNum을 9로 나눴을 때 0이어야 됨

            if((posNum-1)==45){
                for(int i =0; i<btnArray.length; i++) {
                    btn = findViewById(btnArray[i]);
                    btn.setVisibility(View.INVISIBLE);
                }
                Toast.makeText(MainActivity.this, "게임이 끝났습니다", Toast.LENGTH_SHORT).show();
            } else {
                Random rd = new Random();
                int [] arr = new int[9];
                for (int i = 0; i < arr.length; i++) {
                    arr[i] = rd.nextInt(9)+posNum ;
                    for (int j = 0; j < i; j++) {
                        if (arr[i] == arr[j]) {
                            i--;
                            break;
                        }
                    }
                }
                for(int i =0; i<btnArray.length; i++) {
                    btn = findViewById(btnArray[i]);
                    btn.setVisibility(View.VISIBLE);
                    btn.setText(String.valueOf(arr[i]));
                }
            }

        }
    }

45가 되었을 때, 토스트메시지 출력하고 모든 버튼 안보이게


posNum은 첨 시작이 1이기때문에 45를 클릭하면 46이 되기때문에 posNum-1해줌

최종 화면

  • 첫 시작화면 - 아무것도 뜨지않음
  • 게임스타트 시 1~9의 숫자가 랜덤으로 출력됨
  • 순서대로 클릭하지않으면 토스트메시지가 뜸
  • 45까지 클릭이 끝나면 버튼이 모두 사라지고, 게임이 끝났다는 토스트메시지 출력됨

0개의 댓글