• 티스토리 홈
  • 프로필사진
    Song hyun
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
Song hyun
  • 프로필사진
    Song hyun
    • 분류 전체보기 (780)
      • 백준 (0)
      • 일본어 (0)
        • 모모타로TMC (0)
      • 영어 (2)
        • Diary (0)
        • Toast Masters (2)
      • 메모 (13)
      • 설치 메뉴얼 (30)
      • Java (178)
      • MySQL (60)
      • JSP (67)
      • Springboot (46)
      • HTML,CSS, JS (71)
        • HTML (8)
        • CSS (12)
        • JavaScript (37)
        • HTML&CSS 스터디 (13)
      • C++ (7)
      • Linux (7)
      • JPA (34)
      • Kotlin (2)
      • Flutter (42)
      • Error Note (39)
      • 디자인 패턴 (12)
      • 디지털논리회로 (4)
      • 데이터베이스 시스템 (8)
      • 알고리즘 (7)
      • 운영체제 (3)
      • 이산수학 (3)
      • 인공지능 (1)
      • 자료 구조 (14)
        • 기본 개념 (14)
        • 자료구조 스터디 (0)
      • 💡My project (76)
        • 팩맨 : Java Swing 게임 제작 프로젝트 (6)
        • 네이트톡 : Java 소켓 통신 프로젝트 (4)
        • 포켓옥션 : HikariCP&JDBC CRUD 프.. (3)
        • 이지 부산 : BDIA-Devton 2024 프로.. (20)
        • 그린 유니버시티 : JSP를 사용한 학사관리 프로.. (1)
        • 애드 포커 : 웹 소켓과 Spring을 사용한 카.. (1)
        • 셸위 : 게임 친구 매칭 사이트 (21)
        • 다모아 : 개발자 중개 플랫폼 (20)
      • 📗스터디 (13)
        • CNN : 웹개발 스터디 (10)
        • Node&React로 유튜브 사이트 만들기 (3)
      • 📙독서 및 강연 기록 (36)
        • 강연 (14)
        • 독서 (22)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • [Java] 27. Java로 스타크래프트 모델링하기
        2024년 04월 18일
        • Song hyun
        • 작성자
        • 2024.04.18.:18
        728x90
        반응형

        [Java] 27. Java로 스타크래프트 모델링하기

        모델링 과정

        1. 질럿, 저글링, 마린 클래스 생성하기

        (1) 클래스마다 사용자 정의 생성자 만들기

        (2) 클래스 별로 공격할 때/공격 받았을 때의 메서드 만들기

         

        2. 게이트웨이 클래스 생성하기

        (1) 게이트웨이 클래스 내부에 질럿, 저글링, 마린 클래스를 생성하는 메서드 만들기


        1. 질럿, 저글링, 마린 클래스 생성하기

        (1) 클래스마다 사용자 정의 생성자 만들기

        -Zealot, Marine, Zergling 세 클래스는 모두 동일한 멤버변수 name, hp, power를 지닌다. 

        이 때, 외부에서 멤버변수에 접근하거나 초기화할 수 없도록 private 접근 제어자를 넣는다.

         

        (2) 클래스 별로 공격할 때/공격 받았을 때의 메서드 만들기

        -각각의 클래스마다 beAttacked/attack(클래스명)의 메서드를 만든다.

        이 때, attack 메서드는 각각의 beAttacked 메서드를 인용해 총 3개를 만든다.

        =>모든 attack 메서드는 실행시 beAttacked 메서드를 실행하는 식이다.

        beAttacked는 해당 객체의 power를 공격받은 객체의 health에서 감한 후, 공격 지문을 출력한다.

         


        2. 게이트웨이 클래스 생성하기

        (1) 게이트웨이 클래스 내부에 질럿, 저글링, 마린 클래스를 생성하는 메서드 만들기

        -게이트웨이 클래스는 gatewayNumber(번호)/count(생산횟수)라는 변수를 가진다. 

         

        -예시: createZealot이라는 이름의 질럿 생산 메서드가 있다고 생각해보자.

        createZealot메서드는 호출시 count 변수에 1을 더하고, 새로운 Zealot 클래스 객체를 생성한다. 

         


         

         

        package starcraft.ver01;
        
        public class Zealot {
        	private String name;
        	private int power;
        	private int hp;
        
        	// Zealot 클래스의 사용자 정의 생성자
        	public Zealot(String name) {
        		this.name = name;
        		power = 5;
        		hp = 80;
        	}
        
        	// 각 변수의 getter 메서드
        	public String getName() {
        		return name;
        	}
        
        	public int getPower() {
        		return power;
        	}
        
        	public int gerHp() {
        		return hp;
        	}
        
        	// 질럿이 저글링을 공격합니다.
        	public void attackZergling(Zergling z) {
        		System.out.println("[" + this.name + "]이 [" + z.getName() + "]을 공격합니다.");
        		z.beAttacked(this.power); // 질럿의 공격력을 beAttacked 메서드에 대입
        	}
        
        	// 질럿이 마린을 공격합니다.
        	public void attackMarine(Marine m) {
        		System.out.println("[" + this.name + "]이 [" + m.getName() + "]을 공격합니다.");
        		m.beAttacked(this.power);
        	}
        
        	// 자신이 공격을 당합니다.
        	public void beAttacked(int power) {
        		// 방어적 코드 작성
        		// 80--75 = 5
        		// 5--75 = 0
        		if (hp <= 0) {
        			System.out.println("[" + this.name + "]은 이미 사망했습니다.");
        			hp = 0;
        			return;
        		}
        		hp -= power;
        	}
        	
        	public void showInfo() {
        		System.out.println("=====상태창=====");
        		System.out.println(" 이름: "+this.name);
        		System.out.println(" 공격력: "+this.power);
        		System.out.println(" 생명력: "+this.hp);
        	}
        
        }
        package starcraft.ver01;
        
        public class Zergling {
        	private String name;
        	private int power;
        	private int hp;
        
        	public Zergling(String name) {
        		this.name = name;
        		power = 3;
        		hp = 50;
        	}
        	
        	public String getName() {
        		return name;
        	}
        
        	public void setName(String name) {
        		this.name = name;
        	}
        
        	public int getPower() {
        		return power;
        	}
        
        	public void setPower(int power) {
        		this.power = power;
        	}
        
        	public int getHp() {
        		return hp;
        	}
        
        	public void setHp(int hp) {
        		this.hp = hp;
        	}
        
        	// get,set 메서드
        	// 단축키 : 알트+시프트+s
        
        	// 저글링이 질럿을 공격합니다. attackZealot
        	public void attackZealot(Zealot z) {
        		System.out.println("[" + this.name + "]이 [" + z.getName() + "]을 공격합니다.");
        		z.beAttacked(this.power);
        	}
        
        	// 저글링이 마린을 공격합니다. attackMarine
        	public void attackMarine(Marine m) {
        		System.out.println("[" + this.name + "]이 [" + m.getName() + "]을 공격합니다.");
        		m.beAttacked(this.power);
        	}
        
        	// 공격을 당할 때
        	public void beAttacked(int power) {
        		// 방어적 코드 작성
        		if (hp <= 0) {
        			System.out.println("[" + this.name + "]은 이미 사망했습니다.");
        			hp = 0;
        			return;
        		}
        		hp -= power;
        	}
        	
        	public void showInfo() {
        		System.out.println("=====상태창=====");
        		System.out.println(" 이름: "+this.name);
        		System.out.println(" 공격력: "+this.power);
        		System.out.println(" 생명력: "+this.hp);
        	}
        
        }
        package starcraft.ver01;
        
        public class Marine {
        	private String name;
        	private int power;
        	private int hp;
        
        	public Marine(String name) {
        		this.name = name;
        		power = 4;
        		hp = 70;
        	}
        	
        	public String getName() {
        		return name;
        	}
        
        	public void setName(String name) {
        		this.name = name;
        	}
        
        	public int getPower() {
        		return power;
        	}
        
        	public void setPower(int power) {
        		this.power = power;
        	}
        
        	public int getHp() {
        		return hp;
        	}
        
        	public void setHp(int hp) {
        		this.hp = hp;
        	}
        
        	// 마린이 질럿을 공격합니다.
        	public void attackZealot(Zealot z) {
        		System.out.println("[" + this.name + "]이 [" + z.getName() + "]을 공격합니다.");
        		z.beAttacked(this.power);
        	}
        
        	// 마린이 저글링을 공격합니다.
        	public void attackZergling(Zergling z) {
        		System.out.println("[" + this.name + "]이 [" + z.getName() + "]을 공격합니다.");
        		z.beAttacked(this.power);
        	}
        
        	// 공격을 당할 때
        	public void beAttacked(int power) {
        		// 방어적 코드 작성
        		if (hp <= 0) {
        			System.out.println("[" + this.name + "]은 이미 사망했습니다.");
        			hp = 0;
        			return;
        		}
        		hp -= power;
        	}
        	
        	public void showInfo() {
        		System.out.println("=====상태창=====");
        		System.out.println(" 이름: "+this.name);
        		System.out.println(" 공격력: "+this.power);
        		System.out.println(" 생명력: "+this.hp);
        	}
        
        }
        728x90
        반응형

        'Java' 카테고리의 다른 글

        [Java] 28. static 메서드의 개념과 메서드 오버로딩  (0) 2024.04.19
        [Java] 28. Static 변수와 원리  (0) 2024.04.18
        [Java] 26. 참조 변수 this, this의 3가지 용법  (0) 2024.04.18
        [Java] 25. getter/setter 메서드  (0) 2024.04.17
        [Java] 24. 접근 제어 지시자와 정보 은닉  (0) 2024.04.17
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바