//here you goimport java.awt.*;
import java.awt.event.*;
import java.applet.*;public class Class1 extends Applet implements KeyListener
{
final int Row_Size=10;
final int Col_Size=20;
int maze [][] ={
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,2,2,2,1,2,2,2,2,1,2,2,2,2,2,2,2,2,2,1},
{1,2,1,2,1,2,1,1,2,1,2,1,1,1,1,2,1,1,2,1},
{1,2,2,2,2,2,2,1,2,1,2,2,2,2,2,2,1,1,2,1},
{1,1,1,1,2,1,2,1,2,1,1,1,1,1,1,2,2,2,2,1},
{1,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,1,1,1,1},
{1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,2,2,2,2,1},
{1,2,2,2,2,2,2,1,1,2,2,2,1,1,1,2,1,1,2,1},
{1,1,1,1,1,1,2,2,2,2,1,2,2,2,2,2,2,2,2,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}};
int cur_x,cur_y;
int repaint_x,repaint_y;
int repaint_width,repaint_height;
public void init(){
resize(450,130);
setBackground(Color.white);
setLayout(new CardLayout());
cur_x=9;
cur_y=5;addKeyListener(this);
}
public void paint(Graphics g){
for(int i=0;i<Row_Size;i++){
for(int j=0;j<Col_Size;j++){
switch(maze[i][j]){
case 0:g.setColor(Color.white);
            g.fillRect(j*20,i*20,20,20);
  break;
case 1:g.setColor(Color.black);
g.fillRect(j*20,i*20,20,20);
  break;
case 2:g.setColor(Color.black);
g.fillOval(j*20+8,i*20+8,5,5);
  break;
case 3:g.setColor(Color.red);
        g.fillArc(j*20,i*20,20,20,135,-270);
  break;
}
}
}
} public void keyTyped(KeyEvent p0)
 {
 } public  void keyReleased(KeyEvent p0)
  {
  }  public void keyPressed(KeyEvent p0)
//public boolean KeyDown(Event evt,int key)
{
switch(p0.getKeyCode()){
case KeyEvent.VK_HOME:if ( (maze[cur_y-1][cur_x]==5) || (maze[cur_y-1][cur_x]==2) )
{
maze[cur_y-1][cur_x]=3;
maze[cur_y][cur_x]=0;
cur_y--;
repaint_x=cur_x*20;
repaint_y=cur_y*20;
repaint_width=20;
repaint_height=40;
}
break;
case KeyEvent.VK_END:
if((maze[cur_y+1][cur_x]==0)||(maze[cur_y+1][cur_x]==2))
{maze[cur_y+1][cur_x]=3;
maze[cur_y][cur_x]=0;
cur_y++;
repaint_x=cur_x*20;
repaint_y=(cur_y-1)*20;
repaint_width=20;
repaint_height=40;
}
break;
case KeyEvent.VK_PAGE_DOWN:
if((maze[cur_y][cur_x+1]==0)||(maze[cur_y][cur_x+1]==2))
{maze[cur_y][cur_x+1]=3;
maze[cur_y][cur_x]=0;
cur_x++;
  repaint_x=(cur_x-1)*20;
repaint_y=cur_y*20;
repaint_width=40;
repaint_height=20;
}
break;
case KeyEvent.VK_DELETE:
if((maze[cur_y][cur_x-1]==0)||(maze[cur_y][cur_x-1]==2))
{maze[cur_y][cur_x-1]=3;
maze[cur_y][cur_x]=0;
cur_x--;
repaint_x=cur_x*20;
repaint_y=cur_y*20;
repaint_width=40;
repaint_height=20;
}
break;
default:
break;
}
repaint(repaint_x,repaint_y,repaint_width,repaint_height);
//return true;
}
}