• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    貪吃蛇Java源碼分析

    發布: 2008-8-07 15:12 | 作者: 網絡轉載 | 來源: 軟件研發之窗 | 查看: 325次 | 進入軟件測試論壇討論

    領測軟件測試網 關鍵字:貪吃蛇Java源碼import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.util.*;
    //=============================================
    //Main Class
    //=============================================
    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();
    }
    }
    //----------------------------------------------------------------------
    //keyReleased():空函數
    //----------------------------------------------------------------------
    public void keyReleased(KeyEvent e)
    {
    }
    //----------------------------------------------------------------------
    //keyTyped():空函數
    //----------------------------------------------------------------------
    public void keyTyped(KeyEvent e)
    {
    }
    //----------------------------------------------------------------------
    //repaint():繪制游戲界面(包括蛇和食物)
    //----------------------------------------------------------------------
    void repaint()
    {
    Graphics g=paintCanvas.getGraphics();
    //draw background
    g.setColor(Color.WHITE);
    g.fillRect(0,0,canvasWidth,canvasHeight);
    //draw the snake
    g.setColor(Color.BLACK);
    LinkedList na=snakeModel.nodeArray;
    Iterator it=na.iterator();
    while(it.hasNext())
    {
    Node n=(Node)it.next();
    drawNode(g,n);
    }
    // draw the food
    g.setColor(Color.RED);
    Node n=snakeModel.food;
    drawNode(g,n);
    updateScore();
    }
    //----------------------------------------------------------------------
    //drawNode():繪畫某一結點(蛇身或食物)
    //----------------------------------------------------------------------
    private void drawNode(Graphics g,Node n)
    {
    g.fillRect(n.x*nodeWidth,n.y*nodeHeight,nodeWidth-1,nodeHeight-1);
    }
    //----------------------------------------------------------------------
    //updateScore():改變計分牌
    //----------------------------------------------------------------------
    public void updateScore()
    {
    String s="Score: "+snakeModel.score;
    labelScore.setText(s);
    }
    //----------------------------------------------------------------------
    //begin():游戲開始,放置貪吃蛇
    //----------------------------------------------------------------------
    void begin()
    {
    if(snakeModel==null||!snakeModel.running)
    {
    snakeModel=new SnakeModel(this,canvasWidth/nodeWidth,
    this.canvasHeight/nodeHeight);
    (new Thread(snakeModel)).start();
    }
    }
    //----------------------------------------------------------------------
    //main():主函數
    //----------------------------------------------------------------------
    public static void main(String[] args)
    {
    GreedSnake gs=new GreedSnake();
    }
    }
    /**************************************************************************

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    TAG: java JAVA Java 貪吃 源碼

    21/212>

    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>