저번 주 과제 : 에어컨 만들기
class SemAirCon{
boolean power;
int temperature = 24;
int windPower = 2;
void power(){
// if(power == true){
// power = false;
// }else if(power == false){
// power = true;
// }
power = !power;
System.out.println(power ? "에어컨이 켜졌습니다." : "에어컨이 꺼졌습니다.");
}
void temperatureUp(){
if(power){
if(temperature < 30){
temperature++;
}
System.out.println("현재 온도는 " + temperature + "도 입니다.");
}
}
void temperatureDown(){
if(power){
if(temperature > 18){
temperature--;
}
System.out.println("현재 온도는 " + temperature + "도 입니다.");
}
}
void changeWindPower(){//바람세기 3단계, 3이 넘어가면 다시 1로 만들기
if(power){
if(++windPower >3){
windPower = 1;
}
System.out.println("현재 바람세기는 " + windPower + "단 입니다.");
}
}
public static void main(String[] args) {//main메서드는 main치고 Ctrl + Space
SemAirCon ac = new SemAirCon();
while(true){
System.out.println("1.전원\t2.온도+\t3.온도-\t4.바람세기\t0.종료");
int input = ScanUtil.nextInt();
switch(input){
case 1: ac.power(); break;
case 2: ac.temperatureUp(); break;
case 3: ac.temperatureDown(); break;
case 4: ac.changeWindPower(); break;
case 0:
System.out.println("프로그램을 종료합니다.");
System.exit(0); // 프로그램을 강제로 종료하는 메서드
}
}
}
RPG 게임 만들기
캐릭터 클래스 생성
public class Character {
String name; //이름
int maxHp; //최대체력
int maxMp; //최대마나
int hp; //체력
int mp; //마나
int att; //공격력
int def; //방어력
int level; //레벨
int exp; //경험치
Item[] items; //보유아이템
//생성자를 만들어서 변수들을 초기화 - 외부에서 값을 받아와야 해서 파라미터를 만듦
Character(String name, int hp, int mp, int att, int def){
this.name = name;
this.maxHp = hp;
this.maxMp = mp;
this.hp = this.maxHp;
this.mp = this.maxMp;
this.att = att;
this.def = def;
this.level = 1;
this.exp = 0;
this.items = new Item[10]; //10칸짜리 배열 생성
}
//상태창
void showInfo(){
System.out.println("================================");
System.out.println("-------------- 상태 --------------");
System.out.println("이름 : " + name);
System.out.println("레벨 : " + level + "(" + exp + "/100)");
System.out.println("체력 : " + hp + "/" + maxHp);
System.out.println("마나 : " + mp + "/" + maxMp);
System.out.println("공격 : " + att);
System.out.println("방어 : " + def);
System.out.println("-------------- 아이템 -------------");
for(int i = 0; i <items.length;i++){
if(items[i] != null){
System.out.println(items[i]);
}
}
System.out.println("==================================");
}
//몬스터를 공격하는 메서드
void attack(Monster m){//캐릭터의 공격력-몬스터의 방어력
int damage = 0;
if(att > m.def){
damage = att - m.def;
}else if(att == m.def){
damage = 1;
}
m.hp -= damage;
System.out.println(damage);
//선생님 코드
/*int damage = att - m.def;
* damage = damage <= 0 ? 1 : damage;
* m.hp = m.hp < damage ? m.hp - m.hp : m.hp - damage;
* System.out.println(name + "가 공격으로 " + m.name + "에게"
+ damage + "만큼 데미지를 주었습니다.");
* System.out.pringln(m.name + "의 현재 HP : " + m.hp);
*/
}
//경험치를 얻는 메서드
void getExp(int exp){
System.out.println(exp + "의 경험치를 획득하였습니다.");
this.exp += exp;
while(100 <= this.exp){
levelUp();
this.exp -= 100;
}
}
//레벨업 메서드
void levelUp(){
level++;
maxHp += 10;
maxMp += 5;
att += 2;
def += 2;
hp = maxHp;
mp = maxMp;
System.out.println("LEVEL UP!!");
// int value = 0;
// level = exp >= 100 + value ? level++ : level;
// value += 5;
}
//아이템을 얻는 메서드
void getItem(Item item){
System.out.println(item.name + "을 획득하였습니다.");
for(int i = 0; i < items.length; i++){
if(items[i] == null){
items[i] = item;
break;
}
}
maxHp += item.hp;
maxMp += item.mp;
att += item.att;
def += item.def;
}
}
몬스터 클래스
public class Monster {
String name; //이름
int maxHp; //최대체력
int maxMp; //최대마나
int hp; //체력
int mp; //마나
int att; //공격력
int def; //방어력
Item[] items; //보유아이템
Monster(String name, int hp, int mp, int att, int def, Item[] items){
this.name = name;
this.maxHp = hp;
this.maxMp = mp;
this.hp = this.maxHp;
this.mp = this.maxMp;
this.att = att;
this.def = def;
this.items = items;
}
void attack(Character c){
int damage = att - c.def;
damage = damage <= 0 ? 1 : damage;
c.hp = c.hp < damage ? c.hp - c.hp : c.hp - damage;
System.out.println(name + "가 공격으로 " + c.name + "에게"
+ damage + "만큼 데미지를 주었습니다.");
System.out.println(c.name + "의 현재 HP : " + c.hp);
}
//아이템을 드랍하는 메서드
Item itemDrop(){
return items[(int)(Math.random() * items.length)];
}
}
아이템 클래스
public class Item {
String name; //이름
int hp; //체력
int mp; //마나
int att; //공격력
int def; //방어력
Item(String name, int hp, int mp, int att, int def){
this.name = name;
this.hp = hp;
this.mp = mp;
this.att = att;
this.def = def;
}
public String toString(){
String info = name + " :";
if(0 < hp) info += " 체력+" + hp;
if(0 < mp) info += " 마나+" + mp;
if(0 < att) info += " 공격+" + att;
if(0 < def) info += " 방어+" + def;
return info;
}
}
실행할 클래스
public class MyGame {
//게임에 등장하는 것들(캐릭터 등)
Character c;
Item[] items;
MyGame(){
c = new Character("가렌", 100, 50, 20, 10);
items = new Item[10];
items[0] = new Item("무한의 대검", 0, 0, 10, 0);
items[1] = new Item("가시갑옷", 0, 0, 0, 10);
}
public static void main(String[] args) {
new MyGame().start();
//따로 start 메서드를 만든 이유 : 인스턴스 변수를 main메서드 안에서 사용 불가
}
void start(){
int input = 0;
while(true){
System.out.println("1.내정보\t2.사냥\t0.종료");
input = ScanUtil.nextInt();
switch (input){
case 1:
c.showInfo();
break;
case 2:
hunt();
break;
case 0:
System.out.println("종료되었습니다.");
System.exit(0);
break;
}
}
}
void hunt(){
Monster m = new Monster("고블린", 20, 10, 15, 10, new Item[]{items[0],items[1]});
System.out.println(m.name + "을 만났습니다. 전투를 시작합니다.");
int input = 0;
battle : while(true){
System.out.println("1.공격\t2.도망");
input = ScanUtil.nextInt();
switch (input){
case 1://공격 - 캐릭터 먼저 공격, 몬스터 다음에 공격
c.attack(m);
if(m.hp <= 0){
System.out.println(m.name + "을 처치하였습니다.");
c.getExp(150);
c.getItem(m.itemDrop());
break battle;
}
m.attack(c);
break;
case 2:
System.out.println("도망쳤습니다.");
break battle;
}
}
}