1.Lv1
package Java_preCourse.Day6.Lv1;
import java.util.Random;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Random random = new Random();
String[] opp_choice = {"가위","바위","보"};
String my_choice = " ";
while(true){
String answer = opp_choice[random.nextInt(opp_choice.length)];
System.out.print("가위/바위/보 중 하나를 입력하시오(그만두려면 exit를 입력) : ");
my_choice = sc.next();
sc.nextLine();
if(my_choice.equals("exit")) {
System.out.println("프로그램을 종료합니다");
break;
}
if (!my_choice.equals("가위") && !my_choice.equals("바위") && !my_choice.equals("보")){
System.out.println("가위 바위 보 중 하나만 입력할 수 있습니다");
}
else{
System.out.println("컴퓨터-"+answer+" vs "+my_choice+"-플레이어");
if(answer.equals(my_choice)){
System.out.println("비겼다!");
}
else if((answer.equals("가위")&&my_choice.equals("바위"))
||(answer.equals("바위")&&my_choice.equals("보"))
||(answer.equals("보")&&my_choice.equals("가위"))){
System.out.println("이겼다!");
}
else {
System.out.println("졌다");
}
}
}
}
}
Main.java
package Java_preCourse.Day6.Lv2;
import java.util.Random;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
GameManager gm = new GameManager();
gm.start();
while (true) {
String choice = gm.choice();
if(choice.equals("exit")){
System.out.println("프로그램을 종료합니다");
break;
}
if (!gm.check(choice)) {
continue;
}
gm.play(choice);
}
gm.printResult();
}
}
GameManager.java
package Java_preCourse.Day6.Lv2;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class GameManager {
private ArrayList<String> gameResults = new ArrayList<>();
String[] result = {"승","패","무"};
String[] opp_list = {"가위","바위","보"};
Random random = new Random();
Scanner sc = new Scanner(System.in);
public void start(){
System.out.println("가위 바위 보 게임을 시작합니다");
System.out.println("가위/바위/보 중 하나만 입력해야하며");
System.out.println("프로그램을 종료하고싶으면 exit를 입력하시오");
}
public String choice(){
System.out.print("가위 바위 보 중에 입력하시오:");
String my_choice = sc.next();
return my_choice;
}
public boolean check(String my_choice){
if(!my_choice.equals("가위") && !my_choice.equals("바위") && !my_choice.equals("보")){
System.out.println("가위 바위 보 중에 입력해주세요");
return false;
}
return true;
}
public String play(String player_Choice){
String computer_Choice = opp_list[random.nextInt(3)];
System.out.println("컴퓨터가 "+computer_Choice+"을(를) 냈습니다");
if(computer_Choice.equals(player_Choice)){
gameResults.add(result[2]);
removeOldest();
return result[2];
}
else if((computer_Choice.equals("가위")&&player_Choice.equals("바위"))
||(computer_Choice.equals("바위")&& player_Choice.equals("보"))
||(computer_Choice.equals("보")&&player_Choice.equals("가위"))){
gameResults.add(result[0]);
removeOldest();
return result[0];
}
else{
gameResults.add(result[1]);
removeOldest();
return result[1];
}
}
public void printResult(){
System.out.println("최근 5경기 기록입니다.");
for(String s : gameResults){
System.out.print(s+" ");
}
}
private void removeOldest(){
if(!gameResults.isEmpty() && gameResults.size()>5){
gameResults.remove(0);
}
}
}
getter와 setter를 만들어서 어디다가 쓸 수 있을까?
-> 배웠듯이 getter와 setter를 통해서 private으로 선언된 메서드나 클래스에 접근할 수 있음.
-> 명시적으로 구현은 가능하지만 사용해야 할 이유는 잘 모르겠다.
public ArrayList<String> getGameResults(){
return gameResults;
}
public void setGameResults(ArrayList<String> gameResults){
this.gameResults = gameResults;
}
removeOldest 메서드가 너무 중복되어 사용되는 느낌이다
->
public String play(String player_Choice){
String computer_Choice = opp_list[random.nextInt(3)];
System.out.println("컴퓨터가 "+computer_Choice+"을(를) 냈습니다");
String gameresult; //gameresult라는 문자열 변수를 선언
if(computer_Choice.equals(player_Choice)){
gameresult = result[2];
}
else if((computer_Choice.equals("가위")&&player_Choice.equals("바위"))
||(computer_Choice.equals("바위")&& player_Choice.equals("보"))
||(computer_Choice.equals("보")&&player_Choice.equals("가위"))){
gameresult = result[0];
}
else{
gameresult = result[1];
}
//각 조건문 마다 문자열을 저장해주고 마지막에 한 번에 처리
gameResults.add(gameresult);
removeOldest();
return gameresult;
}
RSP.java
package Java_preCourse.Day6.Lv3;
public class RSP {
public enum rsp{
가위,바위,보
}
}
result.java
package Java_preCourse.Day6.Lv3;
public class result {
public enum WLD{
승,패,무
}
}
allinfo.java
package Java_preCourse.Day6.Lv3;
public class allInfo {
String player_choice;
String cpu_choice;
String result;
int round;
public void setPlayer_choice(String player_choice) {
this.player_choice = player_choice;
}
public void setCpu_choice(String cpu_choice) {
this.cpu_choice = cpu_choice;
}
public void setResult(String result) {
this.result = result;
}
public void setRound(int round) {
this.round = round;
}
public String getPlayer_choice() {
return player_choice;
}
public String getCpu_choice() {
return cpu_choice;
}
public String getResult() {
return result;
}
public int getRound() {
return round;
}
public void printAll(){
System.out.println("사용자 선택 : "+this.player_choice);
System.out.println("컴퓨터 선택 : "+this.cpu_choice);
System.out.println("결과 : "+this.result);
System.out.println("판수 : "+this.round);
}
}
gameManager.java
package Java_preCourse.Day6.Lv3;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class GameManager {
Random random = new Random();
Scanner sc = new Scanner(System.in);
result.WLD[] WLD = result.WLD.values();
RSP.rsp[] rsp = RSP.rsp.values();
private ArrayList<allInfo> gameRecords = new ArrayList<>();
int round = 1;
public void start(){
System.out.println("가위 바위 보 게임을 시작합니다");
System.out.println("가위/바위/보 중 하나만 입력해야하며");
System.out.println("프로그램을 종료하고싶으면 exit를 입력하시오");
}
public String choice(){
System.out.print("가위 바위 보 중에 입력하시오:");
String my_choice = sc.next();
return my_choice;
}
public boolean check(String my_choice){
if(!my_choice.equals("가위")
&& !my_choice.equals("바위")
&& !my_choice.equals("보")){
System.out.println("가위 바위 보 중에 입력해주세요");
return false;
}
return true;
}
public String play(String player_Choice){
allInfo information = new allInfo();
String computer_Choice =
String.valueOf(rsp[random.nextInt(3)]);
System.out.println("컴퓨터가 " + computer_Choice + "을(를) 냈습니다");
String gameresult;
if(computer_Choice.equals(player_Choice)){
gameresult = String.valueOf(WLD[2]);
} else if((computer_Choice.equals("가위") && player_Choice.equals("바위"))
|| (computer_Choice.equals("바위") && player_Choice.equals("보"))
|| (computer_Choice.equals("보") && player_Choice.equals("가위"))){
gameresult = String.valueOf(WLD[0]);
} else {
gameresult = String.valueOf(WLD[1]);
}
information.setCpu_choice(computer_Choice);
information.setResult(gameresult);
information.setPlayer_choice(player_Choice);
information.setRound(round++);
gameRecords.add(information);
information.printAll();
return gameresult;
}
public void printWinResult(){
gameRecords.stream().filter(info -> info.getResult().equals("승")).forEach(info -> info.printAll());
}
}
Main.java
package Java_preCourse.Day6.Lv3;
public class Main {
public static void main(String[] args) {
GameManager gm = new GameManager();
gm.start();
while (true) {
String choice = gm.choice();
if(choice.equals("exit")){
System.out.println("프로그램을 종료합니다");
break;
}
if (!gm.check(choice)) {
continue;
}
gm.play(choice);
}
gm.printWinResult();
}
}