KeyEventKarelProgram2 (KarelOOP2)

Retired DISLab
이동: 둘러보기, 찾기
/*
 * Copyright 2020 Sangwon Park @ DISLab, HUFS
 */
package cp.java.week11.thread;
 
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.LinkedList;
 
import hufs.dislab.karel.IKarelProgram;
import hufs.dislab.karel.SimpleKarel;
 
class RunnableKarel2 extends SimpleKarel {
 
	private LinkedList<String> msgQ = new LinkedList<String>();
 
	public synchronized void addMsg(String msg) {
		msgQ.addLast(msg);
	}
 
	public synchronized String removeMsg() {
		return msgQ.isEmpty() ? null : msgQ.removeFirst();
	}
 
	@Override
	public void run() {
		while (true) {
			String msg = removeMsg();
			if (msg == null)
				continue;
			if (msg.equals("move")) {
				if (frontIsClear())
					move();
				if (beepersPresent())
					pickBeeper();
			} else if (msg.equals("turnLeft")) {
				turnLeft();
			} else if (msg.equals("turnRight")) {
				turnRight();
			} else if (msg.equals("turnAround")) {
				turnAround();
			}
		}
	}
}
 
@SuppressWarnings("serial")
public class KeyEventKarelProgram2 extends IKarelProgram {
	RunnableKarel2 karel;
 
	@Override
	protected void onInit() {
		karel = (RunnableKarel2) getIKarel();
	}
 
	@Override
	protected void onStart() {
		System.out.println(Thread.currentThread());
		Thread th = new Thread(karel);
		th.start();
 
		this.addWorldKeyListener(new KeyListener() {
 
			void print(KeyEvent e) {
				String threadstr = Thread.currentThread().toString();
				threadstr = threadstr.substring(0, threadstr.indexOf(",")) + "]";
				String k2str = karel.toString();
				k2str = k2str.substring(k2str.lastIndexOf('.') + 1);
				String estr = e.toString();
				estr = estr.substring(estr.indexOf("["));
				estr = estr.substring(0, estr.indexOf(",keyLocation")) + "]";
 
				System.out.println(threadstr + ":" + k2str + ":" + estr);
			}
 
			@Override
			public void keyTyped(KeyEvent e) {
			}
 
			@Override
			public void keyPressed(KeyEvent e) {
				print(e);
 
				switch (e.getKeyCode()) {
				case KeyEvent.VK_UP :
					karel.addMsg("move");
					break;
				case KeyEvent.VK_LEFT :
					karel.addMsg("turnLeft");
					break;
				case KeyEvent.VK_RIGHT :
					karel.addMsg("turnRight");
					break;
				case KeyEvent.VK_DOWN :
					karel.addMsg("turnAround");
					break;
				}
			}
 
			@Override
			public void keyReleased(KeyEvent e) {
			}
 
		});
	}
 
	public static void main(String[] args) {
		IKarelProgram.main(args, new RunnableKarel2());
	}
}
개인 도구
이름공간
변수
행위
둘러보기
구성원
연구
연구실
기타
도구모음
인쇄/내보내기