Java
[Java] Android Studio를 이용한 숫자야구 게임 만들기
펜네임
2019. 10. 18. 16:51
소스코드
package com.example.baseballgame;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
int dap1, dap2, dap3;
int count;
EditText et1, et2, et3;
TextView tvCount, tvResult;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvCount = findViewById(R.id.tvCount);
tvResult = findViewById(R.id.tvResult);
count = 0;
}
public void btnOnStart(View v) { // View v를 꼭 받아와야 함
// 1. 카운트 수 0일 경우
if (count == 0) {
// tvResult를 초기화한다
tvResult.setText("");
// 게임시작 관련 메시지 띄우기
tvResult.setText("게임이 시작되었습니다. 빈 칸에 중복되지 않는 숫자 3개를 입력하고 확인을 눌러주세요.");
// 랜덤 숫자 3개를 만든다 (중복 방지, while로 같을 경우 다시 랜덤 돌리게)
dap1 = (int)(Math.random() * 9) + 1;
dap2 = (int)(Math.random() * 9) + 1;
dap3 = (int)(Math.random() * 9) + 1;
while (dap2 == dap1)
dap2 = (int)(Math.random() * 9) + 1;
while (dap3 == dap2 || dap3 == dap1)
dap3 = (int)(Math.random() * 9) + 1;
System.out.println("답1:"+ dap1);
System.out.println("답2:"+ dap2);
System.out.println("답3:"+ dap3);
}
// 2. 카운트 수 1이상일 경우
else
// "진행중인 게임이 있습니다." 토스트 메시지 출력
Toast.makeText(MainActivity.this, "진행중인 게임이 있습니다.", Toast.LENGTH_SHORT).show();
}
public void btnOnCheck(View v) {
et1 = findViewById(R.id.et1);
et2 = findViewById(R.id.et2);
et3 = findViewById(R.id.et3);
// 1. 사용자가 입력한 값 3개를 받아온다
int userNum1 = Integer.parseInt(et1.getText().toString()); // edittext에 적힌 값을 int로 받아오기
int userNum2 = Integer.parseInt(et2.getText().toString());
int userNum3 = Integer.parseInt(et3.getText().toString());
int strike = 0;
int ball = 0;
// 2. 입력한 값과 숫자 3개를 비교한다
if (dap1 == userNum1)
strike++;
else if (dap1 == userNum2 || dap1 == userNum3)
ball++;
if (dap2 == userNum2)
strike++;
else if (dap2 == userNum1 || dap2 == userNum3)
ball++;
if (dap3 == userNum3)
strike++;
else if (dap3 == userNum1 || dap3 == userNum2)
ball++;
// 3. 카운트 수 증가
count++;
tvCount.setText(count + "번째");
// 4. 결과 스트링 생성
String resultStr = "\n#" + count + " : ";
// 3개 다 오답이면 결과에 "아웃" 저장
if (strike == 0 && ball == 0)
resultStr += "아웃";
// 3개 다 정답이면 결과에 "성공" 저장하고 카운트 수 초기화
else if (strike == 3) {
resultStr += "성공!";
count = 0;
}
// S나 B이 존재할 경우 결과에 S와 B의 수를 저장
else
resultStr += strike + "S, " + ball + "B";
// 결과 메시지 출력
if (tvResult.getText().toString() == null || tvResult.getText().toString() == "")
tvResult.setText(resultStr);
else
tvResult.append(resultStr);
// 카운트 수가 10일 경우 "기회 10회 전부 소진" 출력 후 카운트 수 초기화
if (count == 10) {
tvResult.append("\n기회 10회 전부 소진! 다시 게임시작 버튼을 눌러주세요.");
count = 0;
dap1 = 0;
dap2 = 0;
dap3 = 0;
}
}
}
개선점
- 함수를 만들 수도 있었다