반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 브루트포스 알고리즘
- 자료 구조
- 임의 정밀도 / 큰 수 연산
- 구현
- 스택
- 사칙연산
- 유클리드 호제법
- 별 찍기
- LeetCode Remove Duplicates from Sorted List in c
- 정수론
- 연결리스트 중복제거
- 수학
- LeetCode 83번
- 큰 수 연산
- 연결리스트 정렬
- 시뮬레이션
- 큐
- 문자열
- Queue
- 실패함수
- KMP알고리즘
- 해시를 사용한 집합과 맵
- 다이나믹 프로그래밍
- 조합론
- 프로그래머스
- 정렬
- 문자열제곱
- 재귀
- LeetCode 83 c언어
- 이분 탐색
Archives
- Today
- Total
hahn
JAVA Interface, abstract 이해(게임 만들기) 본문
728x90
반응형
package javabasic;
abstract class Creature {
private int hp;
private int mp;
private String statement;
private int str;
private int def;
@Override
public String toString() {
return "hp=" + hp + ", mp=" + mp + ", str=" + str + ", def=" + def + ", statement=" + statement;
}
public int getStr() {
return str;
}
public void setStr(int str) {
this.str = str;
}
public int getDef() {
return def;
}
public void setDef(int def) {
this.def = def;
}
public int getHp() {
return hp;
}
public void setHp(int hp) {
this.hp = hp;
}
public int getMp() {
return mp;
}
public void setMp(int mp) {
this.mp = mp;
}
public String getStatement() {
return statement;
}
public void setStatement(String statement) {
this.statement = statement;
}
public void takeHit(int takeHit) {
hp = hp - takeHit;
}
public void takeHit(int takeHit, int def) {
hp = hp - takeHit + def;
}
}
package javabasic;
import javabasic.Creature;
import java.util.HashMap;
import java.util.Map;
import javabasic.Action;
class Character extends Creature implements Action{
private int money;
private Map<String, Object> weapon;
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
public void payMoney(int pay) {
setMoney(getMoney() - pay);
System.out.printf("남은 돈 : %d\n",getMoney());
}
public Map getWeapon() {
return weapon;
}
public void setWeapon(String name, int weapon, int reinforce) {
this.weapon.replace("name", name);
this.weapon.replace("str", weapon);
this.weapon.replace("reinforce", reinforce);
}
public Character(int hp, int mp, int str, int def) {
super.setHp(hp);
super.setMp(mp);
super.setStr(str);
super.setDef(def);
super.setStatement("정상");
this.weapon = new HashMap<String, Object>();
weapon.put("name", "");
weapon.put("str", 0);
weapon.put("reinforce", 0);
this.setMoney(100);
}
@Override
public int attack() {
System.out.printf("%s 만큼의 피해를 입혔습니다.\n", super.getStr() + (int)weapon.get("str"));
return getStr() + (int)weapon.get("str");
}
@Override
public int defence() {
System.out.printf("%s 만큼의 피해를 막았습니다.\n", super.getDef());
return getDef();
}
public void heal(int hp) {
super.setHp(super.getHp() + hp);
System.out.printf("HP : %d 회복했습니다.\n", hp);
}
public void heal(int hp, int mp) {
super.setHp(super.getHp() + hp);
super.setMp(super.getMp() + mp);
System.out.printf("HP : %d MP : %d 회복했습니다.\n", hp, mp);
}
public void spoilFood(int hp) {
super.setHp(super.getHp() - hp);
System.out.println("상한 음식입니다. HP가 2 감소했습니다.\n");
}
public void earnMoney(int money) {
this.money += money;
}
public boolean moneyCompare(int money) {
return (this.money < money);
}
}
package javabasic;
public class Warrior extends Character implements Skill{
public Warrior(int hp, int mp, int str, int def) {
super(hp, mp, str, def);
}
public int skill() {
System.out.println("mp 10을 사용합니다.");
super.setMp(super.getMp() - 10);
System.out.printf("강타를 사용하여 %d의 피해를 입혔습니다.\n", super.getStr()*3);
return super.getStr()*3;
}
public void WarriorInfo() {
System.out.println("WarriorInfo hp=" + getHp() + ", mp=" + getMp() + ", str=" + (getStr() + (int)getWeapon().get("str")) + ", def=" + getDef() + ", statement=" + getStatement() +", money=" + getMoney() + ", weapon=" + getWeapon());
}
}
package javabasic;
public interface Skill {
public int skill();
}
package javabasic;
interface Action{
public int attack();
public int defence();
}
package javabasic;
public interface Inven {
public int money();
public int weapon();
}
package javabasic;
class Monster extends Creature implements Action{
public Monster(int hp, int mp, int str, int def) {
super.setHp(hp);
super.setMp(mp);
super.setStr(str);
super.setDef(def);
super.setStatement("정상");
}
@Override
public int attack() {
System.out.printf("%s 만큼의 피해를 입었습니다.\n", super.getStr());
return getStr();
}
@Override
public int defence() {
return getDef();
}
public void MonsterInfo() {
String HpBar = "";
System.out.println("MonsterInfo hp=" + getHp() + ", mp=" + getMp() + ", str=" + getStr() + ", def=" + getDef() + ", statement=" + getStatement());
for(int i = 0; i < getHp(); i++) {
HpBar += "❤";
}
System.out.println(HpBar);
}
}
package javabasic;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import javabasic.Monster;
class Buffer{
BufferedReader bf = null;
public Buffer() {
this.bf = new BufferedReader(new InputStreamReader(System.in));
}
public int buf() throws NumberFormatException, IOException {
try {
return Integer.parseInt(this.bf.readLine());
}catch(Exception e){
return 0;
}
}
}
public class game extends Thread {
public static void main(String[] args) throws IOException, InterruptedException{
Buffer bf = new Buffer();
boolean gameContinue = true;
int hp, mp, str, def = 0;
int gameMenu = 0;
int continueCheck = 9;
int move = 0;
int select = 3;
int escape = 0;
int action = 0;
int killCount = 0;
int characterClass = 0;
int store = 0;
int weaponSelect = 0;
Warrior wr = null;
Archer ar = null;
Monster m1 = null;
String charcter = "⎛⎝(•‿•)⎠⎞";
String monster1 = " ╰(‵□′)╯";
while(select != 0) {
System.out.println("직업 선택해주세요.");
System.out.println("1. Warrior 2. Archer");
select = bf.buf();
if(select == 1) {
System.out.println("Warrior 스텟 설명");
hp = (int) Math.floor(Math.random()*100 + 20);
mp = (int) Math.floor(Math.random()*50 + 10);
str = (int) Math.floor(Math.random()*10 + 2);
def = (int) Math.floor(Math.random()*10 + 3);
System.out.printf("Warrior : HP %d MP %d STR %d DEF %d\n", hp, mp, str, def);
while(select != 0) {
System.out.println("Warrior로 결정하시겠습니까? 1. Y , 2. N");
if(bf.buf() == 1) {
wr = new Warrior(hp, mp, str, def);
charcter += "🗡";
characterClass = 1;
select = 0;
}else {
System.out.println("처음으로 돌아갑니다.");
select = 3;
break;
}
}
}else if(select == 2){
System.out.println("Archer 스텟 설명");
System.out.println("Archer : HP 30 MP 30 STR 10 DEF 2");
while(select != 0) {
System.out.println("Archer로 결정하시겠습니까? 1. Y , 2. N");
if(bf.buf() == 1) {
ar = new Archer(30, 30, 10, 2);
charcter += "🏹";
characterClass = 2;
select = 0;
}else {
System.out.println("처음으로 돌아갑니다.");
select = 3;
break;
}
}
}
}
while(gameContinue) {
if(characterClass == 1) {
gameMenu = 0;
killCount = 0;
System.out.println("1. 상점 이용, 2. 사냥터 이동, 3. 회복, 4.게임 종료");
wr.WarriorInfo();
gameMenu = bf.buf();
if(gameMenu == 1) {
while(store != 3) {
store = 0;
weaponSelect = 0;
System.out.println("1. 무기 구매, 2. 무기 강화, 3. 상점 나가기");
store = bf.buf();
if(store == 1) {
System.out.println("1.목검(10원, +2str), 2.철검(20원, +5str)");
weaponSelect = bf.buf();
if(weaponSelect == 1) {
if(wr.moneyCompare(10)) {
System.out.println("돈이 없슴니다.");
}else {
if(!wr.getWeapon().get("name").equals("")) {
System.out.println("이미 무기를 가지고 있습니다. 정말 구매하시겠습니까?");
System.out.println("1. Y 2. N");
store = bf.buf();
if(store == 1) {
wr.payMoney(10);
wr.setWeapon("목검", 2, 0);
}
}else {
wr.payMoney(10);
wr.setWeapon("목검", 2, 0);
}
}
}else if(weaponSelect == 2) {
if(wr.moneyCompare(20)) {
System.out.println("돈이 없슴니다.");
}else {
if(!wr.getWeapon().get("name").equals("")) {
System.out.println("이미 무기를 가지고 있습니다. 정말 구매하시겠습니까?");
System.out.println("1. Y 2. N");
store = bf.buf();
if(store == 1) {
wr.payMoney(20);
wr.setWeapon("철검", 5, 0);
}
}else {
wr.payMoney(20);
wr.setWeapon("철검", 5, 0);
}
}
}
}else if(store == 2) {
if(wr.getWeapon().get("name").equals("")) {
System.out.println("무기가 없습니다.");
}else {
System.out.printf("현재 무기는 %d 강입니다. 강화하시겠습니까?(3원)\n", wr.getWeapon().get("reinforce"));
System.out.println("1. Y 2. N");
if(bf.buf() == 1) {
if(wr.moneyCompare(3)) {
System.out.println("돈이 없습니다.");
}else {
wr.payMoney(3);
if(Math.random() > 0.7) {
System.out.println("강화 성공");
wr.setWeapon((String)wr.getWeapon().get("name"), (int)wr.getWeapon().get("str") + 1, (int)wr.getWeapon().get("reinforce") + 1);
}else {
System.out.println("강화 실패(아이템 파괴)");
wr.setWeapon("", 0, 0);
}
}
}
}
}
}
}else if(gameMenu == 2) {
while(continueCheck < 235) {
move = 0;
System.out.println("‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾");
if((continueCheck % 7) == 2 || (continueCheck % 7) == 3 || (continueCheck % 7) == 5) {
System.out.printf("%"+ continueCheck +"s\n" ,charcter);
}else if((continueCheck % 7) == 1 || (continueCheck % 7) == 6){
escape = 0;
if((continueCheck % 7) == 1){
monster1 = " ╰(‵□′)╯";
}else {
monster1 = " (⊙x⊙;)";
}
System.out.printf("%"+ continueCheck +"s\n" ,charcter + monster1);
System.out.printf("%s를 만났습니다. 싸우시겠습니까?(1. 예 / 2. 아니오)\n", monster1);
escape = bf.buf();
if((continueCheck % 7) == 1) {
m1 = new Monster(12, 5, 6, 1);
m1.MonsterInfo();
}else {
m1 = new Monster(20, 2, 5, 2);
m1.MonsterInfo();
}
while(m1.getHp() > 0 && wr.getHp() > 0) {
if(escape == 2) {
if(Math.random() > 0.5) {
break;
}else{
System.out.println("도망 실패");
}
}
action = 0;
System.out.println("1. 공격 2.방어 3.스킬 4.도망간다");
action = bf.buf();
if(action == 1) {
if(Math.random() > 0.3) {
m1.takeHit(wr.attack());
}else {
System.out.println("빗나감");
}
sleep(200);
wr.takeHit(m1.attack());
sleep(200);
m1.MonsterInfo();
}else if(action == 2) {
wr.takeHit(m1.attack(), wr.defence());
}else if(action == 3) {
if(wr.getMp() < 10) {
System.out.println("MP가 부족합니다.");
}else {
m1.takeHit(wr.skill());
sleep(200);
wr.takeHit(m1.attack());
sleep(200);
m1.MonsterInfo();
}
}else if(action == 4) {
if(Math.random() > 0.5) {
System.out.println("도망갑니다.");
break;
}else {
System.out.println("도망실패.");
sleep(200);
wr.takeHit(m1.attack());
}
}
if(m1.getHp() <= 0) {
sleep(200);
System.out.println("몬스터를 잡았습니다.");
killCount++;
}
sleep(200);
wr.WarriorInfo();
}
}else if((continueCheck % 7) == 4){
action = 0;
System.out.printf("%"+ continueCheck +"s\n" ,charcter + " 🍖");
System.out.printf("고기를 발견했습니다. 먹겠습니까?(1. 예 / 2. 아니오)\n");
action = bf.buf();
if(action == 1) {
wr.heal(3, 3);
sleep(200);
wr.WarriorInfo();
}
}else{
action = 0;
System.out.printf("%"+ continueCheck +"s\n" ,charcter + " 🍖");
System.out.printf("고기를 발견했습니다. 먹겠습니까?(1. 예 / 2. 아니오)\n");
action = bf.buf();
if(action == 1) {
wr.spoilFood(2);
sleep(200);
wr.WarriorInfo();
}
}
System.out.println("___________________________________________________________________________________________________________________");
if(wr.getHp() <= 0) {
System.out.println("당신은 죽었습니다.\n");
break;
}
System.out.printf("현재 위치 : %d, 남은 거리 : %d", continueCheck - 9, 235 - continueCheck);
while((move < 1 || move >20) && wr.getHp() > 0) {
System.out.println(" 진행하고자 하는 거리를 입력해주세요(1 ~ 20 사이).");
move = bf.buf();
}
continueCheck = continueCheck + move;
if(continueCheck <= 0) {
wr.setMoney(wr.getMoney() + killCount);
System.out.println("사냥 종료");
}
}
}else if(gameMenu == 3) {
if(wr.getMoney() > 5) {
wr.heal(50, 30);
}else {
System.out.println("돈이 없어 게임 진행 불가합니다. 게임 종료합니다.");
gameContinue = false;
}
}else if(gameMenu == 4) {
gameContinue = false;
}
}
}
System.out.println("게임 종료");
}
}
예전에 실습할 때 만든 건데 기록용으로 올려둬야겠다.
원래는 당일 리뷰해서 올리려 했는데 미루고 미뤄서 더 이상 기억이 나지 않는다..
중간에 변수 하나 초기화해줘야 했는데 기억 안 난다.
다시 보니 아직도 상속 개념은 이해 제대로 못 하고 있는 듯?
그냥 막 짜다 보니 변수 선언 엄청 많이 해뒀는데
한 번 해봤으니 다음부터는 어느 정도 틀을 잡고 해야겠다.
대충 6 ~ 7시간 걸렸던 것 같은데 많이 배웠었다.
728x90
반응형
'개발 실습 > JAVA' 카테고리의 다른 글
JAVA 생성자 이해하기 - 실습 (0) | 2021.06.01 |
---|