골키퍼 클래스
public class Goalkeeper{
private String Awayteam; // 원정팀 이름
private String Goalkeeper; // 골키퍼 이름
public Goalkeeper(String awayteam, String goalkeeper) {
super();
Awayteam = awayteam;
Goalkeeper = goalkeeper;
}
public String getAwayteam() {
return Awayteam;
}
public void setAwayteam(String awayteam) {
Awayteam = awayteam;
}
public String getGoalkeeper() {
return Goalkeeper;
}
public void setGoalkeeper(String goalkeeper) {
Goalkeeper = goalkeeper;
}
@Override
public String toString() {
return Awayteam + " [골키퍼 " + Goalkeeper + "]";
}
}
키커 클래스
public class Kicker {
private String Hometeam; // 홈팀 이름
private String order; // 순번
private String name; // 키커 이름
public Kicker(String hometeam, String order, String name) {
super();
Hometeam = hometeam;
this.order = order;
this.name = name;
}
public String getHometeam() {
return Hometeam;
}
public void setHometeam(String hometeam) {
Hometeam = hometeam;
}
public String getOrder() {
return order;
}
public void setOrder(String order) {
this.order = order;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return Hometeam + "["+order+ " " + name + "]";
}
}
메인 메서드를 가진 클래스
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class MainGame {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); // 스캐너 메소드
Goalkeeper gk = new Goalkeeper("Liverpool", "Alisson Becker"); // 원정팀 이름, 골키퍼 이름 할당
List<Kicker> homeKicker = new ArrayList<Kicker>(); // 홈팀 이름, 순번, 키커 이름 할당
homeKicker.add(new Kicker("Manchester United","1번 키커", "Marcus Rashford"));
homeKicker.add(new Kicker("Manchester United","2번 키커", "Bruno Fernands"));
homeKicker.add(new Kicker("Manchester United","3번 키커", "Casemiro"));
homeKicker.add(new Kicker("Manchester United","4번 키커", "Christian Eriksen"));
homeKicker.add(new Kicker("Manchester United","5번 키커", "Antony"));
int kWin = 0; // 키커 승리
int gWin = 0; // 골키퍼 승리
for(int i = 0; i< homeKicker.size(); i++) { // 명단에 포함된 선수들의 수 만큼 반복
int ddirection = (int)(Math.random()*3); // 골키퍼가 다이빙 뛸 방향을 1~3까지의 난수
String[] arr = { "좌측", "중앙", "우측" }; // 위의 난수를 배열을 통해 문자열로 설정
System.out.println(arr[ddirection]); // !!테스트를 위해서 넣었음. 추후에 삭제할 메소드!!
System.out.println(homeKicker.get(i)); // 홈팀의 첫번째 키커부터
System.out.println("슛팅할 방향 입력 : ");
String str1 = scanner.nextLine();
System.out.println(homeKicker.get(i)+ str1 +"으로 슛팅!");
try {
Thread.sleep(800); // 공이 날아가는 시간을 표현하기 위해 지연 메소드를 넣었다.
} catch (InterruptedException e) {
e.printStackTrace();
}
if(str1.equals(arr[ddirection])) {
System.out.println("골키퍼 " + arr[ddirection] +"으로 뜁니다!");
System.out.println(gk + "선방입니다!!");
gWin += 1;
}else {
System.out.println("골키퍼 " + arr[ddirection] +"으로 뜁니다!");
System.out.println(homeKicker.get(i) + "득점 성공합니다!");
kWin += 1;
}
System.out.println("------------------------------------");
}
if(kWin >= 4) {
System.out.println("맨체스터 유나이티드가 승리를 가져갑니다!!");
} else {
System.out.println("리버풀이 승리를 가져갑니다...");
}
System.out.println("---최종 스코어---");
System.out.println("득점 횟수 : " + kWin);
System.out.println("선방 횟수 : " + gWin);
}
}
좌측, 중앙, 우측이 아닌 다른 값을 입력했을 때 득점으로 인정되는 오류.
경기 결과를 출력할 때 팀 이름을 직접 입력해야 했는데,
ArrayList 첫 번째 값에 할당한 홈팀의 이름을 출력하는 방법 찾아보기
처음 구상했던 키커와 골키퍼의 대결만으로 진행되는 게임이 부족하게 느껴졌음.
키커와 골키퍼를 각각 포함한 홈팀과 어웨이 팀의 경기로 게임을 발전시켜보자.
골키퍼와 키커 클래스의 생성자에 this가 들어간 것과 안 들어간 것에 대한 차이를 공부하자...
게임의 코드를 짜는 과정에서, 처음 구상했던 기능들이 하나씩 구현되는 것을 보고 자신감이 많이 생겼다.
그러다보니 게임에 더 다양한 기능을 구현하고 싶은 욕심이 생긴다.
한편으론 지금 짠 코드들이 효율적으로 짜여진 코드일지에 대한 의문이 계속 생기기도 한다.
그래도 자신감을 잃지 않고 원하는 기능을 다 구현해낸 게임을 개발하여, 주위 사람들과 내 코드에 대해 피드백을 받으며 같이 공부해봐야겠다.