728x90
용사는 슬라임을 잡기 위해 무기 교체 시스템을 개발하려고합니다 상속과 오버라이딩을 사용하여 주먹, 숏소드, 롱소드, 랜스 4가지 무기타입을 교체합니다 필드명 AttRange, ChangeTime 으로 무기 교체 시간과 공격 범위를 상속받고 메서드 attAction 으로 이벤트를 발생시키시오. 어려운문제 용사와 슬라임 3마리가 자동으로 싸우며 랜덤으로 무기를 교체하고 효율적으로 자동전투를 할수있는 시스템을 개발하시오 다만들었다면 포션의 개수와 공격력 수치 랜덤 출력하는 게임 시스템을 추가하여 용사 1턴마다 효율적인 공격 방식을 재구성하는 알고리즘을 만드시오 용사 입장에서 슬라임수를 확인한다 용사 입장에서 가지고있는 무기타입의 공격범위와 공격력을 확인한다 용사 입장에서 가지고 있는 무기 타입을 교체하는 시간까지 고려하여 연산한다 효율적인 방식을 선택하여 진행한다
package overriding;
public class WeaponBasic000 {
//자식클래스에 공유
//이 변수명에는 얘네만 쓸거다 static
//상수 주먹을 만들어 아래 name에 대입한다.
public static final String defaultname = "주먹";
public static final int defaulAttRange = 1;
public static final int defaultChageTime = 1;
public String name = "주먹";
public int AttRange = 1;
public int ChangeTime = 1;
public void destructionBefore(String input_name, int input_attrange, int input_chagetime){
this.name = input_name;
this.AttRange = input_attrange;
this.ChangeTime = input_chagetime;
}
public void attAction() {
System.out.println("무기 "+this.name+"을 장착하였습니다.");
}
public void destruction() {
System.out.println("무기 "+this.name+"이 파괴되었습니다." );
}
}
package overriding;
public class WeaponLance001 extends WeaponMethod {
public WeaponLance001(){
//부모와 자식 this.name은 같아진다
this.name = "랜스";
this.AttRange = 15;
this.ChangeTime = 4;
}
}
package overriding;
public class WeaponLong001 extends WeaponMethod {
public WeaponLong001(){
//부모와 자식 this.name은 같아진다
this.name = "롱소드";
this.AttRange = 10;
this.ChangeTime = 3;
}
}
package overriding;
public class WeaponShot001 extends WeaponMethod {
public WeaponShot001(){
//부모와 자식 this.name은 같아진다
this.name = "숏소드";
this.AttRange = 5;
this.ChangeTime = 2;
}
}
package overriding;
public class WeaponMethod extends WeaponBasic000 {
@Override
public void attAction() {
System.out.println("무기 "+this.name+"을 장착하였습니다");
System.out.println("무기의 공격범위는 "+this.AttRange+"입니다");
System.out.println("무기의 교체 시간은"+this.ChangeTime+"입니다");
}
@Override
public void destruction(){
super.destructionBefore(super.defaultname ,super.defaulAttRange ,super.defaultChageTime);
attAction();
}
}
package Slime;
public class NormalSlime {
//필드값
public int hp;
public int mp;
public int exp;
public String name;
public String color;
public void initSlime() {
System.out.println(this.name+"슬라임이 태어났습니다");
}
public String getName() {
return this.name;
}
public int att() {
return 10;
}
}
package Slime;
public class RedSlime extends NormalSlime {
public RedSlime(int input_hp,int input_mp, String input_name, String input_color){
this.hp = input_hp;
this.mp = input_mp;
this.name = input_name;
this.color = input_color;
}
public void getColor() {
System.out.println("이슬라임의 색상은"+this.color+"입니다");
System.out.println("이슬라임의 이름은"+this.name+"입니다");
System.out.println("이슬라임의 HP는"+this.hp+"입니다");
System.out.println("이슬라임의 MP는"+this.mp+"입니다");
}
@Override
public int att(){
return criticalAtt();
}
public int criticalAtt() {
return hp/2;
}
}
import Slime.*;
import overriding.*;
public class main {
public static void main(String[] arg){
CreateSlime();
Weapon();
}
public static void CreateSlime() {
String[] arrSlimeName = new String[4];
arrSlimeName[0] = "검은색";
arrSlimeName[1] = "붉은색";
arrSlimeName[2] = "푸른색";
arrSlimeName[3] = "초록색";
int num = (int)(Math.random()*arrSlimeName.length);
int input_hp = (int)(Math.random()*100);
int input_mp = (int)(Math.random()*30);
RedSlime red_1_slime = new RedSlime(input_hp, input_mp, arrSlimeName[num], arrSlimeName[num]);
input_hp = (int)(Math.random()*100);
input_mp = (int)(Math.random()*30);
RedSlime red_2_slime = new RedSlime(input_hp, input_mp, arrSlimeName[num], arrSlimeName[num]);
System.out.println("============================");
red_1_slime.getColor();
System.out.println(red_1_slime.getName()+"의 공격력은"+red_1_slime.att());
red_1_slime.att();
System.out.println("============================");
red_2_slime.getColor();
System.out.println(red_2_slime.getName()+"의 공격력은"+red_2_slime.att());
}
public static void Weapon(){
WeaponLance001 lance = new WeaponLance001();
WeaponLong001 longw = new WeaponLong001();
WeaponShot001 shotw = new WeaponShot001();
System.out.println("============================");
lance.attAction();
System.out.println("-------***랜스 해제***-------");
lance.destruction();
System.out.println("============================");
longw.attAction();
System.out.println("-------***롱소드 해제***-------");
longw.destruction();
System.out.println("============================");
shotw.attAction();
System.out.println("-------***숏소드 해제***-------");
shotw.destruction();
System.out.println("============================");
}
}
728x90
'STUDY > JAVA' 카테고리의 다른 글
[JAVA] 22-06-28 상속을 이용해 샌드위치 만들기 문제 ☑ (0) | 2022.06.28 |
---|---|
[JAVA] 22-06-28 final / protected 접근제한자 ☑ (0) | 2022.06.28 |
[JAVA] 22-06-27 메소드 재정의 (Override) ☑ (0) | 2022.06.27 |
[JAVA] 22-06-24 상속(Inheritance) ☑ (0) | 2022.06.24 |
[JAVA] 22-06-23 어노테이션(Annotation) ☑ (0) | 2022.06.23 |