My Melody Is Cute 텍스트 스타크래프트 프로그램(this.)
본문 바로가기

실습👁️‍🗨️/연습

텍스트 스타크래프트 프로그램(this.)

우와 어렵당 헷갈린다ㅠ

메서드랑 클래스들 줄줄이 소세지로 이어주는거...너의 짝은 누구니..

머리속에서 만들고싶은 구성은 있는데 그걸 못해서 답답하다

그래서 아주 쉽고 간단하고 기본적으로 만들기....

개념을 적용하는게 어려워..

개념도 자꾸 까먹음ㅡㅠ

 

객체 생성이 필요한 메서드는 주로 해당 메서드가 객체의 특정 상태나 속성을 조작 또는 조회해야 할 때 만듭니다. 객체가 포함한 데이터를 조작하거나 객체 간의 통신을 위해 객체 생성이 필요한 메서드를 만들 수 있습니다.

예를 들어, 게임에서 각 플레이어의 상태(체력, 공격력, 방어력 등)를 변경하는 메서드는 플레이어 객체의 데이터를 조작해야 하므로 해당 메서드는 객체 생성이 필요합니다. 또한, 플레이어 간의 상호작용을 처리하는 메서드도 객체 생성이 필요할 수 있습니다.

일반적으로 메서드가 객체의 상태를 조작하거나 객체 간의 관계를 다루는 경우, 해당 메서드는 객체 생성을 필요로 합니다. 그러나 상태를 변경하지 않고 단순히 정보를 조회하는 경우, 해당 메서드가 객체 생성 없이 호출될 수 있습니다.

 

 

유효성 검증도 안넣었는데 자꾸 오류나서 짜증난다........

ㅠㅠㅜㅜㅜㅜㅜㅜㅜ

package com.codestates;
import java.util.Scanner;

public class Game {
    public static void GameStart(Player player1,Player player2) {
        System.out.println("-".repeat(30));
        System.out.println("[안내] " + player1.getName() + "유닛이 [공격] 하였습니다.");

        while  ( player2.getHealthPower() >= 0 ) { // 체력이 0보다 큰 동안 반복
            player2.setHealthPower(player2.getHealthPower() - player1.getAttackPower() / player2.getDefensePower());
            System.out.println("[안내] 상대 유닛의 남은 [체력]은 " + player2.getHealthPower() + " 입니다.");

            if (isGameOver(player1,player2)){
                break;
            }
        }
    }
    public static boolean isGameOver(Player player1,Player player2) {
        if ( player2.getHealthPower() <= 0 ){
            System.out.println("-".repeat(30));
            System.out.println("[안내] 더 이상 공격할 수 없습니다");
            System.out.println();
            System.out.println("[안내] 상대 유닛이 제거되었습니다");
            return true;
        }else {
            return false;
        }
    }
}

+ while() 문 안에 isGameOver() 메서드를 추가해보기

static 메서드로 player1과 player2를 전달 받는 것이 아닌

Game 클래스의 생성자를 이용해서 player1, player2 객체를 전달해서 Player 를 초기화하는 방식으로 해보기

메서드는 동사로! GameStart() 보다는 startGame()

unitInfo() 보다는 inputUnitInfo()

입력과 출력을 각각 담당하도록 입력 전용 클래스, 출력 전용 클래스로 구분해보기

package com.codestates;

import java.util.Scanner;

public class IOScreen {
    private Scanner scanner = new Scanner(System.in);
    public Player unitInfo() {
        System.out.println("[시스템] 유닛 [이름] 을 입력해 주세요.");
        String name = scanner.nextLine();

        System.out.println("[시스템] 유닛 [공격력] 을 입력해 주세요.");
        int attackPower = Integer.parseInt(scanner.nextLine());//문자를 숫자로 전환해서 저장

        System.out.println("[시스템] 유닛 [방어력] 을 입력해 주세요.");
        int defensePower = Integer.parseInt(scanner.nextLine());

        System.out.println("[시스템] 유닛 [체력] 을 입력해 주세요.");
        int healthPower = Integer.parseInt(scanner.nextLine());

        return new Player(name, attackPower, defensePower, healthPower);
    }
    public void displayPlayerInfo(Player player) {
        System.out.println("[안내] 생성된 유닛 정보는 다음과 같습니다.");
        System.out.println("[안내] " + player.getName() + " 유닛이 게임에 참여하였습니다.");
        System.out.println("[공격력] : " + player.getAttackPower());
        System.out.println("[방어력] : " + player.getDefensePower());
        System.out.println("[체력] : " + player.getHealthPower());
        System.out.println("=".repeat(30));
    }
}
package com.codestates;

import java.util.Scanner;
public class Player {
    private String name;
    private int attackPower;
    private int defensePower;
    private int healthPower;

    public Player(String name, int attackPower, int defensePower, int healthPower){
        this.name = name;
        this.attackPower = attackPower;
        this.defensePower = defensePower;
        this.healthPower = healthPower;
    }

    public String getName() {
        return name;
    }
    public int getAttackPower() {
        return attackPower;
    }
    public int getDefensePower() {
        return defensePower;
    }
    public int getHealthPower() {
        return healthPower;
    }//값을 반환할때 사용

    public void setHealthPower(int healthPower) {
        this.healthPower = healthPower;
    }// 값을 설정,변경할때 사용 캡슐화?

}
package com.codestates;


public class TextRpgGameApplication {
    public static void main(String[] args) {
        // TODO. 여기서부터 게임을 구현하세요.
        IOScreen ioScreen = new IOScreen();

        System.out.println("[안내] TRPG 스타크래프트 시작합니다.");

        System.out.println("[안내] 자신의 유닛 정보를 입력해 주세요.");
        Player player1 = ioScreen.unitInfo();
        ioScreen.displayPlayerInfo(player1);

        System.out.println("[안내] 상대 유닛 정보를 입력해 주세요.");
        Player player2 = ioScreen.unitInfo();
        ioScreen.displayPlayerInfo(player2);

        Game.GameStart(player1,player2);




    }
}