JAVA

게임 플레이하기-oop프로그래밍

태태코 2023. 2. 24. 22:12
반응형

이 게임을 설명하고자 하면. 

1. 게임이 시작된다.  🎲🎮

 

2.유닛의 정보를 입력한다.

 

3. 상대의 유닛 정보를 입력한다.

 

4.유닛의 레벨을 판별해 높은 유닛부터 공격한다 ---> 추가 요소

 

5.방어력과 공격력을 따져서 체력이 먼저 0아래로 내려가는 사람이 지는 것이다. 🔥

<실제 실행 코드> ---> 실행 배경이 되는 program이다.

package com.codestates.seb.lol_program;

public class LOL_Program {
    public static void main(String[] args) {
        //TODO:
        //시스템 시작 info
        System.out.println("[안내] TRPG 스타크래프트 시작합니다.");
        System.out.println("[안내] 자신의 유닛 정보를 입력해 주세요.");
        //나의 유닛 초기화
        LoL_char unit = new LoL_char();
        unit.characteristic = unit.user_create();
        unit.user_info(unit.characteristic[0], unit.characteristic[1],
                unit.characteristic[2], unit.characteristic[3],unit.characteristic[4]);
        unit.user_print(unit.characteristic);
        unit.char_int=unit.user_info_int(unit.characteristic);
        System.out.println();

        //몬스터(상대) 유닛 초기화
        LoL_char monster = new LoL_char();
        monster.characteristic = monster.user_create();
        monster.user_info(monster.characteristic[0], monster.characteristic[1],
                monster.characteristic[2], monster.characteristic[3],monster.characteristic[4]);
        monster.user_print(monster.characteristic);
        monster.char_int=monster.user_info_int(monster.characteristic);


        //각각 레벨이 높은 유닛이 먼저 공격
        if(monster.char_int[3]>unit.char_int[3]){
            monster.attack(monster.char_int, unit.char_int, unit.name);
        }else{
            unit.attack(unit.char_int, monster.char_int,monster.name);
        }

    }
}

<기능 설정>

구현 메서드 내용
user_info() 클래스 필드에 선언된 변수에 값을 할당해주는 기능
user_create() scanner 객체를 통해서 속성값을 입력받아서 배열로 만들어주는 기능
user_print() 객체의 정보를 출력해 주는 기능
user_info_int() String 문자열로 표현된 배열을 int형으로 변환해 주는 기능
attack 실제 방어력과 공격력 체력을 변수로 두고 서로 감소시키면서 나타내는 기능
 print_endgame() 끝날 시 나오는 문구를 나타낸 코드

 

 

<구현 코드>

package com.codestates.seb.lol_program;
import java.util.Scanner;

/**
 * @LoL_char() : 게임정보를 담는 클래스
 * @name : 유닛의 이름
 * @ad :   유닛의 공격력
 * @def :  유닛의 방어력
 * @hp :   유닛의 체력
 * */
class LoL_char {
  //TODO:
  // 사용자의 입력을 받기위한 객체 생성을 진행합니다.

  // 게임에 필요한 변수 타입을 사전 정의합니다.
  public String[] characteristic;
  public int[] char_int;
  public String name ;
  public String ad;
  public String def;
  public String hp;
  public String level;

  /**
   * @user_info : 생성된 유닛의 정보를 담는 메서드
   * @this : 해당 메서드가 입력받은 변수들은 this 를
   * */
  void user_info(String name, String ad, String def, String hp,String level) {
    this.name=name;
    this.ad=ad;
    this.def=def;
    this.hp=hp;
    this.level=level;
  }

  /**
   * @user_create() : 유닛을 생성하는 메서드이며, 입력된 값은 user_info() 메서드에게 전달 및 반환 처리합니다.
   * 반환된 값은 시스템 정보창에 출력되도록 합니다.
   * */
  String[] user_create() {
    String [] user= new String[5];
    System.out.printf("[시스템] 유닛 [이름] 을 입력해 주세요 :");
    Scanner sc = new Scanner(System.in);
    user[0]= sc.next();
    System.out.printf("[시스템] 유닛 [공격력] 을 입력해 주세요 : (Ex 50)");
    user[1]= sc.next();
    System.out.printf("[시스템] 유닛 [방어력] 을 입력해 주세요 : (Ex 1)");
    user[2]= sc.next();
    System.out.printf("[시스템] 유닛 [체력] 을 입력해 주세요 : (Ex 100)");
    user[3]= sc.next();
    System.out.printf("[시스템] 유닛 [level] 을 입력해 주세요 : (33)");
    user[4]= sc.next();
    //TODO:
    //입력 메시지와 함께, 게임에 필요한 유닛의 정보를 입력받습니다.

    // 입력된 값은 user_info()에 전달하여 줍니다.

    // 유저마다의 객체 생성을 위해 반환 과정 또한 정의하여 줍니다.
    return user;
  }

  /**
   * @user_print() : 입력된 배열을 통해 유닛 정보 출력
   * */
  void user_print(String[] user) {
    System.out.println("[안내] 생성된 유닛 정보는 다음과 같습니다.");
    System.out.printf("[안내] %s 유닛이 게임에 참여하였습니다.\n",this.name);
    //TODO:
    System.out.printf("[공격력] : %s\n",this.ad);
    System.out.printf("[방어력] : %s\n",this.def);
    System.out.printf("[체력] : %s\n",this.hp);
    System.out.printf("[체력] : %s\n",this.level);
    System.out.println("==".repeat(50));
  }

  /**
   * @user_info_int() : 공격력과 방어력 등을 고려해 체력 감소를 위해 문자열을 정수형태로 전환합니다.
   * Integer.parseInt() : 정수형태로 전환합니다.
   */
  int[] user_info_int(String[] info) {
    //TODO:
    // 같은 형식의 반환을 위해 배열 선언
    // 배열의 값을 하나씩 꺼내 정수형태로 전환합니다.
    return new int[]{Integer.parseInt(info[1]),Integer.parseInt(info[2]),Integer.parseInt(info[3])
    ,Integer.parseInt(info[4])};
  }
//반복되는 코드 로직에서 제거
  void print_endgame(){
    System.out.println("[안내] 나의 남은 [체력]은 0 입니다.");
    System.out.println("[안내] 더 이상 공격할 수 없습니다.");
    System.out.println();
    System.out.println("[안내] 게임에서 패배하셨습니다.");
  }
  /**
   * @attack() : 공격을 수행하는 메서드
   * 아군 유닛 정보와 상대의 정보를 입력받습니다.
   * */
  void attack(int[] me_info_int, int[] enemy,String name) {
    //상대와 나의 스텟을 저장하는 코드
    //공격력과 방어력은 바뀌지 않아 final로 지정
    final int enemyatt=enemy[0];
    final int myatt=me_info_int[0];
   final  int enemyDetc=enemy[1];
   final int myDetc=me_info_int[1];

   //변수들 선언
    int enemyHp =enemy[2];
    int myHp= me_info_int[2];


    //게임 코드
    while(true){
      System.out.printf("[안내] [%s]유닛이 [공격] 하였습니다.\n",this.name);
      enemyHp=enemyHp-myatt/enemyDetc;
      if(enemyHp<0){
        print_endgame();
        break;
      }
      System.out.printf("[안내] 상대 유닛의 남은 [체력]은 %d 입니다.\n",0);
      System.out.println("=".repeat(100));
      System.out.println();
      System.out.printf("[안내] [%s]유닛이 [공격] 하였습니다.\n",name);
      myHp=myHp-enemyatt/myDetc;
      System.out.println("");
      System.out.println("=".repeat(100));
      System.out.printf("[안내] %s의 남은 [체력]은 %d 입니다.\n",this.name,0);
      if(myHp<0){
        print_endgame();
        break;
      }
    }

    // 조건 1. 적군의 체력이 0 이하면 [유닛 제거] 가 됩니다.
    // 조건 2. 적군 체력이 0 이하가 아니라면 공격을 성공적으로 수행합니다.
    // 공격 정책 수식 : 적군 체력 -= 아군 유닛 공격력 / 적군 유닛 방어력


    //TODO:
  }
}
반응형