diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 14746e7..2a65317 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -1,5 +1,6 @@ + \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..2b63946 --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/documentation.md b/documentation.md new file mode 100644 index 0000000..a252d58 --- /dev/null +++ b/documentation.md @@ -0,0 +1,101 @@ +soccer game middle + +Player { +name ( VO ) +final static Integer chance +} + +Attacker Extends Player { +Integer goals + +shoot ( ) +} + +Striker extends Attacker { +chance = 2 +} + +Midfielder extends Attacker { +chance = 1 + +shoot ( ) +} + +GoalKeeper extends Player { +chance = 3 + +saves ( 3 ~ 7 ) +} + +SoccerGame { +winner +List attackers; +GoalKeeper goalkeeper; +final matchpoint = 0; +final Winner winner; + + init(){ + settingPlayer() + } + + setMatchPoint() { + matchpoint = set + } + + start(){ + while(matchpoint != 0) { + shooting() + checkMatch() + printshooting() + + } + } + + + printshooting(){ + + } + + shootings () { + forEach Attackers { + checkGoals() + checkMatchPoints() + } + } + + checkMatchPoints() { + if matchpoint == goals { + winner = name + } + } + + checkGoals(Attackers) { + shoot = [ ] + for attackers.shoot + goalkeepr.keep + + if shoot != keep { + attackers.goal() + } + } + + setMatchPoint( matchpoint ){ this.matchpoint = matchpoint } + + setting { + setStriker() + setMidfielder() + setGoalkeeper() + } + + set … { + input(“입력”) + new + + attackers add + } + + setGoalkeeper { + goalkeeper = new GoalKeeper(“오예스”); + } + +} diff --git a/src/main/java/SoccerGameApplication.java b/src/main/java/SoccerGameApplication.java index 6185014..097f15a 100644 --- a/src/main/java/SoccerGameApplication.java +++ b/src/main/java/SoccerGameApplication.java @@ -1,5 +1,8 @@ +import game.SoccerGameController; + public class SoccerGameApplication { public static void main(String[] args) { - + SoccerGameController soccerGameController = new SoccerGameController(); + soccerGameController.start(); } } diff --git a/src/main/java/entity/Attacker.java b/src/main/java/entity/Attacker.java new file mode 100644 index 0000000..0773fbc --- /dev/null +++ b/src/main/java/entity/Attacker.java @@ -0,0 +1,23 @@ +package entity; + +import vo.Name; +import vo.Winner; + +public abstract class Attacker extends Player { + private Integer goals = 0; + public Attacker(String name, Integer chance) { + super(name, chance); + } + + public Integer shoot(){ + return (int)(Math.random()*10); + } + + public Integer getGoals() { + return goals; + } + + public void addGoals() { + goals += 1; + } +} diff --git a/src/main/java/entity/GoalKeeper.java b/src/main/java/entity/GoalKeeper.java new file mode 100644 index 0000000..c4c14f7 --- /dev/null +++ b/src/main/java/entity/GoalKeeper.java @@ -0,0 +1,13 @@ +package entity; + +import vo.Name; + +public class GoalKeeper extends Player{ + public GoalKeeper(String name) { + super(name, 3); + } + + public Integer saves() { + return (int)(Math.random()*10); + } +} diff --git a/src/main/java/entity/Midfielder.java b/src/main/java/entity/Midfielder.java new file mode 100644 index 0000000..ee804ff --- /dev/null +++ b/src/main/java/entity/Midfielder.java @@ -0,0 +1,10 @@ +package entity; + +import vo.Name; + +public class Midfielder extends Attacker{ + + public Midfielder(String name) { + super(name, 1); + } +} diff --git a/src/main/java/entity/Player.java b/src/main/java/entity/Player.java new file mode 100644 index 0000000..47e7610 --- /dev/null +++ b/src/main/java/entity/Player.java @@ -0,0 +1,22 @@ +package entity; + +import vo.Name; +import vo.Winner; + +public class Player { + private Name name; + private Integer chance = 0; + + public Player(String name, Integer chance) { + this.name = new Name(name); + this.chance = chance; + } + + public Name getName() { + return name; + } + + public Integer getChance() { + return chance; + } +} diff --git a/src/main/java/entity/Striker.java b/src/main/java/entity/Striker.java new file mode 100644 index 0000000..a8c31e6 --- /dev/null +++ b/src/main/java/entity/Striker.java @@ -0,0 +1,9 @@ +package entity; + +import vo.Name; + +public class Striker extends Attacker { + public Striker(String name) { + super(name, 2); + } +} diff --git a/src/main/java/game/SoccerGameController.java b/src/main/java/game/SoccerGameController.java new file mode 100644 index 0000000..bc62029 --- /dev/null +++ b/src/main/java/game/SoccerGameController.java @@ -0,0 +1,45 @@ +package game; + +import entity.Attacker; +import entity.GoalKeeper; +import vo.Name; +import vo.Winner; + +import java.util.ArrayList; +import java.util.List; + +public class SoccerGameController { + private Winner winner; + private Integer currentpoint = 0; + private SoccerGameManager soccerGameManager = new SoccerGameManager(); + private SoccerGameLogger soccerGameLogger = new SoccerGameLogger(); + private SoccerGameScoreManager soccerGameScoreManager = new SoccerGameScoreManager(); + private void shooting() { + for(Attacker attacker : soccerGameManager.getAttackers()){ + soccerGameScoreManager.tryGoal(attacker, soccerGameManager.getGoalKeeper()); + updateCurrentPoints(attacker); + } + } + + private void updateCurrentPoints(Attacker attacker){ + if(currentpoint < attacker.getGoals()){ + currentpoint = attacker.getGoals(); + setWinner(attacker.getName()); + } + } + + private void setWinner(Name name) { + this.winner = new Winner(name.getName()); + } + + public void start() { + soccerGameManager.init(); + + Integer cnt = 1; + while(soccerGameManager.getMatchpoint() > currentpoint){ + shooting(); + soccerGameLogger.printShooting(soccerGameManager.getAttackers(), cnt++); + } + soccerGameLogger.printWinner(winner); + } +} diff --git a/src/main/java/game/SoccerGameLogger.java b/src/main/java/game/SoccerGameLogger.java new file mode 100644 index 0000000..1f6388c --- /dev/null +++ b/src/main/java/game/SoccerGameLogger.java @@ -0,0 +1,27 @@ +package game; + +import entity.Attacker; +import vo.Winner; + +import java.util.List; + +public class SoccerGameLogger { + public void printShooting(List attackers, Integer cnt){ + System.out.println("\n" + cnt + "번째 슈팅결과"); + for(Attacker attacker : attackers){ + printAttackerGoals(attacker); + } + } + + public void printAttackerGoals(Attacker attacker){ + System.out.print(attacker.getName().getName() + ": "); + for(int i = 0; i < attacker.getGoals(); i++){ + System.out.print("-"); + } + System.out.println(); + } + + public void printWinner(Winner winner){ + winner.printWinner(); + } +} diff --git a/src/main/java/game/SoccerGameManager.java b/src/main/java/game/SoccerGameManager.java new file mode 100644 index 0000000..e833369 --- /dev/null +++ b/src/main/java/game/SoccerGameManager.java @@ -0,0 +1,74 @@ +package game; + +import entity.Attacker; +import entity.GoalKeeper; +import entity.Midfielder; +import entity.Striker; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Scanner; +import java.util.stream.Collectors; + +public class SoccerGameManager { + Scanner sc = new Scanner(System.in); + private List attackers = new ArrayList<>(); + private GoalKeeper goalKeeper; + private Integer matchpoint = 0; + private void setStrikers() { + System.out.print("공격수의 이름을 입력하세요: "); + List strikers = Arrays.stream(sc.nextLine().split(", ")) + .collect(Collectors.toCollection(ArrayList::new)); + + for(String player : strikers){ + attackers.add(new Striker(player)); + } + } + + private void setMidfielders() { + System.out.print("미드필더의 이름을 입력하세요: "); + List midfielders = Arrays.stream(sc.nextLine().split(", ")) + .collect(Collectors.toCollection(ArrayList::new)); + + for(String player : midfielders){ + Midfielder midfielder = new Midfielder(player); + attackers.add(midfielder); + } + } + + private void setGoalKeepers() { + System.out.print("골키퍼의 이름을 입력하세요: "); + String player = sc.next(); + + goalKeeper = new GoalKeeper(player); + } + + private void settingPlayers() { + setStrikers(); + setMidfielders(); + setGoalKeepers(); + } + + private void settingMatchPoint() { + System.out.print("매치포인트를 입력하세요: "); + matchpoint = sc.nextInt(); + } + + public void init(){ + settingPlayers(); + settingMatchPoint(); + } + + public List getAttackers() { + return attackers; + } + + public GoalKeeper getGoalKeeper() { + return goalKeeper; + } + + public Integer getMatchpoint() { + return matchpoint; + } +} diff --git a/src/main/java/game/SoccerGameScoreManager.java b/src/main/java/game/SoccerGameScoreManager.java new file mode 100644 index 0000000..03c9e27 --- /dev/null +++ b/src/main/java/game/SoccerGameScoreManager.java @@ -0,0 +1,56 @@ +package game; + +import entity.Attacker; +import entity.GoalKeeper; + +import java.util.ArrayList; +import java.util.List; + +public class SoccerGameScoreManager { + + private boolean checkGoal(Attacker attacker, List keeps, List shoots){ + Integer chance = 0; + for(Integer shoot : shoots){ + chance += isKeepShoot(keeps, shoot); + } + + if(chance == shoots.size()){ + return true; + } + return false; + } + + private Integer isKeepShoot(List keeps, Integer shoot){ + if(!keeps.contains(shoot)){ + return 1; + } + return 0; + } + + private List tryShoot(Attacker attacker){ + List shoots = new ArrayList<>(); + for(int i = 0; i < attacker.getChance(); i++){ + Integer shoot = (int)(Math.random()*10); + shoots.add(shoot); + } + return shoots; + } + + private List tryKeep(GoalKeeper goalKeeper){ + List keeps = new ArrayList<>(); + for(int i = 0; i < goalKeeper.getChance(); i++){ + Integer keep = (int)((Math.random()*4)+3); + keeps.add(keep); + } + return keeps; + } + + public void tryGoal(Attacker attacker, GoalKeeper goalkeeper){ + List shoots = tryShoot(attacker); + List keeps = tryKeep(goalkeeper); + + if(checkGoal(attacker, keeps, shoots)){ + attacker.addGoals(); + } + } +} diff --git a/src/main/java/vo/Name.java b/src/main/java/vo/Name.java new file mode 100644 index 0000000..bf3da5f --- /dev/null +++ b/src/main/java/vo/Name.java @@ -0,0 +1,13 @@ +package vo; + +public class Name { + private final String name; + + public Name(String name) { + this.name = name; + } + + public String getName() { + return name; + } +} diff --git a/src/main/java/vo/Winner.java b/src/main/java/vo/Winner.java new file mode 100644 index 0000000..45075b8 --- /dev/null +++ b/src/main/java/vo/Winner.java @@ -0,0 +1,17 @@ +package vo; + +public class Winner { + private final String winner; + + public Winner(String winner) { + this.winner = winner; + } + + public String getWinner() { + return winner; + } + + public void printWinner() { + System.out.println("승리자는 " + winner + "입니다."); + } +}