MalangBaram LAB

JavaQuest 본문

프로그래밍/JAVA

JavaQuest

프요 2015. 9. 1. 17:43
1. 4개의 종족을 고를 수 있는 CUI 게임 생성부분을 생성하시오.

2. 기초정보
종종 기본 스텟
힘: 10
민첩: 10
체력: 10
지능: 10

종족
특징
무기
인간
없음
칼, 방패
엘프
민첩 +7 힘 -5
쌍검, 활
드워프
체력 +10 민첩 -8
망치, 도끼
호빗
민첩 +10 체력 -8
단검

조건1: 생성시 자신이 원하는데로 10 스텟을 원하는 능력에 추가 부여 가능
조건2: 동료는 몇 명이든 가능

3. 실제 실행 화면 (진한 밑줄 값: 사용자 입력 부분)
1)종족을 선택 하세요(1.인간, 2.엘프, 3.드워프, 4.호빗): 2
2)추가 스텟을 입력하세요
힘 5 : 2
민첩 17 : 4
체력 10 : 2
지능 10 : 2
3)이름을 정해주세요 : 수신지신천신
4)동료를 만드시겠습니까(Y/N)? Y

1)종족을 선택 하세요(1.인간, 2.엘프, 3.드워프, 4.호빗): 3
2)추가 스텟을 입력하세요
힘 10 : 2
민첩 2 : 4
체력 20 : 2
지능 10 : 2
3)이름을 정해주세요 : 울라우프
4)동료를 만드시겠습니까(Y/N)? N

5) 생성되었습니다. 생성된 영웅은 2명
동료1: 수신지신천신
종족: 엘프 힘(7) 민첩(17) 체력(12) 지능(12)
무기: 쌍검, 활
동료2: 울라우프
종족: 엘프 힘(12) 민첩(6) 체력(22) 지능(12)
무기: 망치, 도끼

package ck.user;

import java.util.*;

public class user {

    public static void main(String[] args) {
       
        Scanner scn = new Scanner(System.in); //값을 입력받는  클래스

        //Vector클래스는 다른종류의 데이터형을 가질 수 있고 데이터가 꽉차면 자동으로 공간을 늘려준다. 자바 기본형 데이터 저장x
        Vector<ch> vc = new Vector<ch>(0);

        int i; //반복용 변수
        String bln; // True False 확인

        for (i = 0;; i++) { // break가 걸릴때 까지 무한반복

            ch temp = new ch(); // -> ch 생성자 실행

            temp.GetStatNname(); // -> ch의 GetStatNname 메소드 실행

            vc.addElement(temp); // ch에서 추가된 내용을 배열에 저작

            System.out.print("계속 입력하시겠습니까? <Y/N> : ");

            bln = scn.nextLine();

            if (!bln.equalsIgnoreCase("Y")) //equalsIgnoreCase는 대소문자 구분없이 같은 문자(여기서는 y, Y)일때 비교 후 같으면 참 변환 !bln은 bln의 반대. 즉, Y가 아닐때 실행할 내용
                break;
        }

        for (i = 0; i < vc.size(); i++) { // 배열의 크기 만큼 반복문
            vc.get(i).PushStatNname();
        }

    }

}

class ch {

    Scanner scn;

    String name; // 플레이어 이름

    elf el; //종족설정 -> elf 클래스로

    static int cnt, pshcnt = 0; //cnt = 자기자신? , pshcnt = 동료

    int[] stat = new int[4];

    // 1 = str 2 = dex 3 = health 4 = int

    ch() {

        scn = new Scanner(System.in);

        int i; //반복용 변수
        cnt++;

        for (i = 0; i < 4; i++) {

            stat[i] = 10; // 스탯을 10으로 초기화

        }

    }

    void PushStatNname() {

        pshcnt++; // 동료수 1 늘림

                        //pshcnt = 동료의 수, this.name = 입력한 이름, el.Jongjok 위에서 선택한 종족
        System.out.println(pshcnt + "번째 용사 " + this.name + "종족 : " + el.Jongjok);

        System.out.println("스탯");

        System.out.println("힘 :" + stat[0]);

        System.out.println("민첩 :" + stat[1]);

        System.out.println("체력 :" + stat[2]);

        System.out.println("지능 :" + stat[3]);

        System.out.println("무기 : " + el.weapon);

    }

    void GetStatNname() {

        //반복용 변수
        int i;

        int max = 0;

        System.out.print(pshcnt + "번째 주인공의 이름을 입력하세요 : ");

        this.name = scn.nextLine(); //입력한 이름은 ch.name 변수에 저장 nextLine 메소드는 한 줄단위로 입력된 글자를 처리

        System.out.println("종족을 선택해주세요 (1.인간  2.엘프   3.드워프   4.호빗)");

        el = new elf(scn.nextInt()); //선택한 값을 elf에 넘겨서 처리 후 el에 저장 -> el 클래스

        for (i = 0; i < 4; i++) {

            stat[i] += el.statbonus[i]; //el에 들어있는 보너스 스탯을 현 스탯에 추가

        }

        System.out.print("추가 스탯을 입력하세요 \n");

        while (true) { //계속 입력하시겠습니까? <Y/N>에서 N를 누르기 전까지 반복

            System.out.print("힘 " + stat[0] + " : ");

            stat[0] += scn.nextInt(); //입력된 값을 stat에 더함

            max += stat[0] - 10 - el.statbonus[0]; // 보너스 스텟을 합쳐서 10으로 넣었는지 확인하기 위해서 사용

            System.out.print("민첩 " + stat[1] + " : ");

            stat[1] += scn.nextInt();

            max += stat[1] - 10 - el.statbonus[1];

            System.out.print("체력 " + stat[2] + " : ");

            stat[2] += scn.nextInt();

            max += stat[2] - 10 - el.statbonus[2];

            System.out.print("지능 " + stat[3] + " : ");

            stat[3] += scn.nextInt();

            max += stat[3] - 10 - el.statbonus[3];

            //max가 10이 맞으면 ch문 종료. user 클래스로
            if (max == 10)
                break;

            else { // max가 10이 넘거나 적을때 모두 초기화 한 후 다시

                System.out.println("총합이 10이 아닙니다.");

                stat[0] = 10;

                stat[1] = 10;

                stat[2] = 10;

                stat[3] = 10;

                max = 0;

            }

        }

    }

}


class elf {

    String Jongjok;

    String weapon;
   
    //각 종족별 기본스탯 외의 보너스 스탯 배열
    int statbonus[] = new int[4];

    elf(int elf) { //int elf에는 ch에서 불러온 nextLine이 들어가있음.

        statbonus[0] = 0;

        statbonus[1] = 0;

        statbonus[2] = 0;

        statbonus[3] = 0;

        switch (elf) {

        case 1:
            Jongjok = "인간";
            weapon = "칼, 방패";
            break; //elf클래스 종료 다시 ch문으로

        case 2:
            Jongjok = "엘프";
            weapon = "쌍검, 활";
            statbonus[0] = -5;
            statbonus[1] = 7;
            break; //elf클래스 종료 다시 ch문으로

        case 3:
            Jongjok = "드워프";
            weapon = "망치, 도끼";
            statbonus[2] = 10;
            statbonus[1] = -8;
            break; //elf클래스 종료 다시 ch문으로

        default:
            Jongjok = "호빗";
            weapon = "단검";
            statbonus[1] = 10;
            statbonus[2] = -8;
            break; //elf클래스 종료 다시 ch문으로
        }
    }
}




0 Comments
댓글쓰기 폼