본문 바로가기

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

빈값을 넣거나, 데이터를 입력하지 않고 종료했을 때 생기는 에러를 방지하자.

반응형
// Study01.java

package study;

import javax.swing.JOptionPane;

public class Study01 {
	 
	    public static void main(String[] args) {
	 	
	    	// 슬라임과 인간 객체 생성
	       	Slime s1 = new Slime("스라이무");
	       	Slime s2 = new Slime("스시무");
	       	Slime s3 = new Slime("스파르솔");
	       	Human h = new Human("손오공");
	       	
	       	System.out.println(s1.name + "와 " + s2.name + "와 " + s3.name + "이 나타났다! 당신의 이름은 " + h.name + "이다.\n" );
	       	
	       	/*
	       	 Byte.parseByte();

			Short.parseShort();

			Integer.parseInt();

			Long.parseLong();

			Float.parseFloat();

			Double.parseDouble();
	       	 */
	       	
	       	// parseint는 스트링타입의 숫자를 int타입으로 변환해주는 것이다.
	       	
	       	while(true) {
	       		
	       	// 인풋박스
	       	int target = Integer.parseInt(JOptionPane.showInputDialog("어느 슬라임을 공격하시겠습니까?"));
			
			if (target == 1) {
				
				// 인간의 공격
				h.attack(s1.name);
				s1.hp = s1.hp - 10;
				System.out.println("현재" + s1.name + "의 체력은 " + s1.hp + "이다\n");
				
				// 슬라임의 공격
				s1.attack();
				h.hp = h.hp - 10;
				
				// 인간의 사망
				if (h.hp < 1) {
					JOptionPane.showMessageDialog(null, "Game Over");
					break;
				}
				System.out.println("현재 " + h.name + "의 체력은 " + h.hp + "이다\n");
				
				
			}
			
			else if (target == 2) {
				h.attack(s2.name);
				s2.hp = s2.hp - 10;
				System.out.println("현재" + s2.name + "의 체력은 " + s2.hp + "이다\n");
				
				s2.attack();
				h.hp = h.hp - 10;
				
				if (h.hp < 1) {
					JOptionPane.showMessageDialog(null, "Game Over");
					break;
					}
				
				System.out.println("현재 " + h.name + "의 체력은 " + h.hp + "이다\n");
				
			}
			
			else if (target == 3) {
				h.attack(s3.name);
				s3.hp = s3.hp - 10;
				System.out.println("현재" + s3.name + "의 체력은 " + s3.hp + "이다\n");
				
				s1.attack();
				h.hp = h.hp - 10;
				
				if (h.hp < 1) {
					JOptionPane.showMessageDialog(null, "Game Over");
					break;
					}
				System.out.println("현재 " + h.name + "의 체력은 " + h.hp + "이다\n");
				
	       	    }

			else {
				System.out.println("올바른 숫자를 입력하세요.");
			}
			
			} 	// while 끝

	    }
}
		
// 이렇게 해서 소기의 목적을 달성하기는 했으나,
// 메인 함수가 너무 장황하고 비슷한 내용이 반복되어 있는 형태다.
// 실행결과는 똑같더라도 코드를 좀 더 효율적이고 알아보기 쉽게 개편하는 작업을 리팩토링이라고 한다.
// 리팩토링으로 개발하기도 편하고 나중에 수정하기도 좋고, 버그 발생률도 적어진다.
// 유지 보수가 쉬워진다.
// human.java 클래스로 이동해보자.
// Human.java

package study;

// public이 있어도 되고, 없어도 불러지기는 한다.
public class Human {

	String name;
	int hp = 100;
	
	public Human(String n) {
		name = n;
	}
	
	// 여기서 기존의 데이터타입을 Slime으로 변경할 수 있다.
	// 이처럼 함수의 인수로써 객체를 집어넣을 수 있는데, 이를 객체인수라고 한다.
	
	public void attack(Slime s) {
		System.out.println("인간은 " + s.name +"를 공격했습니다.");
	}
	


	
}
// Study01.java

package study;

import javax.swing.JOptionPane;

public class Study01 {
	 
	    public static void main(String[] args) {
	 	
	    	// 슬라임과 인간 객체 생성
	       	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) {
	       		
	       	// 인풋박스
	       	int target = Integer.parseInt(JOptionPane.showInputDialog("어느 슬라임을 공격하시겠습니까?"));
			
			if (target == 1) {
				
				// 인간의 공격
				// 아까는 슬라임 이름을 넣어주어야 했지만 이렇게 줄일 수 있게 됐다.
				h.attack(s1);
				
							
			}
			
			else if (target == 2) {
				h.attack(s2);
								
				}
						

			else {
				JOptionPane.showMessageDialog(null, "올바른 숫자를 입력하세요.");
			
			}
			
			} 	// while 끝

	    }
}
// Study01.java

package study;

import javax.swing.JOptionPane;

public class Study01 {
	 
	    public static void main(String[] args) {
	 	
	    	// 슬라임과 인간 객체 생성
	       	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) {
				
				// 인간의 공격
				// 어택 함수가 정의된 곳을 들어가보고 싶으면 ctrl 누르고 포인터를 갖다대면 바로 이동한다.
				h.attack(s1);
				
				// 슬라임의 반격
				s1.attack(h);
			}
			
			else if (target == 2) {
				
				h.attack(s2);
				s2.attack(h);
								
				}
						

			else {
				JOptionPane.showMessageDialog(null, "올바른 숫자를 입력하세요.");
			
			}
			
			} 	// while 끝

	    }
}

 

 

 

 

 

 

 

반응형