이번에는 저번에 이어서 야구게임 기능 구현을
만들어보겠습니다. 이전 포스팅은 아래에 있습니다.
2022.03.30 - [안드로이드] - [안드로이드] 야구게임 만드는 방법 part1 - 화면 구성 및 랜덤 숫자 생성
- 설명 -
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 - 화면 구성
2022.03.29 - [안드로이드] - [안드로이드] 숫자 맞추기 게임 Up&Down 만드는 방법 part2 - 기능 구현
[안드로이드] 같은 그림 찾기 게임 만드는 방법 part1 - 화면구성 (0) | 2022.04.02 |
---|---|
[안드로이드] RecyclerView 라디오버튼(RadioButton) 리스트 만드는 방법 (3) | 2022.04.01 |
[안드로이드] 야구게임 만드는 방법 part1 - 화면구성 및 랜덤숫자 생성 (0) | 2022.03.30 |
[안드로이드] 숫자 맞추기 게임 Up&Down 만드는 방법 part2 - 기능 구현 (0) | 2022.03.29 |
[안드로이드] 숫자 맞추기 게임 Up&Down 만드는 방법 part1 - 화면 구성 (0) | 2022.03.28 |
댓글 영역