본문 바로가기

Projects/자바 슬라임 게임 만들기

죽은 슬라임이 또 공격하는 버그 잡기 및 죽은 슬라임을 확인사살하는 버그 발견!

반응형
// Slime.java

package study;

import javax.swing.JOptionPane;

public class Slime {

	String name;
	int hp = 80;

	// 생성자
	public Slime(String n) {
		
		name = n;
		}
	
	
	// 공격
	public void attack(Human h) {
		
		
		if (hp > 0) // hp가 있을 때만 공격할 수 있도록 해서 죽은 뒤에도 공격하는 버그를 잡음.
		System.out.println(name + "는 인간을 공격했습니다");
		h.hp = h.hp - 10;
		
		if (h.hp < 1) {
			
		JOptionPane.showMessageDialog(null, "Game Over");
		// 프로그램을 끝내는 함수
		System.exit(0);
		}
		
		System.out.println("현재 " + h.name + "의 체력은 " + h.hp + "이다\n");
		
	}
	}
	
}
// Study01.java

package study;

import javax.swing.JOptionPane;

public class Study01 {
	 
	    public static void main(String[] args) {
	 	
	    	// 빈 슬라임 변수를 만드는 것으로
	    	// 슬라임 변수를 후에 묶어주는 역할을 할 수 있다.
	    	Slime s = null;
	    	
	    	// 슬라임과 인간 객체 생성
	       	Slime s1 = new Slime("스라이무");
	       	Slime s2 = new Slime("스시무");
	       	Human h = new Human("손오공");
	       	
	       	System.out.println(s1.name + "와 " + s2.name + "이 나타났다! 당신의 이름은 " + h.name + "이다.\n" );
	       	
	       	/*
	       	 Byte.parseByte();

			Short.parseShort();

			Integer.parseInt();

			Long.parseLong();

			Float.parseFloat();

			Double.parseDouble();
	       	 */
	       	
	       	// parseint는 스트링타입의 숫자를 int타입으로 변환해주는 것이다.
	       	
	       	while(true) {
	       		
	       	// 인풋박스 : 입력메시지 창을 열고, sTarget이라고 명명한
	       	// 스트링 타입 변수로 저장한다.
	       	String sTarget = JOptionPane.showInputDialog("어느 슬라임을 공격하시겠습니까? 1은 " + s1.name + " 2는 " + s2.name);
			
	    	// 빈값이나 null값이 입력되면 종료한다.
	       	// 이렇게 사용자가 값을 넣지 않거나, 종료를 하더라도 프로그램은 오류메시지를 반환하지 않는다.
	       	if (sTarget == null || sTarget.equals("")) {
	       		System.exit(0);
	       	}
	       	
	       	int target = Integer.parseInt(sTarget);
	       	
	              	
	       	
			if (target == 1) {
				
				// 만약 사용자가 1을 선택하면 전체 슬라임을 대표하던 s = s1이 되도록 설정한 것으로
				// 반복되는 구문을 리팩토링하는 방법이다.
				s = s1;
				
			}
			
			else if (target == 2) {
				
				s = s2;
			
								
				}
						

			else {
				JOptionPane.showMessageDialog(null, "올바른 숫자를 입력하세요.");
			
			}
			
			// 슬라임이 이미 죽었을 경우 (s.hp < 1)
			// 더 이상 공격하지 못하도록 한다.
			if (s.hp < 1) {
				System.out.println(s.name + "는 이미 죽어있다.\n");
				}
			else {
			
			// 그러면 반복되던 아래 구분이 s라는 변수 하나로 통합된다.
			h.attack(s);
			s.attack(h);
			
			} 	// while 끝

	    }
}
}
반응형