import javax.swing.* ;
import java.awt.Color ;
import java.awt.Graphics ;
import java.awt.Point ;
import java.awt.event.* ;
{
public enum MoveDirection
{
UP, DOWN, LEFT, RIGHT, INITIAL
}
public boolean isRunnung = true ;
public MoveDirection currentDirection = MoveDirection.INITIAL ;
public static final int RECT_SIZE = 20 ;
public static final int SLEEP_SEC = 500 ;
{
thread.start ( ) ;
setSize( 500 , 500 ) ;
SnackPanel snack = new SnackPanel( ) ;
snack.
setBackground ( Color .
white ) ; add( snack ) ;
addKeyListener( this ) ;
setVisible( true ) ;
}
public static void main
( String [ ] args
) {
}
public class SnackPanel
extends JPanel {
@Override
public void paintComponent
( Graphics graphics
) {
super .paintComponent ( graphics ) ;
graphics.clearRect ( head.x , head.y , RECT_SIZE, RECT_SIZE ) ;
if ( currentDirection == MoveDirection.UP )
head.setLocation ( head.x , head.y - RECT_SIZE ) ;
else if ( currentDirection == MoveDirection.DOWN )
head.setLocation ( head.x , head.y + RECT_SIZE ) ;
else if ( currentDirection == MoveDirection.LEFT )
head.setLocation ( head.x - RECT_SIZE, head.y ) ;
else if ( currentDirection == MoveDirection.RIGHT )
head.setLocation ( head.x + RECT_SIZE, head.y ) ;
graphics.fillRect ( head.x , head.y , RECT_SIZE, RECT_SIZE ) ;
}
}
@Override
{
// TODO Auto-generated method stub
}
@Override
{
// TODO Auto-generated method stub
}
@Override
{
isRunnung = false ;
MoveDirection nextDirection = NextDirection( e ) ;
if ( nextDirection != null )
{
if ( currentDirection != nextDirection )
{
currentDirection = nextDirection ;
repaint( ) ;
}
}
isRunnung = true ;
}
public MoveDirection NextDirection
( KeyEvent e
) {
if ( e.getKeyChar ( ) == '5' )
return MoveDirection.UP ;
else if ( e.getKeyChar ( ) == '2' )
return MoveDirection.DOWN ;
else if ( e.getKeyChar ( ) == '1' )
return MoveDirection.LEFT ;
else if ( e.getKeyChar ( ) == '3' )
return MoveDirection.RIGHT ;
else
return null ;
}
@Override
public void run( )
{
while ( true )
{
if ( isRunnung )
repaint( ) ;
try
{
thread.sleep ( SLEEP_SEC ) ;
}
{
e.printStackTrace ( ) ;
}
}
}
}
aW1wb3J0IGphdmF4LnN3aW5nLiogOwppbXBvcnQgamF2YS5hd3QuQ29sb3IgOwppbXBvcnQgamF2YS5hd3QuR3JhcGhpY3MgOwppbXBvcnQgamF2YS5hd3QuUG9pbnQgOwppbXBvcnQgamF2YS5hd3QuZXZlbnQuKiA7CgpwdWJsaWMgY2xhc3MgVGltZXIgZXh0ZW5kcyBKRnJhbWUgaW1wbGVtZW50cyBLZXlMaXN0ZW5lciwgUnVubmFibGUKewogIHB1YmxpYyBlbnVtIE1vdmVEaXJlY3Rpb24KICB7CiAgICBVUCwgRE9XTiwgTEVGVCwgUklHSFQsIElOSVRJQUwKICB9CgogIHB1YmxpYyBib29sZWFuIGlzUnVubnVuZyA9IHRydWUgOwogIHB1YmxpYyBQb2ludCBoZWFkID0gbmV3IFBvaW50KCAxMDAsIDEwMCApIDsKICBwdWJsaWMgUG9pbnQgdGFpbCA9IG5ldyBQb2ludCggMTAwLCAxMDAgKSA7CiAgcHVibGljIE1vdmVEaXJlY3Rpb24gY3VycmVudERpcmVjdGlvbiA9IE1vdmVEaXJlY3Rpb24uSU5JVElBTCA7CiAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUkVDVF9TSVpFID0gMjAgOwogIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNMRUVQX1NFQyA9IDUwMCA7CgogIFRocmVhZCB0aHJlYWQgPSBudWxsIDsKCiAgcHVibGljIFRpbWVyKCkKICB7CiAgICB0aHJlYWQgPSBuZXcgVGhyZWFkKCB0aGlzICkgOwogICAgdGhyZWFkLnN0YXJ0KCkgOwogICAgc2V0RGVmYXVsdENsb3NlT3BlcmF0aW9uKCBXaW5kb3dDb25zdGFudHMuRVhJVF9PTl9DTE9TRSApIDsKICAgIHNldFNpemUoIDUwMCwgNTAwICkgOwogICAgU25hY2tQYW5lbCBzbmFjayA9IG5ldyBTbmFja1BhbmVsKCkgOwogICAgc25hY2suc2V0QmFja2dyb3VuZCggQ29sb3Iud2hpdGUgKSA7CiAgICBhZGQoIHNuYWNrICkgOwogICAgYWRkS2V5TGlzdGVuZXIoIHRoaXMgKSA7CiAgICBzZXRWaXNpYmxlKCB0cnVlICkgOwogIH0KCiAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oIFN0cmluZ1tdIGFyZ3MgKQogIHsKICAgIG5ldyBUaW1lcigpIDsKICB9CgogIHB1YmxpYyBjbGFzcyBTbmFja1BhbmVsIGV4dGVuZHMgSlBhbmVsCiAgewogICAgQE92ZXJyaWRlCiAgICBwdWJsaWMgdm9pZCBwYWludENvbXBvbmVudCggR3JhcGhpY3MgZ3JhcGhpY3MgKQogICAgewogICAgICAKICAgICAgc3VwZXIucGFpbnRDb21wb25lbnQoIGdyYXBoaWNzICkgOwogICAgICBncmFwaGljcy5jbGVhclJlY3QoIGhlYWQueCwgaGVhZC55LCBSRUNUX1NJWkUsIFJFQ1RfU0laRSApIDsKCiAgICAgIGlmICggY3VycmVudERpcmVjdGlvbiA9PSBNb3ZlRGlyZWN0aW9uLlVQICkKICAgICAgICBoZWFkLnNldExvY2F0aW9uKCBoZWFkLngsIGhlYWQueSAtIFJFQ1RfU0laRSApIDsKICAgICAgZWxzZSBpZiAoIGN1cnJlbnREaXJlY3Rpb24gPT0gTW92ZURpcmVjdGlvbi5ET1dOICkKICAgICAgICBoZWFkLnNldExvY2F0aW9uKCBoZWFkLngsIGhlYWQueSArIFJFQ1RfU0laRSApIDsKICAgICAgZWxzZSBpZiAoIGN1cnJlbnREaXJlY3Rpb24gPT0gTW92ZURpcmVjdGlvbi5MRUZUICkKICAgICAgICBoZWFkLnNldExvY2F0aW9uKCBoZWFkLnggLSBSRUNUX1NJWkUsIGhlYWQueSApIDsKICAgICAgZWxzZSBpZiAoIGN1cnJlbnREaXJlY3Rpb24gPT0gTW92ZURpcmVjdGlvbi5SSUdIVCApCiAgICAgICAgaGVhZC5zZXRMb2NhdGlvbiggaGVhZC54ICsgUkVDVF9TSVpFLCBoZWFkLnkgKSA7CgogICAgICBncmFwaGljcy5maWxsUmVjdCggaGVhZC54LCBoZWFkLnksIFJFQ1RfU0laRSwgUkVDVF9TSVpFICkgOwogICAgfQogIH0KCiAgQE92ZXJyaWRlCiAgcHVibGljIHZvaWQga2V5UHJlc3NlZCggS2V5RXZlbnQgZSApCiAgewogICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgoKICB9CgogIEBPdmVycmlkZQogIHB1YmxpYyB2b2lkIGtleVJlbGVhc2VkKCBLZXlFdmVudCBlICkKICB7CiAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCgogIH0KCiAgQE92ZXJyaWRlCiAgcHVibGljIHZvaWQga2V5VHlwZWQoIEtleUV2ZW50IGUgKQogIHsKICAgIGlzUnVubnVuZyA9IGZhbHNlIDsKICAgIE1vdmVEaXJlY3Rpb24gbmV4dERpcmVjdGlvbiA9IE5leHREaXJlY3Rpb24oIGUgKSA7CiAgICBpZiAoIG5leHREaXJlY3Rpb24gIT0gbnVsbCApCiAgICB7CiAgICAgIGlmICggY3VycmVudERpcmVjdGlvbiAhPSBuZXh0RGlyZWN0aW9uICkKICAgICAgewogICAgICAgIGN1cnJlbnREaXJlY3Rpb24gPSBuZXh0RGlyZWN0aW9uIDsKICAgICAgICByZXBhaW50KCkgOwogICAgICB9CiAgICB9CgogICAgaXNSdW5udW5nID0gdHJ1ZSA7CiAgfQoKICBwdWJsaWMgTW92ZURpcmVjdGlvbiBOZXh0RGlyZWN0aW9uKCBLZXlFdmVudCBlICkKICB7CgogICAgaWYgKCBlLmdldEtleUNoYXIoKSA9PSAnNScgKQogICAgICByZXR1cm4gTW92ZURpcmVjdGlvbi5VUCA7CiAgICBlbHNlIGlmICggZS5nZXRLZXlDaGFyKCkgPT0gJzInICkKICAgICAgcmV0dXJuIE1vdmVEaXJlY3Rpb24uRE9XTiA7CiAgICBlbHNlIGlmICggZS5nZXRLZXlDaGFyKCkgPT0gJzEnICkKICAgICAgcmV0dXJuIE1vdmVEaXJlY3Rpb24uTEVGVCA7CiAgICBlbHNlIGlmICggZS5nZXRLZXlDaGFyKCkgPT0gJzMnICkKICAgICAgcmV0dXJuIE1vdmVEaXJlY3Rpb24uUklHSFQgOwogICAgZWxzZQogICAgICByZXR1cm4gbnVsbCA7CgogIH0KCiAgQE92ZXJyaWRlCiAgcHVibGljIHZvaWQgcnVuKCkKICB7CiAgICB3aGlsZSAoIHRydWUgKQogICAgewogICAgICBpZiAoIGlzUnVubnVuZyApCiAgICAgICAgcmVwYWludCgpIDsKCiAgICAgIHRyeQogICAgICB7CiAgICAgICAgdGhyZWFkLnNsZWVwKCBTTEVFUF9TRUMgKSA7CiAgICAgIH0KICAgICAgY2F0Y2ggKCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlICkKICAgICAgewogICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCkgOwogICAgICB9CiAgICB9CiAgfQp9
compilation info
Main.java:7: class Timer is public, should be declared in a file named Timer.java
public class Timer extends JFrame implements KeyListener, Runnable
^
1 error
stdout