这个“贪吃蛇”在很多网上都有
为什么我运行的时候提示:语法错误和构造错误(syntax error on token(s) ,displaced construct(s) )
代码地址:
http://dev.csdn.net/Develop/article/28/81247.shtm
(因为说我帖子太长,没有贴出源码,就是上面地址里的代码,麻烦大家了!谢谢)

解决方案 »

  1.   

    我也刚学 JAVA```````   才编了个贪吃蛇
      

  2.   

    正常啊,可以啊.你再拷一次.import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.util.*;
    public class GreedSnake implements KeyListener
    {
    JFrame mainFrame;
    Canvas paintCanvas;
    JLabel labelScore;//计分牌
    SnakeModel snakeModel=null;// 蛇
    public static final int canvasWidth=200;
    public static final int canvasHeight=300;
    public static final int nodeWidth=10;
    public static final int nodeHeight=10;
    //----------------------------------------------------------------------
    //GreedSnake():初始化游戏界面
    //----------------------------------------------------------------------
    public GreedSnake()
    {
    //设置界面元素
    mainFrame=new JFrame("GreedSnake");
    Container cp=mainFrame.getContentPane();
    labelScore=new JLabel("Score:");
    cp.add(labelScore,BorderLayout.NORTH);
    paintCanvas=new Canvas();
    paintCanvas.setSize(canvasWidth+1,canvasHeight+1);
    paintCanvas.addKeyListener(this);
    cp.add(paintCanvas,BorderLayout.CENTER);
    JPanel panelButtom=new JPanel();
    panelButtom.setLayout(new BorderLayout());
    JLabel labelHelp;// 帮助信息
    labelHelp=new JLabel("PageUp, PageDown for speed;",JLabel.CENTER);
    panelButtom.add(labelHelp,BorderLayout.NORTH);
    labelHelp=new JLabel("ENTER or R or S for start;",JLabel.CENTER);
    panelButtom.add(labelHelp,BorderLayout.CENTER);
    labelHelp=new JLabel("SPACE or P for pause",JLabel.CENTER);
    panelButtom.add(labelHelp,BorderLayout.SOUTH);
    cp.add(panelButtom,BorderLayout.SOUTH);
    mainFrame.addKeyListener(this);
    mainFrame.pack();
    mainFrame.setResizable(false);
    mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    mainFrame.setVisible(true);
    begin();
    }
    //----------------------------------------------------------------------
    //keyPressed():按键检测
    //----------------------------------------------------------------------
    public void keyPressed(KeyEvent e)
    {
    int keyCode=e.getKeyCode();
    if(snakeModel.running) switch(keyCode)
    {
    case KeyEvent.VK_UP:
    snakeModel.changeDirection(SnakeModel.UP);
    break;
    case KeyEvent.VK_DOWN:
    snakeModel.changeDirection(SnakeModel.DOWN);
    break;
    case KeyEvent.VK_LEFT:
    snakeModel.changeDirection(SnakeModel.LEFT);
    break;
    case KeyEvent.VK_RIGHT:
    snakeModel.changeDirection(SnakeModel.RIGHT);
    break;
    case KeyEvent.VK_ADD:
    case KeyEvent.VK_PAGE_UP:
    snakeModel.speedUp();// 加速
    break;
    case KeyEvent.VK_SUBTRACT:
    case KeyEvent.VK_PAGE_DOWN:
    snakeModel.speedDown();// 减速
    break;
    case KeyEvent.VK_SPACE:
    case KeyEvent.VK_P:
    snakeModel.changePauseState();// 暂停或继续
    break;
    default:
    }
    //重新开始
    if(keyCode==KeyEvent.VK_R || keyCode==KeyEvent.VK_S
    || keyCode==KeyEvent.VK_ENTER)
    {
    snakeModel.running=false;
    begin();
    }
    }
    public void keyReleased(KeyEvent e)
    {
    }
    public void keyTyped(KeyEvent e)
    {
    }
    void repaint()
    {
    Graphics g=paintCanvas.getGraphics();g.setColor(Color.WHITE);
    g.fillRect(0,0,canvasWidth,canvasHeight);g.setColor(Color.BLACK);
    LinkedList na=snakeModel.nodeArray;
    Iterator it=na.iterator();
    while(it.hasNext())
    {
    Node n=(Node)it.next();
    drawNode(g,n);
    }g.setColor(Color.RED);
    Node n=snakeModel.food;
    drawNode(g,n);
    updateScore();
    }
    private void drawNode(Graphics g,Node n)
    {
    g.fillRect(n.x*nodeWidth,n.y*nodeHeight,nodeWidth-1,nodeHeight-1);
    }
    public void updateScore()
    {
    String s="Score: "+snakeModel.score;
    labelScore.setText(s);
    }
    void begin()
    {
    if(snakeModel==null||!snakeModel.running)
    {
    snakeModel=new SnakeModel(this,canvasWidth/nodeWidth,
    this.canvasHeight/nodeHeight);
    (new Thread(snakeModel)).start();
    }
    }
    public static void main(String[] args)
    {
    GreedSnake gs=new GreedSnake();
    }
    }class Node
    {
    int x;
    int y;
    Node(int x,int y)
    {
    this.x=x;
    this.y=y;
    }
    }
    class SnakeModel implements Runnable
    {
    GreedSnake gs;
    boolean[][] matrix;// 界面数据保存在数组里
    LinkedList nodeArray=new LinkedList();
    Node food;
    int maxX;//最大宽度
    int maxY;//最大长度
    int direction=2;//方向
    boolean running=false;
    int timeInterval=200;// 间隔时间(速度)
    double speedChangeRate=0.75;// 速度改变程度
    boolean paused=false;// 游戏状态
    int score=0;
    int countMove=0;
    // UP和DOWN是偶数,RIGHT和LEFT是奇数
    public static final int UP=2;
    public static final int DOWN=4;
    public static final int LEFT=1;
    public static final int RIGHT=3;
    public SnakeModel(GreedSnake gs,int maxX,int maxY)
    {
    this.gs=gs;
    this.maxX=maxX;
    this.maxY=maxY;
    matrix=new boolean[maxX][];
    for(int i=0;i<maxX;++i)
    {
    matrix[i]=new boolean[maxY];
    Arrays.fill(matrix[i],false);// 没有蛇和食物的地区置false
    }
    //初始化贪吃蛇
    int initArrayLength=maxX>20 ? 10 : maxX/2;
    for(int i=0;i<initArrayLength;++i)
    {
    int x=maxX/2+i;
    int y=maxY/2;
    nodeArray.addLast(new Node(x,y));
    matrix[x][y]=true;// 蛇身处置true
    }
    food=createFood();
    matrix[food.x][food.y]=true;// 食物处置true
    }
    public void changeDirection(int newDirection)
    {
    if(direction%2!=newDirection%2)// 避免冲突
    {
    direction=newDirection;
    }
    }public boolean moveOn()
    {
    Node n=(Node)nodeArray.getFirst();
    int x=n.x;
    int y=n.y;
    switch(direction)
    {
    case UP:
    y--;
    break;
    case DOWN:
    y++;
    break;
    case LEFT:
    x--;
    break;
    case RIGHT:
    x++;
    break;
    }
    if((0<=x&&x<maxX)&&(0<=y&&y<maxY))
    {
    if(matrix[x][y])// 吃到食物或者撞到身体
    {
    if(x==food.x&&y==food.y)// 吃到食物
    {
    nodeArray.addFirst(food);// 在头部加上一结点
    //计分规则与移动长度和速度有关
    int scoreGet=(10000-200*countMove)/timeInterval;
    score+=scoreGet>0 ? scoreGet : 10;
    countMove=0;
    food=createFood();
    matrix[food.x][food.y]=true;
    return true;
    }
    else return false;// 撞到身体
    }
    else//什么都没有碰到
    {
    nodeArray.addFirst(new Node(x,y));// 加上头部
    matrix[x][y]=true;
    n=(Node)nodeArray.removeLast();// 去掉尾部
    matrix[n.x][n.y]=false;
    countMove++;
    return true;
    }
    }
    return false;//越界(撞到墙壁)
    }
    public void run()
    {
    running=true;
    while(running)
    {
    try
    {
    Thread.sleep(timeInterval);
    }catch(Exception e)
    {
    break;
    }
    if(!paused)
    {
    if(moveOn())// 未结束
    {
    gs.repaint();
    }
    else//游戏结束
    {
    JOptionPane.showMessageDialog(null,"GAME OVER",
    "Game Over",JOptionPane.INFORMATION_MESSAGE);
    break;
    }
    }
    }
    running=false;
    }
    private Node createFood()
    {
    int x=0;
    int y=0;
    do
    {
    Random r=new Random();
    x=r.nextInt(maxX);
    y=r.nextInt(maxY);
    }while(matrix[x][y]);
    return new Node(x,y);
    }
    public void speedUp()
    {
    timeInterval*=speedChangeRate;
    }public void speedDown()
    {
    timeInterval/=speedChangeRate;
    }
    public void changePauseState()
    {
    paused=!paused;
    }
    }
      

  3.   

    我的BLOG有个J2ME版本的贪吃蛇,你可以去看看
      

  4.   

    谢谢galant2008(無賴),
    原来是中间的import没有去掉,昏Mailbomb(网络咖啡http://blog.csdn.net/mailbomb),
    我来你的blog上学习学习,呵