컴퓨터프로그래밍및실습 (2022년)/0912
Jump to navigation
Jump to search
Visual Studio Code에 Karel 프로젝트 추가하기
Maven 설치
- 컴퓨터프로그래밍및실습_(2022년)/0905#프로젝트 관리 참조하여 설치할 것
Karel 라이브러리 다운로드
- 기본 Karel 프로그램 예제#Karel 라이브러리에서 다운로드 받을 것
Maven Project 생성
- 이 부분의 본문은 Maven Project 생성입니다.
Karel을 위한 프로젝트 생성
아래 그림과 같이 새로운 프로젝트를 생성한다.
pom.xml에 Karel 라이브러리 추가
Maven에서 프로젝트에 대한 명세가 pom.xml에 기술되어 있다. 여기에서 필요한 항목을 추가하도록 한다.
- 먼저 Java 1.6으로 컴파일, 실행을 해야 한다. 이것은 아래 명세에서 다음을 변경한다.
<maven.compiler.source>1.6</maven.compiler.source>
<maven.compiler.target>1.6</maven.compiler.target>
- 두 번째로 Karel.jar와 Hufs-karel.jar를 다운로드 받는다. 그리고 방금 만든 프로젝트 폴더에
lib
폴더를 생성한 후, 이 폴더에 다운로드 받은 두 개의 jar 파일을 이 폴더에 저장한다.
- 세 번째로 Stanford Karel 라이브러리를 프로젝트에서 사용할 수 있도록 추가한다. dependencies 엘리먼트에 다음을 추가한다. 여기서 groupId와 artifactId는 적당한 이름으로 저장하도록 한다. version도 1.0으로 적절하게 지정한다. systemPath에서 project.basedir은 프로젝트가 있는 최상위 폴더를 뜻한다.
<dependency>
<groupId>karel</groupId>
<artifactId>stanford</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${basedir}/lib/Karel.jar</systemPath>
</dependency>
- 마지막으로 Hufs Karel 라이브러리를 다음과 같이 추가한다.
<dependency>
<groupId>karel</groupId>
<artifactId>hufs</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${basedir}/lib/Hufs-karel.jar</systemPath>
</dependency>
pom.xml에서 수정하는 부분
...
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.6</maven.compiler.source>
<maven.compiler.target>1.6</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>karel</groupId>
<artifactId>stanford</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${basedir}/lib/Karel.jar</systemPath>
</dependency>
<dependency>
<groupId>karel</groupId>
<artifactId>hufs</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${basedir}/lib/Hufs-karel.jar</systemPath>
</dependency>
</dependencies>
...
Karel 지원
- 이 부분의 본문은 기본 Karel 프로그램 예제입니다.
Karel 라이브러리
- Stanford Karel Library (karel.jar)
HUFS Karel Library (hufs-karel.jar)- HUFS Karel Library 2022.09.15 Version (hufs-karel-220915.jar)
이 라이브러리는 Java 6 이하의 버전에서만 실행된다. 그 이유는 Java Applet을 이용하기 때문인데, Java 7부터 Applet이 제거되어 Applet은 이후 버전에서는 더 이상 동작하지 않는다. Java 7 이후 버전으로 Karel을 실행하면 빈 화면만 등장한다.
첫 번째 HUFS Karel 프로그램
import hufs.karel.HKarel;
import hufs.karel.HufsProgram;
public class FirstHKarelProgram extends HufsProgram {
@Override
protected void onStart() {
HKarel karel = (HKarel)getHObject("철수");
karel.move();
karel.move();
}
public static void main(String[] args) {
HufsProgram.main(args, new HKarel("철수"));
}
}
- Start 버튼을 누르면
onStart
가 실행된다. HufsProgram.main
에서 인자로 전달한HKarel("철수")
는getHObject("철수")
를 통하여 구할 수 있다.
두 번째 HUFS Karel 프로그램
import hufs.karel.HKarel;
import hufs.karel.HufsProgram;
public class SecondHKarelProgram extends HufsProgram {
HKarel karel;
@Override
protected void onInit() {
karel = new HKarel("철수", 5, 5);
}
@Override
protected void onStart() {
while (true) {
if (karel.frontIsBlocked())
karel.turnLeft();
karel.move();
}
}
public static void main(String[] args) {
HufsProgram.main(args, null);
}
}
HufsProgram.main
메소드에서 두 번째 인자로null
을 두었다. 이것은 Karel 객체를 전달하지 않는다는 뜻이다.- Start 버튼을 누르기 전에
onInit()
가 실행된다. 그러므로 Start 버튼을 누르기 전에 초기화 해야 할 코드는 이곳에 작성한다. 여기에서HKarel
객체를 생성하였다. 하지만 이 객체를 월드에 추가하지는 않았다. - Start 버튼을 누르면
onStart()
가 실행된다. add()
메소드를 이용하여 생성한 Karel을 월드에 추가하지 않았기 때문에 오류가 난다.
세 번째 HUFS Karel 프로그램 수정 버전
생성한 객체를 월드에 추가해야 나타남
import hufs.karel.HKarel;
import hufs.karel.HufsProgram;
public class SecondHKarelProgram extends HufsProgram {
HKarel karel;
@Override
protected void onInit() {
karel = new HKarel("철수", 5, 5);
karel.setColor(BLUE);
karel.setColorOfBody(YELLOW);
karel.setColorOfFoot(GREEN);
karel.setColorOfMouth(RED);
add(karel); // 생성한 HKarel을 월드에 추가
}
@Override
protected void onStart() {
while (true) {
if (karel.frontIsBlocked())
karel.turnLeft();
karel.move();
}
}
public static void main(String[] args) {
HufsProgram.main(args, null);
}
}
- 위 예제와 동일한 코드이나,
add(karel)
을 실행하여 생성한 객체를 월드에 추가하도록 하였다. 그러므로 이 객체가 월드에 있어야만 사용할 수 있는move()
메소드를 사용할 수 있게 되었다.