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()); } }