본문 바로가기

반응형

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

(28)
죽은 슬라임이 또 공격하는 버그 잡기 및 죽은 슬라임을 확인사살하는 버그 발견! // 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.ex..
슬라임이 사망하도록 하자. 그런데 죽은 슬라임이 공격하네? // Human.java package study; // public이 있어도 되고, 없어도 불러지기는 한다. public class Human { String name; int hp = 100; public Human(String n) { name = n; } public void attack(Slime s) { System.out.println("인간은 " + s.name +"를 공격했습니다."); s.hp = s.hp - 10; // 당연히 슬라임이 죽는 코드를 짜는 것이기 때문에 // 위의 데이미를 입히는 것 다음에 아래 코드가 나와야 한다. // 하지만 이렇게만 끝나면, 사망한 슬라임이 죽은 뒤에도 // 주인공을 공격하는 버그가 생긴다. // 여전히 메인함수의 s.attack(h); 가 실행되기..
빈값을 넣거나, 데이터를 입력하지 않고 종료했을 때 생기는 에러를 방지하자. // 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.parseS..
인풋박스에 데이터를 넣지 않고 종료했을 때 오류가 나는 이유 : null값과 빈값 // 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(); F..
객체인수를 활용한 메인함수 리팩토링 // 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 +"를 공격했습니다."); s.hp = s.hp - 10; System.out.println("현재 " + s.name + "의 체력은 " + s.hp + "이다\n"); } } // S..
while문 사용해서 계속 hp 깎이게 하고 게임종료까지 하는 법 // 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.p..
인피닛 루프에 걸리지 않게 hp 깎기 (if, break) // Study02.java package study; import javax.swing.JOptionPane; public class Study02 { public static void main(String[] args) { // hp를 100으로 설정한다. int hp = 100; // 참이지 않은 경우가 없으니 인피닛루프에 걸린다. while (true) { // hp를 출력하라. JOptionPane.showMessageDialog(null, hp); // hp 출력했으면, 기존 hp에서 20을 깎아라. hp = hp - 20; } } } // Study02.java package study; import javax.swing.JOptionPane; public class Study02 { pub..
hp가 0까지 달도록 하고 게임오버 시키기 // Study02.java package study; public class Study02 { public static void main(String[] args) { // hp를 100으로 설정한다. int hp = 100; // hp가 0보다 크다면, while (hp > 0) { // hp를 출력하라. System.out.println(hp); // hp 출력했으면, 기존 hp에서 20을 깎아라. hp = hp - 20; } System.out.println("Game Over"); } }

반응형