냥쟝
반응형
<code />
package days1; // 이름, 성별, 단/복식을 선언한 슈퍼클래스 public abstract class GameElement { private String [] name; private int set; public GameElement() { } public GameElement(String[] name, int gender, int soloDuo) { this.name = name; this.set = set; } public String[] getName() { return name; } public String[] setName() { return name; } public int getset() { return set; } public void setset(int set) { this.set = set; } }
<code />
package days1; import java.util.Random; public class GameMethod extends GameElement{ // 계수기 출력, Log파일 생성, Player클래스로부터 받은 이름 // 넘겨주기 위한 객체 생성 및 초기화 ScoreBoard sb = new ScoreBoard(); // 포인트, 게임, 세트를 저장하고 ScoreBoard 클래스로 넘겨주기 위한 배열 int [][] board = new int [2][3]; // 점수 발생을 위한 랜덤 객체 Random rnd = new Random(); int a = 0; // 세트 스코어를 확인하는 메소드 public void setCheck(int a) { while (board[0][2] < a && board[1][2] < a) { //선수 1 과 2의 세트 스코어를 나타낸다 gameCheck(); } } // 계수기에 선수 이름을 출력하기 위한 메소드 public void nameSet(String[] names) { sb.setScoreBoardName(names); } // Log파일 이름에 선수 이름을 지정하기 위한 메소드 public void getNames(String[] names) { sb.getNames(names); } // 게임 스코어를 확인하는 메소드 private void gameCheck(){ //스코어 갱신 선수 1과 2중 누가 서브를 칠지는 a 변수에 저장된다 while (!(board[a][1] - board[1-a][1] >1 && board[a][1] > 5)) { //1보다크고 5보다 클 때까지 반복 gameRoll(); //gameRoll() 메서드가 호출 if(board[a][1] == 6 && board[1-a][1] == 6) { //playTieBreak() 메서드를 호출하고 그 결과를 a에 할당하고 반복문을 종료 a = playTieBreak(); break; } } board[0][1] = board[1][1] = 0; board[a][2]++; sb.printSet(a, Integer.toString(board[a][2])); //게임보드의 위치 초기화, 해당 위치에 있는 값 증가 sb는 출력작업을 처리하는 데 사용 /*try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); }*/ } // 타이브레이크 private int playTieBreak() { while (!(board[a][0] > 6 && board[a][0] - board[1-a][0] >= 2)) { a = rnd.nextInt(2); board[a][0]++; sb.printScore(Integer.toString(board[0][0]), Integer.toString(board[1][0])); /*try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); }*/ } board[a][1]++; sb.printGame(a, Integer.toString(board[a][1])); /*try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); }*/ return a; } // 포인트 생성 메소드 private void gameRoll() { String [] score = {"0","15","30","40","WIN"}; while(!(board[a][0] > 3 && board[a][0] - board[1-a][0] > 1)) { // while 루프는 현재 플레이어(a)가 이길 때까지 반복됩니다. // 이를 위해 board 배열에서 현재 플레이어(a)의 득점 상황(board[a][0])을 1 증가 a = rnd.nextInt(2); board[a][0]++; sb.printScore(score[board[0][0]], score[board[1][0]]); /*try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); }*/ if(board[0][0] == 3 && board[1][0] == 3) a = playDeuce(); } //while end board[0][0] = board[1][0] = 0; board[a][1]++; sb.printGame(a, Integer.toString(board[a][1])); /*try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); }*/ } // 듀스 상황에서 포인트를 생성하는 메소드 private int playDeuce() { String [] score = {"0","15","30","40","AD","WIN"}; while(!(board[a][0] == 5 && board[1-a][0] == 3)) { a = rnd.nextInt(2); board[a][0]++; if(board[1-a][0] == 4) board[1-a][0]--; sb.printScore(score[board[0][0]], score[board[1][0]]); /*try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); }*/ } return a; } }

 

<code />
package days1; import java.io.IOException; import java.util.Scanner; public class Player extends GameElement{ String[] name; Scanner sc = new Scanner(System.in); public void createPlayer() { // 게임 방식 입력 System.out.print("게임 방식을 입력하시오 (3 4) : "); int set = sc.nextInt(); while (!(set == 3||set ==4)) { System.out.println("올바른 입력이 아닙니다."); System.out.print("다시 게임 방식을 입력하시오 (3set 4set) : "); set = sc.nextInt(); try { System.in.skip(System.in.available()); } catch (IOException e) { e.printStackTrace(); } } // // 이름을 저장할 배열의 크기를 단식이면 2, 복식이면 4로 입력 방식에 따라 유동적으로 할당 //[soloDuo * 2]; // // // 단식을 선택한 경우 - 성별 선택 // if(soloDuo == 1) { // System.out.print("성별을 입력하시오 (1.남자 2.여자) : "); // gender = sc.nextInt(); // while (!(gender == 1||gender ==2)) { // System.out.println("올바른 입력이 아닙니다."); // System.out.print("다시 성별을 입력하시오 (1.남자 2.여자) : "); // gender = sc.nextInt(); // try { // System.in.skip(System.in.available()); // } catch (IOException e) { // e.printStackTrace(); // } // } // } // // 복식을 선택한 경우 - 성별 선택 // else { // System.out.print("성별을 입력하시오 (1.남자 2.여자 3.혼성) : " ); // gender = sc.nextInt(); // while (!(gender == 1||gender == 2 ||gender == 3)) { // System.out.println("올바른 입력이 아닙니다."); // System.out.print("다시 성별을 입력하시오 (1.남자 2.여자 3.혼성) : "); // gender = sc.nextInt(); // try { // System.in.skip(System.in.available()); // } catch (IOException e) { // e.printStackTrace(); // } // } // } // // if(gender == 1) { // gender = 3; // } // else { // gender = 2; // } // 선수 이름 입력 if (set == 3) { name = new String[2]; } else { name = new String[4]; } for (int i = 0; i < name.length; i++) { System.out.printf("%d번 선수의 이름을 입력하시오 : ", i+1); name[i] = sc.next(); } this.setset(set); // this.setname(name); // this.setGender(gender); // this.setSoloDuo(soloDuo); } }
<code />
package days1; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.text.SimpleDateFormat; import java.time.Duration; import java.time.LocalDate; import java.time.LocalTime; import java.util.Arrays; import java.util.Date; public class ScoreBoard { LocalTime elapsedTime = LocalTime.now(); // Play Time 계산을 위한 변수, 테니스 게임을 시작하는 순간의 시간 SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); // 시간 출력 형식 String [][] scoreBoard = createScoreBoard(); // 계수기, 클래스 전반적으로 쓰이기 때문에 전역변수로 선언 String logFileNames; // Log 파일 이름을 지정하기 위한 변수 int temp; // 세트가 종료될 때 다음 세트 기록을 위해 계수기의 주소를 증가시키기 위한 변수 // 입력받은 이름을 Log 파일 제목에 반영하기 전 가공 public void getNames(String[] name) { logFileNames = Arrays.toString(name); } // 계수기 생성 메소드 private String[][] createScoreBoard() { scoreBoard = new String [3][8]; String [] menu = {"Team","Point","Set 1","Set 2","Set 3","Set 4","Set 5","Match"}; // 배열의 0번째 행 - 카테고리로 초기화 for (int i = 0; i < menu.length; i++) { scoreBoard[0][i]=menu[i]; } // 이름 입력되는 공간을 제외한 나머지 부분을 0으로 초기화 for (int i = 1; i < scoreBoard.length; i++) { for (int j = 1; j < scoreBoard[i].length; j++) { scoreBoard[i][j]=Integer.toString(0); } } // 계수기 생성 완료 -> 전역변수 scoreboard로 반환 return scoreBoard; } // 계수기에 선수 이름 반영하는 메소드 public void setScoreBoardName(String[] names) { // 단식일 경우 if(names.length == 2) { scoreBoard[1][0] = names[0]; scoreBoard[2][0] = names[1]; } // 복식일 경우 else if(names.length == 4 ){ scoreBoard[1][0] = names[0] + "/" + names[1]; scoreBoard[2][0] = names[2] + "/" + names[3]; } } // 포인트를 계수기에 반영 및 출력하는 메소드 public void printScore(String score1, String score2) { scoreBoard[1][1] = score1; scoreBoard[2][1] = score2; printBoard(); } // // 게임스코어를 계수기에 반영 및 출력하는 메소드 // public void printGame(int a, String gameScore) { // // int i = temp; // // if( a == 0) scoreBoard[1][2 + i] = gameScore; // else scoreBoard[2][2 + i] = gameScore; // // // 양 측의 점수 차이 계 // int sbd = Math.abs(Integer.parseInt(scoreBoard[1][2+i]) - Integer.parseInt(scoreBoard[2][2 + i])); // // // 2게임차 이상이면서 먼저 6게임을 딴 경우 또는 타이브레이크 상황에서 7게임을 먼저 딴 경우 // // 현재 주소에는 더이상 기록하지 않고 다음 세트를 기록하는 주소로 이동하기 위해 temp를 증가시킴 // for (int j = 1; j < 3; j++) { // if(scoreBoard[j][2 + i].contains("6") && sbd >= 2) temp++; // else if(scoreBoard[j][2 + i].contains("7")) temp++; // } // // printBoard(); // } // // // 세트스코어를 계수기에 반영 및 출력하는 메소드 // public void printSet(int a, String setScore) { // // if( a == 0) scoreBoard[1][7] = setScore; // else scoreBoard[2][7] = setScore; // printBoard(); // } // Log 파일 생성 메소드 // public void creattxtfile(String[][] scoreBoard, String logFileNames) { // // LocalDate todayLog = LocalDate.now(); // Log 파일 제목에 현재 날짜를 반영하기 위한 객체 생성 // Date dayLog = new Date(); // Log가 기록될 때 현재 시간을 기록하기 위한 객체 생성 // // // Log 파일 이름 형식 및 저장 위치 설정, 저장 위치 : C:\Users\"컴퓨터 사용자의 이름" => 모든 컴퓨터에서 동일하게 적용됨(user.home의 기능) // String fileName = System.getProperty("user.home") + "\\" + todayLog + logFileNames + " GameLog.txt"; // // // 게임 시작 시의 시간 elapsedTime과의 차이를 계산하여 Play Time을 Log 파일에 기록 // LocalTime timeLog = LocalTime.now(); // Duration du = Duration.between(elapsedTime, timeLog); // // // 시간 변환, 시/분/초 // long hour = du.toHours(); // long min = du.toMinutes() % 60; // long sec = du.getSeconds() % 60; // // try { // FileWriter fw = new FileWriter(fileName, true); // PrintWriter pw = new PrintWriter(fw); // pw.printf("Current Time: " + sdf.format(dayLog) + // "\t\t\t Play Time: %02d:%02d:%02d", hour, min, sec); // pw.println(); // pw.println("--------------------------------------------------------------"); // for (int i = 0; i < scoreBoard.length; i++) { // for (String line : scoreBoard[i]) { // pw.print(line+"\t"); // } // pw.println(); // pw.println("--------------------------------------------------------------"); // } // pw.println("\r\n"); // fw.close(); // } catch (IOException e) { // e.printStackTrace(); // } // // } // // 계수기 출력 메소드 // public void printBoard() { // // Date today = new Date(); // 현재 날짜를 반영하기 위한 객체 생성 // LocalTime todayBoard = LocalTime.now(); // 게임 시작 시의 시간 elapsedTime과의 차이를 계산하여 Play Time을 반영 // Duration du = Duration.between(elapsedTime, todayBoard); // // // 시간 변환, 시/분/초 // long hour = du.toHours(); // long min = du.toMinutes() % 60; // long sec = du.getSeconds() % 60; // System.out.printf("Current Time: " + sdf.format(today) + // "\t\t\t\t Play Time: %02d:%02d:%02d\n", hour, min, sec); // System.out.println("------------------------------------------------------------------------"); // // for (int i = 0; i < scoreBoard.length; i++) { // // for (int j = 0; j < scoreBoard[i].length; j++) { // System.out.printf("\t%s", scoreBoard[i][j]); // } // System.out.println(); // System.out.println("------------------------------------------------------------------------"); // // } // System.out.println("\n\n\n"); // // // 콘솔 또는 실행 파일에 출력하면서 Log파일에 기록 // creattxtfile(scoreBoard, logFileNames); // } // }
<java />
package days1; import java.io.IOException; // 실행을 위한 메인함수가 있는 클래스 public class Tennis { public static void main(String[] args) { Player p = new Player(); // 플레이어 객체 생성 p.createPlayer(); // User로부터 게임 진행 관련 정보를 입력받음 GameMethod g = new GameMethod(); // 테니스 게임 세팅을 위한 객체 생성 String[] names = p.getName(); // 입력받은 이름 저장 int set =p.getset(); int a = p.getset(); // 입력받은 세트를 저장 g.nameSet(names); // 계수기에 이름 반영 g.getNames(names); // Log 파일 생성 시 파일 제목에 이름 반영 g.setset(set); g.setCheck(a); // 테니스 게임 진행 // 게임 종료 try { System.out.println("게임이 끝났습니다. Enter를 누르면 종료합니다."); System.in.read(); System.in.skip(System.in.available()); } catch (IOException e) { e.printStackTrace(); } } }
profile

냥쟝

@냥쟝

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!