티스토리 뷰

기사와 악마가 있습니다.

이들은 누군가 한명이 죽을때까지 싸웁니다.

기사와 악마에게는 각각 name(이름) , Hp(체력) , power(공격력)의 속성이 존재합니다.

처음 시작할때의 체력은 1000과 공격력 100으로 고정됩니다.

기사부터 시작하여 공격턴을 주고 받는데 공격턴 진행시에 버프 3개중에 하나를 랜덤으로 부여받게됩니다.

 

<버프의 효과 3가지>

첫번째 : 공격력 50 ~ 100 높여주기

두번째 : 체력 100 ~ 200 회복시켜주기

세번째 : 체력 100 ~ 300 줄게 만들기

 

과정을 설명하면 

(무한반복)

기사 랜덤 버프 받기 -> 악마 공격

 

악마 랜덤 버프 받기 -> 기사 공격

(누군가 피가 0아래로 떨어지면은 그대로 break하여 게임 종료)

이긴 사람 출력

 

필요한 클래스

1. 유닛 클래스

2. 기사 클래스 (유닛상속받기)

3. 악마 클래스 (유닛상속받기)

4. 버프 클래스

5. 싸움장 클래스

 

 

정답공개 !

package hihihi;

import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;

//유닛 클래스
class Unit{
	private String name;
	private int Hp;
	private int Power;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getHp() {
		return Hp;
	}
	public void setHp(int hp) {
		Hp = hp;
	}
	public int getPower() {
		return Power;
	}
	public void setPower(int power) {
		Power = power;
	}

}


//기사 클래스
class Knight extends Unit{
	Knight(String name,int Hp,int Power){
		setName(name);
		setHp(Hp);
		setPower(Power);
	}
}

//악마 클래스
class Devil extends Unit{
	Devil(String name,int Hp,int Power){
		setName(name);
		setHp(Hp);
		setPower(Power);
	}
}

//버프 클래스
class Burf{
	Random r = new Random();
	public void start(Unit u) {
		int num = r.nextInt(3)+1; //1~3 랜덤 숫자
		if(num==1) {
			int a = r.nextInt(50)+50;
			System.out.println(u.getName()+" : "+ a + "만큼 공격력이 올라갑니다.");
			u.setPower(u.getPower() + a); //공격력 버프
			System.out.println(u.getName() + "의 공격력 : " + u.getPower());
			System.out.println();
		}else if(num==2) {
			int b = r.nextInt(100)+100;
			System.out.println(u.getName()+" : "+ b + "만큼 체력이 올라갑니다.");
			u.setHp(u.getHp() + b); //체력 버프
			System.out.println(u.getName() + "의 체력 : " + u.getHp());
			System.out.println();
		}else if(num==3) {
			int c = r.nextInt(100)+200;
			System.out.println(u.getName()+" : "+ c + "만큼 체력이 내려갑니다.");
			u.setHp(u.getHp() - c); //체력 너프
			System.out.println(u.getName() + "의 체력 : " + u.getHp());
			System.out.println();
		}
	}
}

//싸움장 클래스
class Battle{
	
	public void randomburf(Unit u) {
		Burf b = new Burf();
		b.start(u);
	}
	
	public void attack(Unit u1,Unit u2) {
		System.out.println(u1.getName() + "가 " + u2.getName() + "를 공격합니다 ! ");
		u2.setHp(u2.getHp() - u1.getPower());
		System.out.println(u2.getName() + " 남은 체력 : " + u2.getHp());
		System.out.println();
	}
}


public class protect {
	public static void main(String[] args) {

		Knight k = new Knight("기사",1000,100);
		Devil d = new Devil("악마",1000,100);
		Battle b = new Battle();
		int count = 0;
		
		//모든 여건이 갖춰졌다
		//전투 시작 !!
		while(true) {
			count ++;
			if(count % 2 == 1) { //기사 공격턴
				k.setPower(100); //공격 100으로 초기화
				b.randomburf(k); //기사에게 랜덤버프
				if(k.getHp()< 0) { //만약 기사가 디버프로 죽었을 경우
					break;
				}
				b.attack(k, d); //기사가 악마 공격
			}else if(count % 2 == 0) { //악마 공격턴
				d.setPower(100); //공격 100으로 초기화
				b.randomburf(d); //악마에게 랜덤버프
				if(d.getHp()< 0) { //만약 악마가 디버프로 죽었을 경우
					break;
				}
				b.attack(d, k); //악마가 기사 공격
			}
			if(k.getHp() < 0 || d.getHp() < 0) { //누군가 하나가 죽었을 경우
				break;
			}
		}
		
		//승리자 출력
		if(k.getHp() > d.getHp()) {
			System.out.println("기사 승리 ! ");
		}else {
			System.out.println("악마 승리 ! ");
		}
		
	}
}

전투시작을 할때 랜덤버프와 공격을 하기 이전에 공격력을 100으로 초기화하고 시작하는데 이것은 공격력 버프를 받았을 시에 그것이 누적되면 공격력이 135 201 261............ 처럼 점점 강해지기 때문에 이런 오류를 범하지 않기 위해서

본격적인 버프와 공격을 하기 이전에 공격력을 100으로 초기화 시켜주는 것이다.

 

감사합니다.

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함