⭐mini BaseballGame⭐

p_chan.log·2022년 11월 30일

project

목록 보기
2/3

🎃 java toy project

이번 프로젝트는 내가 야구를 좋아해서 미니 야구게임으로 토이프로젝트를 만들어보았다.

😺 깃허브 링크 : https://github.com/chandeveloper/MiniBaseBall_Game

📺 유튜브 시연 영상

✍️ class


우선 클래스는 총 3개가 나왔다.

첫번째로 main메서드 포함된 Game클래스
두번째는 홈팀 클래스
세번째는 어웨이팀 클래스 이다.

⚾Game클래스

package baseballgame;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Game {
	// main메서드 생성 throws IOException으로 예외처리
	public static void main(String[] args) throws IOException {
		//	BufferedReader 입력받기 위한 준비물
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		// 홈팀 과 어웨이팀의 객체 생성
		HomeTim homeTim = new HomeTim();
		AwayTim awayTim = new AwayTim();

		while (true) {
			// 게임 시작
			System.out.println("☆★☆★ 미니 야구 게임 ☆★☆★");
			System.out.println("1. 게임시작");
			System.out.println("2. 게임종료");
			System.out.print("3. 입력 >> ");
			// int값을 입력받아 게임을 시작/종료 한다.
			int start = Integer.parseInt(br.readLine());
			System.out.println();	// 한줄 띄어쓰기

			if (start == 1) {
				// 팀 이름 설정 
				System.out.println("※※ 팀 이름 설정 ※※");
				System.out.println();
				System.out.println("홈팀 이름설정");
				System.out.print("입력 >> ");
				// 값을 입력받아 homeTim객체의 tim1변수에 저장
				homeTim.tim1 = br.readLine();
				System.out.println();
				System.out.println("어웨이팀  이름설정");
				System.out.print("입력 >> ");
				// 값을 입력받아 awayTim객체의 tim2변수에 저장
				awayTim.tim2 = br.readLine();
				System.out.println();
				
				// 경기이닝 수 입력
				System.out.print("이닝 수 입력 >> ");
				int n = Integer.parseInt(br.readLine());
				System.out.println();	// 한줄 띄어쓰기
				
				// n이닝만큼 경기를 진행
				for (int i = 1; i <= n; i++) {
					System.out.println("※※※※※ " + i + "회초 ※※※※※");
					awayTim.a_hit();		// away팀의 i회초 공격 메서드
					for (int j = 0; j < 1; j++) {
						System.out.println("◈◈◈ 3아웃 공수교대 ◈◈◈");
						System.out.println();	// 한줄 띄어쓰기
						System.out.println("※※※※※ " + i + "회말 ※※※※※");
						homeTim.h_hit();	// home팀의 i회말 공격 메서드
					}
						System.out.println("◈◈◈ 3아웃 공수교대 ◈◈◈");
				}

				
			} else if (start == 2) {
				// 게임종료를 선택했을때
				System.out.println("게임을 종료합니다");	
				break;
			} else {
				// 게임시작, 게임종료가 아닌걸 눌렀을때
				System.out.println("잘못눌렀습니다");
				System.out.println("다시 입력하세요");
				System.out.println();	// 한줄 띄어쓰기
				continue;
			}
			
			// 게임결과 메소드
			System.out.println("※※※※※ 경기가 종료되었습니다 ※※※※※");
			if (homeTim.hscore > awayTim.ascore) {			// HomeTim이 이겼을때
				System.out.println("양 팀 치열한 승부끝에");
				System.out.println(homeTim.tim1 + "가(이) 승리하였습니다");
				System.out.println("◈◈ 최종스코어 ◈◈");
				System.out.println(homeTim.tim1 + " : " + homeTim.hscore);
				System.out.println(awayTim.tim2 + " : " + awayTim.ascore);
			} else if (homeTim.hscore < awayTim.ascore) {	// AwayTim이 이겼을때
				System.out.println("양 팀 치열한 승부끝에");
				System.out.println(awayTim.tim2 + "가(이) 승리하였습니다");
				System.out.println("◈◈ 최종스코어 ◈◈");
				System.out.println(homeTim.tim1 + " : " + homeTim.hscore);
				System.out.println(awayTim.tim2 + " : " + awayTim.ascore);
			} else {
				System.out.println("양 팀 치열한 승부끝에 ");	// 무승부일때
				System.out.println("결과는 무승부입니다.");
				System.out.println("◈◈ 최종스코어 ◈◈");
				System.out.println(homeTim.tim1 + " : " + homeTim.hscore);
				System.out.println(awayTim.tim2 + " : " + awayTim.ascore);
			}
			break;
		}	// while문 끝
	
	}
}

⚾ HomeTeam클래스

package baseballgame;

import java.util.Random;
import java.util.Scanner;

public class HomeTeam {

	static String hTeam;			// 홈팀 이름을 입력받아 저장할 static변수
	static int hScore;				// 홈팀 점수를 저장할 static변수

	public void h_hit() {
		Random r = new Random();	// 랜덤클래스를 이용해 변수 r 생성
		Scanner sc = new Scanner(System.in);

		int percent = 0; 			// 타격했을때 결과값의 확률을 부여할 변수
		int speed = 0; 				// 구속을 담을 변수
		int outCnt = 0; 			// 아웃카운트를 담을 변수

		boolean[] base; 			// boolean타입 base라는 배열선언 해서
		base = new boolean[4]; 		// 홈(0번방), 1(1번방), 2(2번방), 3(3번방), 루의 값을 넣어준다
		
		// outCnt가 2이하일때까지 공격을 반복한다
		while (outCnt <= 2) {
			System.out.println("◆◆◆ " + hTeam + " 공격 ◆◆◆");
			
			// 타격전 주자가 몇루에 있는지를 출력할 for문
			/*
				만루일때 		: base배열의 1, 2, 3번방이 전부 true면 주자 만루 출력
			    만루가 아닐때  	: base i번방이 true이면 주자 i루 출력
			 */
			for (int i = 1; i <= 3; i++) {
				if (base[1] && base[2] && base[3]) {		
					System.out.println("주자 만루 풀베이스");
				} else if (base[i]) {						
					System.out.println("주자 : " + i + "루");
				}
			}
			
			// 게임중 플레이화면
			System.out.println("아웃카운트 : " + outCnt + "아웃");
			System.out.println("1. 타격하기");
			System.out.println(HomeTeam.hTeam + " : " + HomeTeam.hScore);
			System.out.println(AwayTeam.aTeam + " : " + AwayTeam.aScore);
			System.out.print("입력 >> ");
			int hit = sc.nextInt();				
			System.out.println();	// 한줄 띄어쓰기
			
			// hit가 1이면 if문 실행
			if (hit == 1) {
				
				// 투수가 공을 던져서 타자한테 가기까지의 시간을 표현한 Thread.sleep문
				System.out.println("투수 와인드업!!");
				System.out.println();
				try {
					Thread.sleep(1700);	
				} catch (InterruptedException e) {
					e.printStackTrace();
				}

				percent = r.nextInt(100) + 1; 					// 타격했을때 나올 확률을 Random클래스로 구할 변수
				speed = r.nextInt(10) + 150; 					// 구속을 Random클래스로 구할 변수

				// 1~40의 숫자가 나오면 아웃 / 40% 확률
				if (percent >= 1 && percent <= 40) {
					outCnt++;									// 아웃이면 outCnt가 1씩 증가
					System.out.println("타자 쳤습니다!!!");
					System.out.println("타격결과 : 타자 아웃!!");
					System.out.println("구속 : " + speed + "km");
					System.out.println("======================");
					System.out.println();
				}
				
				// 41~60의 숫자가 나오면 안타 / 20% 확률
				if (percent >= 41 && percent <= 60) {
					System.out.println("타자 쳤습니다!!!");
					System.out.println("★타격결과 : 안타★");
					System.out.println("구속 : " + speed + "km");
					System.out.println("======================");
					System.out.println();
					/*
					   안타일때 : for문으로 3번 반복 하는데 k는 3이고 3, 2, 1 역순으로 배열을 확인해준다.
					    		 k == 3 	: base의 k번방(3루)이 true이면 주자는 홈인 
					              		      aScore++ 후 k번방(3루)은 false처리
					             k == 2, 1  : base의 k번방(2루, 1루)이 true일 때는 false처리 후 
					              			  k번방(2루, 1루)에 1을 더해서 true를 준다. 
					             타자주자 	: 타자는 1루로 진루(1번방에 true)
					*/
					for (int k = 3; k >= 1; k--) {
						if (base[k]) {
							if (k == 3) { 			// 3루에 있는 선수는 홈인.
								hScore++; 			// 동시에 점수 획득.
								base[k] = false;	// 3루는 비워진다.
								continue;
							}
							// 1, 2루인 경우 1루씩 진루하고 원래 있던 자리는 비워진다.
							base[k] = false;
							base[k + 1] = true;
						}
					}
					base[1] = true; 				// 타자는 1루로 진루.
				}
				
				// 61~77의 숫자가 나오면 2루타 / 17% 확률
				if (percent >= 61 && percent <= 77) {
					System.out.println("타자 쳤습니다!!!");
					System.out.println("★★타격결과 : 2루타★★");
					System.out.println("구속 : " + speed + "km");
					System.out.println("======================");
					System.out.println();
					/*
					   2루타일때 : for문으로 3번 반복 하는데 k는 3이고 3, 2, 1 역순으로 배열을 확인해준다.
					    		  k == 3, 2 : base의 k번방(3루, 2루)이 true이면 주자는 홈인 
					              		      aScore++ 후 k번방(3루, 2루)은 false처리
					              k == 1 	: base의 k번방(1루)이 true일 때는 false처리 후 
					              			  k번방(1루)에 2를 더해서 true를 준다. 
					              타자주자 	: 타자는 2루로 진루(2번방에 true)
					*/
					for (int k = 3; k >= 1; k--) {
						if (base[k]) {
							if (k == 3 || k == 2) { // 3루 혹은 2루에 있는 선수는 홈인.
								hScore++; 			// 동시에 점수 획득.
								base[k] = false;	// 2루 또는 3루는 비워진다.
								continue;
							}
							// 1루인 경우 3루로 진루하고 1루는 비워진다.
							base[k] = false;
							base[k + 2] = true;
						}
					}
					base[2] = true; 				// 타자는 2루로 진루.
				}
				
				// 78~90의 숫자가 나오면 3루타 / 13% 확률
				if (percent >= 78 && percent <= 90) {
					System.out.println("타자 쳤습니다!!!");
					System.out.println("★★★타격결과 : 3루타★★★");
					System.out.println("구속 : " + speed + "km");
					System.out.println("======================");
					System.out.println();
					/*
					   3루타일때 : for문으로 3번 반복 하는데 k는 3이고 3, 2, 1 역순으로 배열을 확인해준다.
					    		  k == 3, 2, 1  : base의 k번방(3루, 2루, 1루)이 true이면 주자는 홈인 
					              		          aScore++ 후 k번방(3루, 2루, 1루)은 false처리
					              타자주자 	 	: 타자는 3루로 진루(3번방에 true)
					*/
					for (int k = 3; k >= 1; k--) {
						if (base[k]) { 				// k루의 선수는 홈인.
							hScore++; 				// 동시에 점수 획득.
							base[k] = false;		// k루의 베이스는 비워진다
						}
					}
					base[3] = true; 				// 타자는 3루로 진루.
				}
				
				// 91~100의 숫자가 나오면 홈런 / 10% 확률
				if (percent >= 91 && percent <= 100) {
					
					// 홈런쳤을때 공이 날아가는 시간을 Thread.sleep으로 효과를 표현
					try {
						System.out.println("타자 쳤습니다!!!");
						System.out.println("쭉쭉 뻗어나가는 공");
						System.out.println("담장뒤로~~ 담장뒤로~~~");
						Thread.sleep(2300);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					System.out.println("!!☆☆☆홈런☆☆☆!!");
					System.out.println("구속 : " + speed + "km");
					System.out.println("======================");
					System.out.println();
					/*
					   홈런일때 : for문으로 3번 반복 하는데 k는 1이고 1, 2, 3 순으로 배열을 확인해준다.
					    		 k == 1, 2, 3  	: base의 k번방(1루, 2루, 3루)이 true이면 주자는 홈인 
					              		          aScore++ 후 k번방(1루, 2루, 3루)은 false처리
					             타자주자 	 	: aScore++ 홈인
					*/
					for (int k = 1; k <= 3; k++) {
						if (base[k]) { 				// 모든 주자가 홈인.
							hScore++; 				// 주자 1명 당 점수 1점씩 획득
							base[k] = false;
						}
					}
					hScore++; 						// 홈런친 타자의 점수 1점 추가.
				}
			  
			} 
			// 타격하기가 아닌 다른걸 눌렀을때
			else {
				System.out.println("잘못눌렀습니다");
				System.out.println("다시 입력하세요");
				System.out.println();
				continue;
			}
		}	// while문 끝
	
	}
}

⚾ AwayTeam클래스

package baseballgame;

import java.util.Random;
import java.util.Scanner;

public class AwayTeam {

	static String aTeam;				// 어웨이팀 이름을 입력받아 저장할 static변수
	static int aScore;					// 어웨이팀 점수를 저장할 static변수

	public void a_hit() {
		Random r = new Random();		// 랜덤클래스를 이용해 변수 r 생성
		Scanner sc = new Scanner(System.in);

		int percent = 0;				// 타격했을때 결과값의 확률을 부여할 변수
		int speed = 0;					// 구속을 담을 변수
		int outCnt = 0;					// 아웃카운트를 담을 변수

		boolean[] base;					// boolean타입 base라는 배열선언 해서
		base = new boolean[4];			// 홈(0번방), 1(1번방), 2(2번방), 3(3번방), 루의 값을 넣어준다
		
		// outCnt가 2이하일때까지 공격을 반복한다
		while (outCnt <= 2) {
			System.out.println("◆◆◆ " + aTeam + " 공격 ◆◆◆");
			
			// 타격전 주자가 몇루에 있는지를 출력할 문장
			/*
				만루일때 		: base배열의 1, 2, 3번방이 전부 true면 주자 만루 출력
			    만루가 아닐때  	: base i번방이 true이면 주자 i루 출력
			 */
			for (int i = 1; i <= 3; i++) {
				if (base[1] && base[2] && base[3]) {			
					System.out.println("주자 만루 풀베이스");
				} else if(base[i]){								
					System.out.println("주자 : " + i + "루");
				}
			}
			
			// 게임중 플레이화면
			System.out.println("아웃카운트 : " + outCnt + "아웃");
			System.out.println("1. 타격하기");
			System.out.println(HomeTeam.hTeam + " : " + HomeTeam.hScore);
			System.out.println(AwayTeam.aTeam + " : " + AwayTeam.aScore);
			System.out.print("입력 >> ");
			int hit = sc.nextInt();					
			System.out.println();	// 한줄 띄어쓰기
			
			// hit가 1이면 if문 실행
			if (hit == 1) {
				
				// 투수가 공을 던져서 타자한테 가기까지의 시간을 표현한 Thread.sleep문
				System.out.println("투수 와인드업!!");
				System.out.println();
				try {
					Thread.sleep(1700);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}

				percent = r.nextInt(100) + 1;			// 타격했을때 나올 확률을 Random클래스로 구할 변수
				speed = r.nextInt(10) + 150;			// 구속을 Random클래스로 구할 변수
				
				// 1~40의 숫자가 나오면 아웃 / 40% 확률
				if (percent >= 1 && percent <= 40) {
					outCnt++;							// 아웃이면 outCnt가 1씩 증가
					System.out.println("타자 쳤습니다!!!");
					System.out.println("타격결과 : 타자 아웃!!");
					System.out.println("구속 : " + speed + "km");
					System.out.println("======================");
					System.out.println();
				}
				
				// 41~60의 숫자가 나오면 안타 / 20% 확률
				if (percent >= 41 && percent <= 60) {
					System.out.println("타자 쳤습니다!!!");
					System.out.println("★타격결과 : 안타★");
					System.out.println("구속 : " + speed + "km");
					System.out.println("======================");
					System.out.println();
					/*
					   안타일때 : for문으로 3번 반복 하는데 k는 3이고 3, 2, 1 역순으로 배열을 확인해준다.
					    		 k == 3 	: base의 k번방(3루)이 true이면 주자는 홈인 
					              		      aScore++ 후 k번방(3루)은 false처리
					             k == 2, 1  : base의 k번방(2루, 1루)이 true일 때는 false처리 후 
					              			  k번방(2루, 1루)에 1을 더해서 true를 준다. 
					             타자주자 	: 타자는 1루로 진루(1번방에 true)
					*/
					for (int k = 3; k >= 1; k--) {
						if (base[k]) {
							if (k == 3) { 				// 3루에 있는 선수는 홈인.
								aScore++; 				// 동시에 점수 획득.
								base[k] = false; 		// 3루는 비워진다.
								continue;
							}
							// 1, 2루인 경우 1루씩 진루하고 원래 있던 자리는 비워진다.
							base[k] = false;
							base[k + 1] = true;
						}
					}
					base[1] = true; // 타자는 1루로 진루.
				}
				
				// 61~77의 숫자가 나오면 2루타 / 17% 확률
				if (percent >= 61 && percent <= 77) {
					System.out.println("타자 쳤습니다!!!");
					System.out.println("★★타격결과 : 2루타★★");
					System.out.println("구속 : " + speed + "km");
					System.out.println("======================");
					System.out.println();
					/*
					   2루타일때 : for문으로 3번 반복 하는데 k는 3이고 3, 2, 1 역순으로 배열을 확인해준다.
					    		  k == 3, 2 : base의 k번방(3루, 2루)이 true이면 주자는 홈인 
					              		      aScore++ 후 k번방(3루, 2루)은 false처리
					              k == 1 	: base의 k번방(1루)이 true일 때는 false처리 후 
					              			  k번방(1루)에 2를 더해서 true를 준다. 
					              타자주자 	: 타자는 2루로 진루(2번방에 true)
					*/
					for (int k = 3; k >= 1; k--) {
						if (base[k]) {
							if (k == 3 || k == 2) {		 // 3루 혹은 2루에 있는 선수는 홈인.
								aScore++; 				 // 동시에 점수 획득.
								base[k] = false; 		 // 2루 또는 3루는 비워진다.
								continue;
							}
							// 1루인 경우 3루로 진루하고 1루는 비워진다.
							base[k] = false;
							base[k + 2] = true;
						}
					}
					base[2] = true; // 타자는 2루로 진루.
				}
				
				// 78~90의 숫자가 나오면 3루타 / 13% 확률
				if (percent >= 78 && percent <= 90) {
					System.out.println("타자 쳤습니다!!!");
					System.out.println("★★★타격결과 : 3루타★★★");
					System.out.println("구속 : " + speed + "km");
					System.out.println("======================");
					System.out.println();
					/*
					   3루타일때 : for문으로 3번 반복 하는데 k는 3이고 3, 2, 1 역순으로 배열을 확인해준다.
					    		  k == 3, 2, 1  : base의 k번방(3루, 2루, 1루)이 true이면 주자는 홈인 
					              		          aScore++ 후 k번방(3루, 2루, 1루)은 false처리
					              타자주자 	 	: 타자는 3루로 진루(3번방에 true)
					*/
					for (int k = 3; k >= 1; k--) {
						if (base[k]) { 						// k루의 선수는 홈인.
							aScore++; 						// 동시에 점수 획득.
							base[k] = false;				// k루의 베이스는 비워진다
						}
					}
					base[3] = true; 						// 타자는 3루로 진루.
				}
				
				// 91~100의 숫자가 나오면 홈런 / 10% 확률
				if (percent >= 91 && percent <= 100) {
					
					// 홈런쳤을때 공이 날아가는 시간을 Thread.sleep으로 효과를 표현
					try {
						System.out.println("타자 쳤습니다!!!");
						System.out.println("쭉쭉 뻗어나가는 공");
						System.out.println("담장뒤로~~ 담장뒤로~~~");
						Thread.sleep(2300);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					System.out.println("!!☆☆☆홈런☆☆☆!!");
					System.out.println("구속 : " + speed + "km");
					System.out.println("======================");
					System.out.println();
					/*
					   홈런일때 : for문으로 3번 반복 하는데 k는 1이고 1, 2, 3 순으로 배열을 확인해준다.
					    		 k == 1, 2, 3  	: base의 k번방(1루, 2루, 3루)이 true이면 주자는 홈인 
					              		          aScore++ 후 k번방(1루, 2루, 3루)은 false처리
					             타자주자 	 	: aScore++ 홈인
					*/
					for (int k = 1; k <= 3; k++) {
						if (base[k]) { 						// 모든 주자가 홈인.
							aScore++; 						// 주자 1명 당 점수 1점씩 획득
							base[k] = false;
						}
					}
					aScore++; 								// 홈런친 타자의 점수 1점 추가.
				}
				
			} 
			// 타격하기가 아닌 다른걸 눌렀을때
			else {
				System.out.println("잘못눌렀습니다");
				System.out.println("다시 입력하세요");
				System.out.println();
				continue;
			}
		}	// while문 끝
	
	}
}

👉 흐름

1. 게임시작
2. 홈팀과 어웨이 팀의 이름을 각각 입력받아 변수에 저장
3. 이닝 수 입력 -> 입력한 이닝 수 만큼 경기를 진행
4. AwayTeam클래스의 공격 메서드 호출

  • AwayTeam클래스의 outCnt변수가 3이 될때까지 공격메서드를 실행
    outCnt변수가 3이되면 break로 공격메서드 탈출 Game클래스로 넘어와서

5. HomeTeam클래스의 공격 메서드 호출

  • HomeTeam클래스의 outCnt변수가 3이 될때까지 공격메서드를 실행
    outCnt변수가 3이되면 break로 공격메서드 탈출

6. 위 4, 5번을 n이닝만큼 반복
7. n이닝이 종료되면 게임결과 메서드 출력 후 게임 종료

🎇 주요 코드 소개

주요코드는 위 전체코드에서 해당 내용들만 잘라서 한번에 보이게 해놓은거다.

🥎 타격확률 / 투구 스피드

Random r = new Random();		// 랜덤클래스를 이용해 변수 r 생성
percent = r.nextInt(100) + 1;	// 1~100까지의 랜덤 수를 percent 변수에 저장
speed = r.nextInt(10) + 150;	// 150~160 사이의 랜덤수를 speed 변수에 저장

// 1~40의 숫자가 나오면 아웃 / 40% 확률
if (percent >= 1 && percent <= 40)
System.out.println("구속 : " + speed + "km");	// 타격마다 스피드를 출력

// 41~60의 숫자가 나오면 안타 / 20% 확률
if (percent >= 41 && percent <= 60)
System.out.println("구속 : " + speed + "km");	// 타격마다 스피드를 출력

// 61~77의 숫자가 나오면 2루타 / 17% 확률
if (percent >= 61 && percent <= 77)
System.out.println("구속 : " + speed + "km");

// 78~90의 숫자가 나오면 3루타 / 13% 확률
if (percent >= 78 && percent <= 90)
System.out.println("구속 : " + speed + "km");

// 91~100의 숫자가 나오면 홈런 / 10% 확률
if (percent >= 91 && percent <= 100)
System.out.println("구속 : " + speed + "km");
  • 랜덤클래스를 이용해 1~100까지의 랜덤 수를 생성해 각각 티격확률을 부여
  • 150~160의 랜덤 수를 생성해 스피드를 부여했다.
  • 내가 홈팀과 어웨이팀을 class 하나로만들어 상속받아 사용하지 않은 이유는 게임의 재미를 이용해 팀별로 타격확률을 다르게 바꿀수있게 만들고 싶어서였다.

🥎 주자 / 베이스 진루 / 점수획득

boolean[] base; 			// boolean타입 base라는 배열선언 해서
base = new boolean[4]; 		// 홈(0번방), 1(1번방), 2(2번방), 3(3번방), 루의 값을 넣어준다



// 타격전 주자가 몇루에 있는지를 출력할 for문
/*
	만루일때 : base배열의 1, 2, 3번방이 전부 true면 주자 만루 출력
    만루가 아닐때 : base i번방이 true이면 주자 i루 출력
*/
for (int i = 1; i <= 3; i++) {
	if (base[1] && base[2] && base[3]) {		// base배열의 1,2,3번방이 다 true면 주자만루
		System.out.println("주자 만루 풀베이스");
	} else if (base[i]) {						// base배열의 i번쨰 방이 true면 주자 i루
		System.out.println("주자 : " + i + "루");
	}
}




/*
   안타일때 : for문으로 3번 반복 하는데 k는 3이고 3, 2, 1 역순으로 배열을 확인해준다.
    		 k == 3 	: base의 k번방(3루)이 true이면 주자는 홈인 
              		      aScore++ 후 k번방(3루)은 false처리
             k == 2, 1  : base의 k번방(2루, 1루)이 true일 때는 false처리 후 
              			  k번방(2루, 1루)에 1을 더해서 true를 준다. 
             타자주자 	: 타자는 1루로 진루(1번방에 true)
*/
for (int k = 3; k >= 1; k--) {
	if (base[k]) {
		if (k == 3) { 				// 3루에 있는 선수는 홈인.
			aScore++; 				// 동시에 점수 획득.
			base[k] = false; 		// 3루는 비워진다.
			continue;
		}
		// 1, 2루인 경우 1루씩 진루하고 원래 있던 자리는 비워진다.
		base[k] = false;
		base[k + 1] = true;
	}
}
base[1] = true; // 타자는 1루로 진루.




/*
   2루타일때 : for문으로 3번 반복 하는데 k는 3이고 3, 2, 1 역순으로 배열을 확인해준다.
    		  k == 3, 2  : base의 k번방(3루, 2루)이 true이면 주자는 홈인 
              		      aScore++ 후 k번방(3루, 2루)은 false처리
              k == 1 	 : base의 k번방(1루)이 true일 때는 false처리 후 
              			  k번방(1루)에 2를 더해서 true를 준다. 
              타자주자 	 : 타자는 2루로 진루(2번방에 true)
*/
for (int k = 3; k >= 1; k--) {
	if (base[k]) {
		if (k == 3 || k == 2) {		 // 3루 혹은 2루에 있는 선수는 홈인.
			aScore++; 				 // 동시에 점수 획득.
			base[k] = false; 		 // 2루 또는 3루는 비워진다.
			continue;
		}
		// 1루인 경우 3루로 진루하고 1루는 비워진다.
		base[k] = false;
		base[k + 2] = true;
	}
}
base[2] = true; // 타자는 2루로 진루.




/*
   3루타일때 : for문으로 3번 반복 하는데 k는 3이고 3, 2, 1 역순으로 배열을 확인해준다.
    		  k == 3, 2, 1  : base의 k번방(3루, 2루, 1루)이 true이면 주자는 홈인 
              		          aScore++ 후 k번방(3루, 2루, 1루)은 false처리
              타자주자 	 	: 타자는 3루로 진루(3번방에 true)
*/
for (int k = 3; k >= 1; k--) {
	if (base[k]) { 						// k루의 선수는 홈인.
		aScore++; 						// 동시에 점수 획득.
		base[k] = false;				// k루의 베이스는 비워진다
	}
}
base[3] = true; 						// 타자는 3루로 진루.




/*
   홈런일때 : for문으로 3번 반복 하는데 k는 1이고 1, 2, 3 순으로 배열을 확인해준다.
    		  k == 1, 2, 3  : base의 k번방(1루, 2루, 3루)이 true이면 주자는 홈인 
              		          aScore++ 후 k번방(1루, 2루, 3루)은 false처리
              타자주자 	 	: aScore++ 홈인
*/
for (int k = 1; k <= 3; k++) {
	if (base[k]) { 						// 모든 주자가 홈인.
		aScore++; 						// 주자 1명 당 점수 1점씩 획득
		base[k] = false;
	}
}
aScore++; 								// 홈런친 타자의 점수 1점 추가.

🙏 마무리(느낀점)

완성도는 그렇게 높지 않은거 같지만
내가 좋아하는 주제로 토이 프로젝트를 만들어보니까 시간 가는줄 모르고 만들었고 앞으로 다른 주제로도 많이 만들어봐야겠다. ㅎㅎ

profile
개발자 박찬의 노트

0개의 댓글