JAVA 게임만들기 1 [sub]

sub class 구성

Posted by ETHAN KIM on December 05, 2021 · 7 mins read
Java

1. Monster Class 생성

부모 클래스 Monster를 생성한 후 상속, 자식 클래스인 Slime, Mushroom 생성

Monster.java
package monster_battle;

import javax.swing.JOptionPane;

class Monster {
	String name;
	int hp = 80;

	public Monster(String n) {
		name = n;
	}

	public void attack(Human h) {
		attack(h, 10);
	}

	public void attack(Human h, int damage) {
		if(hp > 0) {
	        h.hp = h.hp - damage;
	        if (h.hp < 1) {
	            JOptionPane.showMessageDialog(null, "Game Over");
	            System.exit(0);
	        }
	        if(damage < 30) {
	        	MonsterBattle.lbl2.setText(name + "의 공격. " + h.name + "의 체력은 " + h.hp + "이다\n");	
	        }else {
	        	MonsterBattle.lbl2.setText(name + "의 강한 공격. " + h.name + "의 체력은 " + h.hp + "이다\n");
	        }
		}
	}
}

 

class Slime extends Monster{
	//생성자
	Slime(String n){
		super(n);
	}

	//약한 공격
	@Override
	public void attack(Human h) {
		attack(h, 8);
	}

	//치료
	void heal(Monster s) {
		if(hp > 0 && s.hp > 0) {
			s.hp += 10;
			if(s.hp > 80) {
				s.hp = 80;
			}
			MonsterBattle.lbl2.setText(name + "은 " + s.name + "을 치료. 남은 체력은" + s.hp + "." );
		}
	}
}

class Mushroom extends Monster{
	Mushroom(String n){
		super(n);
	}
	//강한 공격
	@Override
	public void attack(Human h) {
		attack(h, 15);
	}
	public void power_attack(Human h) {
		attack(h, 30);
	}
}


2. Human Class 생성

유저용 객체인 Human Class 생성

Human.java
package monster_battle;

import javax.swing.ImageIcon;

import java.util.Timer;
import java.util.TimerTask;

class Human {
	String name;
	int hp = 100;

	public void attack(Monster mon) {		
		mon.hp = mon.hp - 30;
        if (mon.hp < 1) {
    		//사망시 이미지
    		ImageIcon sImg_dead = new ImageIcon(MonsterBattle.class.getResource("/monster_battle/img/slime_dead.png"));
    		ImageIcon mImg_dead = new ImageIcon(MonsterBattle.class.getResource("/monster_battle/img/mushroom_dead.png"));        	

        	if(mon == MonsterBattle.s1) {
        		MonsterBattle.btn1.setEnabled(false);
        		MonsterBattle.imgLbl.setIcon(sImg_dead);
        	} else {
        		MonsterBattle.btn2.setEnabled(false);
        		MonsterBattle.imgLbl2.setIcon(mImg_dead);
        	}

        	MonsterBattle.lbl.setText(mon.name + "은 사망했다\n");
        	MonsterBattle.lbl2.setText("");
        }else {
    		//피격시 이미지
    		ImageIcon sImg_attacked = new ImageIcon(MonsterBattle.class.getResource("/monster_battle/img/slime_attacked.png"));
    		ImageIcon mImg_attacked = new ImageIcon(MonsterBattle.class.getResource("/monster_battle/img/mushroom_attacked.png"));

    		Timer timer1 = new Timer();
    		TimerTask task1;

    		if (mon == MonsterBattle.s1) {
    			MonsterBattle.imgLbl.setIcon(sImg_attacked);
    			task1 = new TimerTask() {
        			@Override
        			public void run() {
        				//일정시간 후에 수행
        				MonsterBattle.imgLbl.setIcon(MonsterBattle.bsImg);
        				timer1.cancel();
        			}
        		};
    		}else{
    			MonsterBattle.imgLbl2.setIcon(mImg_attacked);
    			task1 = new TimerTask() {
        			@Override
        			public void run() {
        				//일정시간 후에 수행
        				MonsterBattle.imgLbl2.setIcon(MonsterBattle.rsImg);
        				timer1.cancel();
        			}
        		};    			
    		}
    		timer1.schedule(task1, 500);        	
        	MonsterBattle.lbl.setText("현재 " + mon.name + "의 체력은 " + mon.hp + "이다\n");        	
        }
	}
}