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:
}
}
반응형