SnakeFrame:
import java.awt.*;
import java.awt.event.*;
public class SnakeFrame extends Frame {
  Snake snakeDemo = null;
  Food food = null;
  Boolean    flagRun = true;
  public SnakeFrame(){
    food =new Food();
    snakeDemo = new Snake(2,food);
    
  }
  public static void main(String[] args){
    new SnakeFrame().lauchFrame();
    
    
  }
  public void lauchFrame(){
    setBounds(200,300,405,430);
    setTitle("贪吃蛇");
    setVisible(true);
    //匿名类,完成windows的框的关闭
    addWindowListener(new WindowAdapter(){
      public void windowClosing(WindowEvent e) {
        System.exit(0);
      }
        
    });
    this.addKeyListener(new KeyMontitor());
    //start();
    new Thread(new ThreadPaint()).start();
  }

  public void paint(Graphics g) {
    flagRun = snakeDemo.drawSnake(g);
    food.drawFood(g);
  }
  //直接在主进程里运行,对上下左右的反应比较慢,所以改用线程实现,经测试感觉也差不多
  /*public void start() {
    while(true){
        
      repaint();
      try {
        Thread.sleep(200);
      } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
    
  }
  */

    
  //监听键盘的上下左右键
  private class KeyMontitor extends KeyAdapter{

    public void keyPressed(KeyEvent e) {
      snakeDemo.keyPressed(e);
        
    }
    
  }
  class ThreadPaint implements Runnable{

    public void run() {
      while(flagRun){
        repaint();
        try {
          Thread.sleep(250);
        } catch (InterruptedException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
      }
        
        
    }
    
  }
}
Snake:
import java.util.*;
import java.util.List;//awt和util下都有List,需要指明
import java.awt.*;
import java.awt.event.KeyEvent;


public class Snake {
  List<Point> snakes =    null;
  Food food = null;
  enum Direction{up,down,left,right};
  Direction snakeDirection = Direction.right;
  final static int rectFrameLength = 20;
  public Snake(int snakeLength,Food food){
    snakes = new ArrayList<Point>();
    this.food =food;
    for(int i=0;i< snakeLength;i++){
      snakes.add(i, new Point(i * rectFrameLength,0));
    }
  }
  public boolean drawSnake(Graphics g){
    Color x = g.getColor();
    boolean flagRun =true ;
    g.setColor(Color.blue);
    g.fillRect(snakes.get(snakes.size()-1).x +5,snakes.get(snakes.size()-1 ).y + 30,rectFrameLength, rectFrameLength);
    for(int i = snakes.size() -2 ; i >= 0 ; i--){
      g.setColor(Color.red);
      g.drawRect(snakes.get(i).x +5,snakes.get(i).y + 30,rectFrameLength, rectFrameLength);
    }
    move();
    isEat();
    flagRun=!isDead();
    g.setColor(x);
    return flagRun ;
  }

  public void move(){
    //从蛇尾开始依次复制
    for(int i = 0; i < snakes.size()-1;i++){
      snakes.get(i).x =snakes.get(i+1).x;
      snakes.get(i).y =snakes.get(i+1).y;
    }
    //只需判断蛇头
    switch(snakeDirection){
    case right: snakes.get(snakes.size()-1).x += rectFrameLength;break;
        
    case left:    snakes.get(snakes.size()-1).x -= rectFrameLength;break;
        
    case up:  snakes.get(snakes.size()-1).y -= rectFrameLength;break;
    
    case down:    snakes.get(snakes.size()-1).y += rectFrameLength;break;

    }
  }
  public void isEat(){
    Point p= food.getP();
    int length = snakes.size();
    
    boolean a = snakes.get(snakes.size()-1).x == p.x;
    boolean b= snakes.get(snakes.size()-1).y == p.y;
    if(a && b){
      switch(snakeDirection){
      case right: p.x += rectFrameLength;break;
        
      case left:    p.x -= rectFrameLength;break;
        
      case up:  p.y -= rectFrameLength;break;
        
      case down:    p.y += rectFrameLength;break;
      }
      snakes.add(length,new Point(p));
      while(isOnBody()){
        
      }
        
    }
    
    
  }
  private boolean isOnBody(){
    for(int i=0; i<snakes.size();i++){
      if(food.foodRandom().equals(snakes.get(i))){
        return true;
      }
    }
    return false;
  }
  public boolean isDead(){
    for(int i=0; i<snakes.size()-1;i++){
      if(snakes.get(snakes.size()-1).equals(snakes.get(i))){
        return true;
      }
      if( snakes.get(snakes.size()-1).x > 415 ||    snakes.get(snakes.size()-1).y > 400 ){
        return true;
      }
      if( snakes.get(snakes.size()-1).y < -20 ||    snakes.get(snakes.size()-1).x < -20){
        return true;
      }
    }
    return false;
  }
  public void keyPressed(KeyEvent e){
    int keyCode=e.getKeyCode();
    switch(keyCode){
      case KeyEvent.VK_DOWN:    snakeDirection = Direction.down;break;
      case KeyEvent.VK_UP:        snakeDirection = Direction.up;break;
      case KeyEvent.VK_LEFT:    snakeDirection = Direction.left;break;
      case KeyEvent.VK_RIGHT: snakeDirection = Direction.right;break;
    }
  }
}
Food:
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class Food {
  private Point food=null;
  final static int rectFrameLength = 20;
  public Food(){
    foodRandom();
  }
  public Point foodRandom(){
    int x = (int)(Math.random()*20);
    int y = (int)(Math.random()*20);
    return food = new Point(x* rectFrameLength,y* rectFrameLength);
  }
  public void drawFood(Graphics g){
    Color x = g.getColor();
    g.setColor(Color.red);
    g.fillRect(food.x+5, food.y+30, rectFrameLength, rectFrameLength);
    g.setColor(x);
  }
  public Point getP(){
    return food;
  }
}
只实现了一些简单的功能。