Skip to content

Tutorial_Step1_JAVA

juns2lee edited this page Nov 12, 2018 · 1 revision

(초급 단계) BWAPI 사용해보기

TutorialLevel1Bot 프로젝트를 통해, BWAPI 의 사용법을 익혀보겠습니다.

개발 범위 정의

  1. 플레이어 정보 및 맵 정보를 Screen 화면에 표시

  2. 현재 FrameCount 를 Screen 화면에 표시

  3. 각 유닛 id 를 Map 화면에 표시

개발 환경 설정

  1. Eclipse 를 실행시킵니다

  2. Package Explorer 에서 TutorialLevel1Bot 프로젝트를 선택합니다

  3. 메뉴 -> Run -> Run Configurations... -> 왼쪽 트리에서 Java Application 밑에 TutorialLevel1Bot 을 선택합니다

  4. 오른쪽 Arguments 탭 -> Working Directory : Others 에 C:\StarCraft 를 입력합니다

파일 목록

TutorialLevel1Bot 프로젝트를 구성하는 파일들은 다음과 같습니다.

파일명 설명
Main.java 봇 프로그램의 시작 지점입니다. MyBotModule을 실행시킵니다
MyBotModule.java 스타크래프트 게임과 Connection 을 맺고, 스타크래프트 게임에서 발생하는 각 이벤트를 처리합니다. 스타크래프트 게임이 종료되면 봇 프로그램을 종료시킵니다

1. 플레이어 정보 및 맵 정보를 Screen 화면에 표시

스타크래프트 게임 Screen 화면에 플레이어 정보를 출력하는 코드는 다음과 같습니다.

Broodwar.self() 는 아군 플레이어 객체를 반환하는 함수이고, Broodwar.enemy() 는 적군 플레이어 객체를 반환하는 함수입니다.

(MyBotModule.java)

public void onFrame() {
	...
	// 플레이어 정보 표시
	Broodwar.drawTextScreen(5, 5, "My Player: "+Broodwar.self().getTextColor()+Broodwar.self().getName()+" ("+Broodwar.self().getRace()+")");
	Broodwar.drawTextScreen(5, 15, "Enemy Player: "+Broodwar.enemy().getTextColor()+Broodwar.enemy().getName()+" ("+Broodwar.enemy().getRace()+")");
	...
}

스타크래프트 게임을 실행시켜서, 아군 및 적군 플레이어의 이름 및 종족 정보가 제대로 표시되는지 살펴봅시다.

2. 현재 FrameCount 를 Screen 화면에 표시

스타크래프트 게임 Screen 화면에 현재 FrameCount 를 출력하는 코드는 다음과 같습니다.

(MyBotModule.java)

public void onFrame() {
	...
	// 현재 FrameCount 표시
	Broodwar.drawTextScreen(300, 100, "FrameCount: "+Broodwar.getFrameCount());
	...
}

3. 각 유닛 id 를 Map 화면에 표시

스타크래프트 게임 Map 화면 상의 모든 유닛들에 대해 id를 출력하는 코드는 다음과 같습니다.

아군 / 적군 플레이어의 건물 / 지상유닛 / 공중유닛 뿐만 아니라 Mineral, Gas Geyser 등에 대해서도 id 가 부여됨을 알 수 있습니다.

또한 id 가 출력되는 위치를 살펴보면 유닛 그래픽의 중앙부에 id 가 출력되는데, 이를 통해 unitgetPosition() 의 결과는 유닛 그래픽의 중앙부 임을 알 수 있습니다.

(MyBotModule.java)

public void onFrame() {
	...
	// 유닛 id 표시
	for (Unit unit : Broodwar.getAllUnits()) {
		Broodwar.drawTextMap(unit.getPosition().getX(), unit.getPosition().getY(), ""+unit.getID());
	}
	...
}

Home

Clone this wiki locally