IKarel (KarelOOP2)
Retired DISLab
/* * Copyright 2020 Sangwon Park @ DISLab, HUFS */ package hufs.dislab.karel; import java.awt.Color; import java.awt.Point; import stanford.karel.AbstractIKarelProgram; /** * 기존의 stanford.karel.Karel이나 stanford.karel.SuperKarel을 이용하여 코드를 작성했었다. * KarelOOP2에서는 stanford.karel 패키지를 사용하지 않고도 프로그래밍을 할 수 있도록 하였다. * <p/> * 또한 기존 프로그램은 * KarelOOP2 * @author Sangwon Park * @see stanford.karel.Karel * @see stanford.karel.SuperKarel * @see stanford.karel.AbstractIKarelProgram * @see hufs.dislab.karel.IKarelProgram * @see hufs.dislab.karel.SimpleKarel * @since KarelOOP2 */ public interface IKarel extends Runnable { /** * IKarel에 월드에 나타나면 불리는 메소드이다. * @see AbstractIKarelProgram#add(IKarel karel) */ public void onCreate(); /** * 캐럴의 이름을 구한다. 스레드 프로그래밍할 때 유용하다. * @return 캐럴의 이름 */ public String getName(); /** * 현재 위치에 색을 칠한다. * @param color 색깔 * */ public void paintCorner(Color color); /** * 현재 위치의 색깔을 반환한다. * @since KarelOOP2 * @return 현재 위치의 색깔 */ public Color getCornerColor(); /** * 현재 IKarel이 있는 좌표 * @since KarelOOP2 * @return 좌표 */ public Point getLocation(); /** * Karel을 한 칸 전진한다. */ public void move(); /** * steps 회수 만큼 이동한다. * @param steps 이동할 걸음 수 * @return 실제 걸음 수. 벽이 있으면 더 이상 전진할 수 없으므로 * 요청한 걸음 수와 실제 걸음 수는 다를 수 있다. */ public int move(int steps); /** * 반시계 방향으로 90도 회전한다. */ public void turnLeft(); /** * 반시계 방향으로 90도 회전한다. */ public void turnRight(); /** * 180도 회전한다. */ public void turnAround(); /** * 현재 위치에 Beeper이 있으면 주워서 가방에 담는다. * 현재 위치에 Beeper가 없으면 에러 메시지를 출력하고 프로그램이 종료된다. */ public void pickBeeper(); /** * 현재 위치에 Beeper를 하나 놓는다. * Karel이 가지고 있는 Beeper가 하나도 없으면 에러 메시지를 출력하고 프로그램이 종료된다. */ public void putBeeper(); /** * 현재 위치에 비퍼가 있는지 확인한다. * @return 현재 위치에 비퍼가 있으면 true, 없으면 false를 반환한다. */ public boolean beepersPresent(); /** * Bag에 비퍼가 있는지 확인한다. * @return 비퍼가 있으면 true, 없으면 false를 반환한다. */ public boolean beepersInBag(); /** * 앞쪽에 벽이 없는지 확인한다. * @return 앞쪽에 벽이 없으면 true, 있으면 false를 반환한다. */ public boolean frontIsClear(); /** * 왼쪽에 벽이 없는지 확인한다. * @return 왼쪽에 벽이 없으면 true, 있으면 false를 반환한다. */ public boolean leftIsClear(); /** * 오른쪽에 벽이 없는지 확인한다. * @return 오른쪽에 벽이 없으면 true, 있으면 false를 반환한다. */ public boolean rightIsClear(); /** * Karel이 북쪽을 바라보고 있는지 확인다. * @return Karel이 북쪽을 바라보고 있으면 true, 그렇지 않으면 false를 반환한다. */ public boolean facingNorth(); /** * Karel이 동쪽을 바라보고 있는지 확인다. * @return Karel이 동쪽을 바라보고 있으면 true, 그렇지 않으면 false를 반환한다. */ public boolean facingEast(); /** * Karel이 남쪽을 바라보고 있는지 확인다. * @return Karel이 남쪽을 바라보고 있으면 true, 그렇지 않으면 false를 반환한다. */ public boolean facingSouth() ; /** * Karel이 서쪽을 바라보고 있는지 확인다. * @return Karel이 서쪽을 바라보고 있으면 true, 그렇지 않으면 false를 반환한다. */ public boolean facingWest(); }