상세 컨텐츠

본문 제목

[안드로이드] 야구게임 만드는 방법 part2 - 기능구현

안드로이드

by aries574 2022. 3. 31. 15:36

본문


이번에는 저번에 이어서 야구게임 기능 구현을

만들어보겠습니다.  이전 포스팅은 아래에 있습니다. 

2022.03.30 - [안드로이드] - [안드로이드] 야구게임 만드는 방법 part1 - 화면 구성 및 랜덤 숫자 생성

 

[안드로이드] 야구게임 만드는 방법 part1 - 화면구성 및 랜덤숫자 생성

이번 시간에는 야구게임을 만들어 보겠습니다. 게임의 규칙을 설명하겠습니다. 1. 게임을 시작하면 랜덤한 숫자 3개를 생성합니다. 2. 사용자는 랜덤으로 생성된 숫자 3개를 맞춰야 합니다. 3. 숫

aries574.tistory.com


목차

1. 실행 화면

2. 메인 코드 구현 MainActivity.java


1. 실행 화면

 

 

2. 메인 코드 구현 MainActivity.java


 - 설명 -

 viewMode: 게임 상태에 따른 화면상태 기능

 reset: 값 초기화하는 기능

 showResult: 제출 답변 목록 보여주는 기능

 numberCheck: 숫자 비교하는 기능

 1. 시작 버튼을 누르면 게임이 시작됩니다. 

 2. 숫자를 입력하고 정답 버튼을 누르면 숫자를 비교합니다. 

 3. 이중 for문을 사용하여 사용자가 입력한 숫자가

 컴퓨터가 랜덤으로 만든 숫자와 같은지 비교를 합니다. 

 4. 자리까지 맡으면 strike, 존재까지만 맞으면 ball

 5. 숫자가 3개 다 맞으면 성공, 기회 횟수가 0이 되면 게임 종료입니다.

public class MainActivity extends AppCompatActivity{

    EditText requestText;

    TextView responseText, resultText, lifeCountText;

    Button startBtn, answerBtn, resetBtn;

    //랜덤한 숫자 들어갈 배열
    int[] com = new int[3];

    //사용자가 입력한 숫자 들어갈 배열
    int[] user = new int[3];

    int strike = 0; //스트라이크 갯수
    int ball = 0; //볼 갯수

    int lifeCount = 10; //기회 횟수

    String result = ""; //답변

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        requestText = findViewById(R.id.request_text);

        responseText = findViewById(R.id.response_text);

        lifeCountText = findViewById(R.id.life_count_text);

        resultText = findViewById(R.id.result_text);

        answerBtn = findViewById(R.id.answer_btn);

        startBtn = findViewById(R.id.start_btn);

        resetBtn = findViewById(R.id.reset_btn);

        //쉬는중
        viewMode("end");

        //시작버튼 클릭 이벤트
        startBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                //랜덤한 수 생성
                randomNumber();

                //게임중
                viewMode("start");

                Toast.makeText(MainActivity.this, "게임이 시작되었습니다.",
                        Toast.LENGTH_SHORT).show();
            }
        });

        //리셋버튼 이벤트
        resetBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Toast.makeText(MainActivity.this, "초기화되었습니다.",
                        Toast.LENGTH_SHORT).show();

                viewMode("end");

                //초기화로직
                reset();
            }
        });

        //정답제출버튼 이벤트
        answerBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                //비교로직
                numberCheck();
            }
        });

    }//onCreate();

    /**
     * 랜덤숫자 생성
     */
    public void randomNumber(){

        int count = 0;

        Random random = new Random();

        HashSet set = new HashSet();

        //랜덤숫자 3개 생성
        while(set.size() < 3){

            int randomNumber = random.nextInt(9)+1; // 1 ~ 9

            set.add(randomNumber);
        }

        //배열에 숫자 담기
        for(Object number : set){

            Integer tempNumber = (Integer) number;

            Log.d("Main", "tempNumber: " + tempNumber);

            com[count] = tempNumber;
            count++;
        }
    }

    /**
     * 숫자 체크
     */
    public void numberCheck(){

        //기회횟수 감소
        --lifeCount;

        lifeCountText.setText("기회: " + lifeCount + "번");

        //입력값
        String inputNumber = requestText.getText().toString();

        if(inputNumber.length() == 3){ //숫자 3개여야 비교함

            //사용자가 입력한 숫자 배열에 넣기
            user[0] = Integer.parseInt(inputNumber.substring(0,1));
            user[1] = Integer.parseInt(inputNumber.substring(1,2));
            user[2] = Integer.parseInt(inputNumber.substring(2,3));

            //비교
            for(int i = 0; i < 3; i++){

                for(int j = 0; j < 3; j++){

                    //랜덤숫자와 입력숫자가 같다면
                    if(com[i] == user[j]){

                        if(i == j){//위치까지 맞다면
                            //strike
                            strike++;
                        }else{//존재여부만 맞다면
                            //ball
                            ball++;
                        }
                    }
                }//내부for
            }//외부for

            //1.숫자 다 맞음
            if(strike == 3){

                Toast.makeText(this, "성공했습니다.", Toast.LENGTH_SHORT).show();

                //답변
                responseText.setText("정답: " + com[0] + " " + com[1] + " " + com[2]);

            }
            else if(lifeCount == 0){ //기회횟수 없음

                Toast.makeText(this, "실패했습니다.", Toast.LENGTH_SHORT).show();

                //답변
                responseText.setText("정답: " + com[0] + " " + com[1] + " " + com[2]);
            }

            else{ //계속 진행

                //답변
                responseText.setText("strike: " + strike + " ball: " + ball);

                //목록
                showResult(inputNumber);
            }

            //초기화
            requestText.setText("");
            result  ="";
            strike = 0;
            ball = 0;

        }else{
            Toast.makeText(this, "숫자 3개를 입력해주세요.", Toast.LENGTH_SHORT).show();
        }
    }

    /**
     * 화면 구조
     * @param mode 상태
     */
    public void viewMode(String mode){

        if(mode.equals("start")){ //게임중

            startBtn.setEnabled(false);
            answerBtn.setEnabled(true);
            resetBtn.setEnabled(true);
            requestText.setEnabled(true);

        }else if(mode.equals("end")){//쉬는중

            startBtn.setEnabled(true);
            answerBtn.setEnabled(false);
            resetBtn.setEnabled(false);
            requestText.setEnabled(false);
        }
    }

    /**
     * 초기화
     */
    public void reset(){

        lifeCount = 10;
        lifeCountText.setText("기회: " + lifeCount + "번");
        responseText.setText("");//답변 텍스트뷰
        resultText.setText("");//결과목록 텍스트뷰
    }

    public void showResult(String inputNumber){

        result = result + "Strike: " + strike + " Ball: " + ball;
        resultText.append(inputNumber + ": " + result + "\n");
    }

}//MainActivity

2022.03.28 - [안드로이드] - [안드로이드] 숫자 맞추기 게임 Up&Down 만드는 방법 part1 - 화면 구성

 

[안드로이드] 숫자 맞추기 게임 Up&Down 만드는 방법 part1 - 화면 구성

 이번 시간에는 랜덤한 숫자를 생성하면, 사용자는 숫자를 입력해서 맞추는 게임을 만들어 보려고 합니다. 물론 무작정 맞추는 게 아니라 입력한 숫자가 랜덤한 숫자보다 큰지, 작은지 정도는

aries574.tistory.com

2022.03.29 - [안드로이드] - [안드로이드] 숫자 맞추기 게임 Up&Down 만드는 방법 part2 - 기능 구현

 

[안드로이드] 숫자 맞추기 게임 Up&Down 만드는 방법 part2 - 기능 구현

이번 시간에는 저번 포스팅에 이어서 실제 기능을 구현해 보도록 하겠습니다. 이전 포스팅을 먼저 보고 오시면 됩니다. 2022.03.28 - [안드로이드] - [안드로이드] 숫자 맞추기 게임 Up&Down 만드는 방

aries574.tistory.com

2022.03.27 - [안드로이드] - [안드로이드] 룰렛(Roulette) 쉽게 만드는 방법

 

[안드로이드] 룰렛(Roulette) 쉽게 만드는 방법

이번 시간에는 룰렛을 만들어 보겠습니다. 만드는 방법은 어렵지 않습니다. 간단하게 설명하면 라이브러리를 갖다 쓰기 때문에 사용자는 각 칸의 색깔과 아이콘과 텍스트만 정해주면 됩니다. 

aries574.tistory.com

반응형

관련글 더보기

댓글 영역