<del id="d4fwx"><form id="d4fwx"></form></del>
      <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

            <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
          • 貪吃蛇雙人源代碼java 貪吃蛇的源代碼

            求java貪吃蛇的編程,并有注釋

            J2ME貪吃蛇源代碼——200行左右,包含詳細注釋 package snake;import javax.microedition.midlet.*;

            創(chuàng)新互聯(lián)公司專注于滿城網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供滿城營銷型網(wǎng)站建設(shè),滿城網(wǎng)站制作、滿城網(wǎng)頁設(shè)計、滿城網(wǎng)站官網(wǎng)定制、重慶小程序開發(fā)服務(wù),打造滿城網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供滿城網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

            import javax.microedition.lcdui.*;public class SnakeMIDlet extends MIDlet {

            SnakeCanvas displayable = new SnakeCanvas();

            public SnakeMIDlet() {

            Display.getDisplay(this).setCurrent(displayable);

            }public void startApp() {}public void pauseApp() {}public void destroyApp(boolean unconditional) {}}//文件名:SnakeCanvas.javapackage snake;import java.util.*;

            import javax.microedition.lcdui.*;/**

            * 貪吃蛇游戲

            */

            public class SnakeCanvas extends Canvas implements Runnable{

            /**存儲貪吃蛇節(jié)點坐標,其中第二維下標為0的代表x坐標,第二維下標是1的代表y坐標*/

            int[][] snake = new int[200][2];

            /**已經(jīng)使用的節(jié)點數(shù)量*/

            int snakeNum;

            /**貪吃蛇運動方向,0代表向上,1代表向下,2代表向左,3代表向右*/

            int direction;

            /*移動方向*/

            /**向上*/

            private final int DIRECTION_UP = 0;

            /**向下*/

            private final int DIRECTION_DOWN = 1;

            /**向左*/

            private final int DIRECTION_LEFT = 2;

            /**向右*/

            private final int DIRECTION_RIGHT = 3;/**游戲區(qū)域?qū)挾?/

            int width;

            /**游戲區(qū)域高度*/

            int height;/**蛇身單元寬度*/

            private final byte SNAKEWIDTH = 4;/**是否處于暫停狀態(tài),true代表暫停*/

            boolean isPaused = false;

            /**是否處于運行狀態(tài),true代表運行*/

            boolean isRun = true;/**時間間隔*/

            private final int SLEEP_TIME = 300;

            /**食物的X坐標*/

            int foodX;

            /**食物的Y坐標*/

            int foodY;

            /**食物的閃爍控制*/

            boolean b = true;

            /**Random對象*/

            Random random = new Random();

            public SnakeCanvas() {

            //初始化

            init();

            width = this.getWidth();

            height = this.getHeight();

            //啟動線程

            new Thread(this).start();

            }/**

            * 初始化開始數(shù)據(jù)

            */

            private void init(){

            //初始化節(jié)點數(shù)量

            snakeNum = 7;

            //初始化節(jié)點數(shù)據(jù)

            for(int i = 0;i snakeNum;i++){

            snake[i][0] = 100 - SNAKEWIDTH * i;

            snake[i][1] = 40;

            }

            //初始化移動方向

            direction = DIRECTION_RIGHT;

            //初始化食物坐標

            foodX = 100;

            foodY = 100;

            }protected void paint(Graphics g) {

            //清屏

            g.setColor(0xffffff);

            g.fillRect(0,0,width,height);

            g.setColor(0);//繪制蛇身

            for(int i = 0;i snakeNum;i++){

            g.fillRect(snake[i][0],snake[i][1],SNAKEWIDTH,SNAKEWIDTH);

            }

            //繪制食物

            if(b){

            g.fillRect(foodX,foodY,SNAKEWIDTH,SNAKEWIDTH);

            }

            }private void move(int direction){

            //蛇身移動

            for(int i = snakeNum - 1;i 0;i--){

            snake[i][0] = snake[i - 1][0];

            snake[i][1] = snake[i - 1][1];

            }//第一個單元格移動

            switch(direction){

            case DIRECTION_UP:

            snake[0][1] = snake[0][1] - SNAKEWIDTH;

            break;

            case DIRECTION_DOWN:

            snake[0][1] = snake[0][1] + SNAKEWIDTH;

            break;

            case DIRECTION_LEFT:

            snake[0][0] = snake[0][0] - SNAKEWIDTH;

            break;

            case DIRECTION_RIGHT:

            snake[0][0] = snake[0][0] + SNAKEWIDTH;

            break;

            }

            }

            /**

            * 吃掉食物,自身增長

            */

            private void eatFood(){

            //判別蛇頭是否和食物重疊

            if(snake[0][0] == foodX snake[0][1] == foodY){

            snakeNum++;

            generateFood();

            }

            }

            /**

            * 產(chǎn)生食物

            * 說明:食物的坐標必須位于屏幕內(nèi),且不能和蛇身重合

            */

            private void generateFood(){

            while(true){

            foodX = Math.abs(random.nextInt() % (width - SNAKEWIDTH + 1))

            / SNAKEWIDTH * SNAKEWIDTH;

            foodY = Math.abs(random.nextInt() % (height - SNAKEWIDTH + 1))

            / SNAKEWIDTH * SNAKEWIDTH;

            boolean b = true;

            for(int i = 0;i snakeNum;i++){

            if(foodX == snake[i][0] snake[i][1] == foodY){

            b = false;

            break;

            }

            }

            if(b){

            break;

            }

            }

            }

            /**

            * 判斷游戲是否結(jié)束

            * 結(jié)束條件:

            * 1、蛇頭超出邊界

            * 2、蛇頭碰到自身

            */

            private boolean isGameOver(){

            //邊界判別

            if(snake[0][0] 0 || snake[0][0] (width - SNAKEWIDTH) ||

            snake[0][1] 0 || snake[0][1] (height - SNAKEWIDTH)){

            return true;

            }

            //碰到自身

            for(int i = 4;i snakeNum;i++){

            if(snake[0][0] == snake[i][0]

            snake[0][1] == snake[i][1]){

            return true;

            }

            }

            return false;

            }/**

            * 事件處理

            */

            public void keyPressed(int keyCode){

            int action = this.getGameAction(keyCode);

            //改變方向

            switch(action){

            case UP:

            if(direction != DIRECTION_DOWN){

            direction = DIRECTION_UP;

            }

            break;

            case DOWN:

            if(direction != DIRECTION_UP){

            direction = DIRECTION_DOWN;

            }

            break;

            case LEFT:

            if(direction != DIRECTION_RIGHT){

            direction = DIRECTION_LEFT;

            }

            break;

            case RIGHT:

            if(direction != DIRECTION_LEFT){

            direction = DIRECTION_RIGHT;

            }

            break;

            case FIRE:

            //暫停和繼續(xù)

            isPaused = !isPaused;

            break;

            }

            }/**

            * 線程方法

            * 使用精確延時

            */

            public void run(){

            try{

            while (isRun) {

            //開始時間

            long start = System.currentTimeMillis();

            if(!isPaused){

            //吃食物

            eatFood();

            //移動

            move(direction);

            //結(jié)束游戲

            if(isGameOver()){

            break;

            }

            //控制閃爍

            b = !b;

            }

            //重新繪制

            repaint();

            long end = System.currentTimeMillis();

            //延時

            if(end - start SLEEP_TIME){

            Thread.sleep(SLEEP_TIME - (end - start));

            }

            }

            }catch(Exception e){}

            }

            }

            求一段JAVA編寫的貪吃蛇小程序源代碼

            用MVC方式實現(xiàn)的貪吃蛇游戲,共有4個類。運行GreedSnake運行即可。主要是觀察者模式的使用,我已經(jīng)添加了很多注釋了。

            1、

            /*

            * 程序名稱:貪食蛇

            * 原作者:BigF

            * 修改者:algo

            * 說明:我以前也用C寫過這個程序,現(xiàn)在看到BigF用Java寫的這個,發(fā)現(xiàn)雖然作者自稱是Java的初學者,

            * 但是明顯編寫程序的素養(yǎng)不錯,程序結(jié)構(gòu)寫得很清晰,有些細微得地方也寫得很簡潔,一時興起之

            * 下,我認真解讀了這個程序,發(fā)現(xiàn)數(shù)據(jù)和表現(xiàn)分開得很好,而我近日正在學習MVC設(shè)計模式,

            * 因此嘗試把程序得結(jié)構(gòu)改了一下,用MVC模式來實現(xiàn),對源程序得改動不多。

            * 我同時也為程序增加了一些自己理解得注釋,希望對大家閱讀有幫助。

            */

            package mvcTest;

            /**

            * @author WangYu

            * @version 1.0

            * Description:

            * /pre

            * Create on :Date :2005-6-13 Time:15:57:16

            * LastModified:

            * History:

            */

            public class GreedSnake {

            public static void main(String[] args) {

            SnakeModel model = new SnakeModel(20,30);

            SnakeControl control = new SnakeControl(model);

            SnakeView view = new SnakeView(model,control);

            //添加一個觀察者,讓view成為model的觀察者

            model.addObserver(view);

            (new Thread(model)).start();

            }

            }

            -------------------------------------------------------------

            2、

            package mvcTest;

            //SnakeControl.java

            import java.awt.event.KeyEvent;

            import java.awt.event.KeyListener;

            /**

            * MVC中的Controler,負責接收用戶的操作,并把用戶操作通知Model

            */

            public class SnakeControl implements KeyListener{

            SnakeModel model;

            public SnakeControl(SnakeModel model){

            this.model = model;

            }

            public void keyPressed(KeyEvent e) {

            int keyCode = e.getKeyCode();

            if (model.running){ // 運行狀態(tài)下,處理的按鍵

            switch (keyCode) {

            case KeyEvent.VK_UP:

            model.changeDirection(SnakeModel.UP);

            break;

            case KeyEvent.VK_DOWN:

            model.changeDirection(SnakeModel.DOWN);

            break;

            case KeyEvent.VK_LEFT:

            model.changeDirection(SnakeModel.LEFT);

            break;

            case KeyEvent.VK_RIGHT:

            model.changeDirection(SnakeModel.RIGHT);

            break;

            case KeyEvent.VK_ADD:

            case KeyEvent.VK_PAGE_UP:

            model.speedUp();

            break;

            case KeyEvent.VK_SUBTRACT:

            case KeyEvent.VK_PAGE_DOWN:

            model.speedDown();

            break;

            case KeyEvent.VK_SPACE:

            case KeyEvent.VK_P:

            model.changePauseState();

            break;

            default:

            }

            }

            // 任何情況下處理的按鍵,按鍵導(dǎo)致重新啟動游戲

            if (keyCode == KeyEvent.VK_R ||

            keyCode == KeyEvent.VK_S ||

            keyCode == KeyEvent.VK_ENTER) {

            model.reset();

            }

            }

            public void keyReleased(KeyEvent e) {

            }

            public void keyTyped(KeyEvent e) {

            }

            }

            -------------------------------------------------------------

            3、

            /*

            *

            */

            package mvcTest;

            /**

            * 游戲的Model類,負責所有游戲相關(guān)數(shù)據(jù)及運行

            * @author WangYu

            * @version 1.0

            * Description:

            * /pre

            * Create on :Date :2005-6-13 Time:15:58:33

            * LastModified:

            * History:

            */

            //SnakeModel.java

            import javax.swing.*;

            import java.util.Arrays;

            import java.util.LinkedList;

            import java.util.Observable;

            import java.util.Random;

            /**

            * 游戲的Model類,負責所有游戲相關(guān)數(shù)據(jù)及運行

            */

            class SnakeModel extends Observable implements Runnable {

            boolean[][] matrix; // 指示位置上有沒蛇體或食物

            LinkedList nodeArray = new LinkedList(); // 蛇體

            Node food;

            int maxX;

            int maxY;

            int direction = 2; // 蛇運行的方向

            boolean running = false; // 運行狀態(tài)

            int timeInterval = 200; // 時間間隔,毫秒

            double speedChangeRate = 0.75; // 每次得速度變化率

            boolean paused = false; // 暫停標志

            int score = 0; // 得分

            int countMove = 0; // 吃到食物前移動的次數(shù)

            // UP and DOWN should be even

            // RIGHT and LEFT should be odd

            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( int maxX, int maxY) {

            this.maxX = maxX;

            this.maxY = maxY;

            reset();

            }

            public void reset(){

            direction = SnakeModel.UP; // 蛇運行的方向

            timeInterval = 200; // 時間間隔,毫秒

            paused = false; // 暫停標志

            score = 0; // 得分

            countMove = 0; // 吃到食物前移動的次數(shù)

            // initial matirx, 全部清0

            matrix = new boolean[maxX][];

            for (int i = 0; i maxX; ++i) {

            matrix[i] = new boolean[maxY];

            Arrays.fill(matrix[i], false);

            }

            // initial the snake

            // 初始化蛇體,如果橫向位置超過20個,長度為10,否則為橫向位置的一半

            int initArrayLength = maxX 20 ? 10 : maxX / 2;

            nodeArray.clear();

            for (int i = 0; i initArrayLength; ++i) {

            int x = maxX / 2 + i;//maxX被初始化為20

            int y = maxY / 2; //maxY被初始化為30

            //nodeArray[x,y]: [10,15]-[11,15]-[12,15]~~[20,15]

            //默認的運行方向向上,所以游戲一開始nodeArray就變?yōu)椋?/p>

            // [10,14]-[10,15]-[11,15]-[12,15]~~[19,15]

            nodeArray.addLast(new Node(x, y));

            matrix[x][y] = true;

            }

            // 創(chuàng)建食物

            food = createFood();

            matrix[food.x][food.y] = true;

            }

            public void changeDirection(int newDirection) {

            // 改變的方向不能與原來方向同向或反向

            if (direction % 2 != newDirection % 2) {

            direction = newDirection;

            }

            }

            /**

            * 運行一次

            * @return

            */

            public boolean moveOn() {

            Node n = (Node) nodeArray.getFirst();

            int x = n.x;

            int y = n.y;

            // 根據(jù)方向增減坐標值

            switch (direction) {

            case UP:

            y--;

            break;

            case DOWN:

            y++;

            break;

            case LEFT:

            x--;

            break;

            case RIGHT:

            x++;

            break;

            }

            // 如果新坐標落在有效范圍內(nèi),則進行處理

            if ((0 = x x maxX) (0 = y y maxY)) {

            if (matrix[x][y]) { // 如果新坐標的點上有東西(蛇體或者食物)

            if (x == food.x y == food.y) { // 吃到食物,成功

            nodeArray.addFirst(food); // 從蛇頭贈長

            // 分數(shù)規(guī)則,與移動改變方向的次數(shù)和速度兩個元素有關(guān)

            int scoreGet = (10000 - 200 * countMove) / timeInterval;

            score += scoreGet 0 ? scoreGet : 10;

            countMove = 0;

            food = createFood(); // 創(chuàng)建新的食物

            matrix[food.x][food.y] = true; // 設(shè)置食物所在位置

            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()) {

            setChanged(); // Model通知View數(shù)據(jù)已經(jīng)更新

            notifyObservers();

            } else {

            JOptionPane.showMessageDialog(null,

            "you failed",

            "Game Over",

            JOptionPane.INFORMATION_MESSAGE);

            break;

            }

            }

            }

            running = false;

            }

            private Node createFood() {

            int x = 0;

            int y = 0;

            // 隨機獲取一個有效區(qū)域內(nèi)的與蛇體和食物不重疊的位置

            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;

            }

            public String toString() {

            String result = "";

            for (int i = 0; i nodeArray.size(); ++i) {

            Node n = (Node) nodeArray.get(i);

            result += "[" + n.x + "," + n.y + "]";

            }

            return result;

            }

            }

            class Node {

            int x;

            int y;

            Node(int x, int y) {

            this.x = x;

            this.y = y;

            }

            }

            ------------------------------------------------------------

            4、

            package mvcTest;

            //SnakeView.java

            import javax.swing.*;

            import java.awt.*;

            import java.util.Iterator;

            import java.util.LinkedList;

            import java.util.Observable;

            import java.util.Observer;

            /**

            * MVC模式中得Viewer,只負責對數(shù)據(jù)的顯示,而不用理會游戲的控制邏輯

            */

            public class SnakeView implements Observer {

            SnakeControl control = null;

            SnakeModel model = null;

            JFrame mainFrame;

            Canvas paintCanvas;

            JLabel labelScore;

            public static final int canvasWidth = 200;

            public static final int canvasHeight = 300;

            public static final int nodeWidth = 10;

            public static final int nodeHeight = 10;

            public SnakeView(SnakeModel model, SnakeControl control) {

            this.model = model;

            this.control = control;

            mainFrame = new JFrame("GreedSnake");

            Container cp = mainFrame.getContentPane();

            // 創(chuàng)建頂部的分數(shù)顯示

            labelScore = new JLabel("Score:");

            cp.add(labelScore, BorderLayout.NORTH);

            // 創(chuàng)建中間的游戲顯示區(qū)域

            paintCanvas = new Canvas();

            paintCanvas.setSize(canvasWidth + 1, canvasHeight + 1);

            paintCanvas.addKeyListener(control);

            cp.add(paintCanvas, BorderLayout.CENTER);

            // 創(chuàng)建底下的幫助欄

            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(control);

            mainFrame.pack();

            mainFrame.setResizable(false);

            mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            mainFrame.setVisible(true);

            }

            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 = model.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 = model.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: " + model.score;

            labelScore.setText(s);

            }

            public void update(Observable o, Object arg) {

            repaint();

            }

            }

            希望采納

            高分跪求用Java編寫的貪吃蛇源代碼!具體要求看問題補充!急急急[email protected]

            import java.awt.Graphics;

            import java.awt.Toolkit;

            import java.awt.event.ActionEvent;

            import java.awt.event.ActionListener;

            import java.awt.event.InputEvent;

            import java.awt.event.KeyEvent;

            import java.awt.event.KeyListener;

            import javax.swing.JCheckBoxMenuItem;

            import javax.swing.JFrame;

            import javax.swing.JMenu;

            import javax.swing.JMenuBar;

            import javax.swing.JMenuItem;

            import javax.swing.JOptionPane;

            import javax.swing.KeyStroke;

            public class 貪吃蛇 extends JFrame implements ActionListener, KeyListener,Runnable {

            /**

            *

            */

            private static final long serialVersionUID = 1L;

            private JMenuBar menuBar;

            private JMenu youXiMenu,nanDuMenu,fenShuMenu,guanYuMenu;

            private JMenuItem kaiShiYouXi,exitItem,zuoZheItem,fenShuItem;

            private JCheckBoxMenuItem cJianDan,cPuTong,cKunNan;

            private int length = 6;

            private Toolkit toolkit;

            private int i,x,y,z,objectX,objectY,object=0,growth=0,time;//bojectX,Y

            private int m[]=new int[50];

            private int n[]=new int[50];

            private Thread she = null;

            private int life=0;

            private int foods = 0;

            private int fenshu=0;

            public void run(){

            time=500;

            for(i=0;i=length-1;i++)

            {

            m[i]=90-i*10;n[i]=60;

            }

            x=m[0];

            y=n[0];

            z=4;

            while(she!=null)

            {

            check();

            try

            {

            Thread.sleep(time);

            }

            catch(Exception ee)

            {

            System.out.println(z+"");

            }

            }

            }

            public 貪吃蛇() {

            setVisible(true);

            menuBar = new JMenuBar();

            toolkit=getToolkit();

            youXiMenu = new JMenu("游戲");

            kaiShiYouXi = new JMenuItem("開始游戲");

            exitItem = new JMenuItem("退出游戲");

            nanDuMenu = new JMenu("困難程度");

            cJianDan = new JCheckBoxMenuItem("簡單");

            cPuTong = new JCheckBoxMenuItem("普通");

            cKunNan = new JCheckBoxMenuItem("困難");

            fenShuMenu = new JMenu("積分排行");

            fenShuItem = new JMenuItem("最高記錄");

            guanYuMenu = new JMenu("關(guān)于");

            zuoZheItem = new JMenuItem("關(guān)于作者");

            guanYuMenu.add(zuoZheItem);

            nanDuMenu.add(cJianDan);

            nanDuMenu.add(cPuTong);

            nanDuMenu.add(cKunNan);

            fenShuMenu.add(fenShuItem);

            youXiMenu.add(kaiShiYouXi);

            youXiMenu.add(exitItem);

            menuBar.add(youXiMenu);

            menuBar.add(nanDuMenu);

            menuBar.add(fenShuMenu);

            menuBar.add(guanYuMenu);

            zuoZheItem.addActionListener(this);

            kaiShiYouXi.addActionListener(this);

            exitItem.addActionListener(this);

            addKeyListener(this);

            fenShuItem.addActionListener(this);

            KeyStroke keyOpen = KeyStroke.getKeyStroke('O',InputEvent.CTRL_DOWN_MASK);

            kaiShiYouXi.setAccelerator(keyOpen);

            KeyStroke keyExit = KeyStroke.getKeyStroke('X',InputEvent.CTRL_DOWN_MASK);

            exitItem.setAccelerator(keyExit);

            setJMenuBar(menuBar);

            setTitle("貪吃蛇");

            setResizable(false);

            setBounds(300,200,400,400);

            validate();

            setDefaultCloseOperation(EXIT_ON_CLOSE);

            }

            public static void main(String args[]) {

            new 貪吃蛇();

            }

            public void actionPerformed(ActionEvent e){

            if(e.getSource()==kaiShiYouXi)

            {

            length = 6;

            life = 0;

            foods = 0;

            if(she==null)

            {

            she=new Thread(this);

            she.start();

            }

            else if(she!=null)

            {

            she=null;

            she= new Thread(this);

            she.start();

            }

            }

            if(e.getSource()==exitItem)

            {

            System.exit(0);

            }

            if(e.getSource()==zuoZheItem)

            {

            JOptionPane.showMessageDialog(this, "孤獨的野狼制作"+"\n\n"+" "+"QQ號:2442701497"+"\n");

            }

            if(e.getSource()==fenShuItem)

            {

            JOptionPane.showMessageDialog(this,"最高記錄為"+fenshu+"");

            }

            }

            public void check(){

            isDead();

            if(she!=null)

            {

            if(growth==0)

            {

            reform(); //得到食物

            }

            else

            {

            upgrowth(); //生成食物

            }

            if(x==objectXy==objectY)

            {

            object=0;

            growth=1;

            toolkit.beep();

            }

            if(object==0)

            {

            object=1;

            objectX=(int)Math.floor(Math.random()*39)*10;

            objectY=(int)Math.floor(Math.random()*29)*10+50;

            }

            this.repaint(); //重繪

            }

            }

            void isDead()

            {

            //判斷游戲是否結(jié)束的方法

            if(z==4)

            {

            x=x+10;

            }

            else if(z==3)

            {

            x=x-10;

            }

            else if(z==2)

            {

            y=y+10;

            }

            else if(z==1)

            {

            y=y-10;

            }

            if(x0||x390||y50||y390)

            {

            she=null;

            }

            for(i=1;ilength;i++)

            {

            if(m[i]==xn[i]==y)

            {

            she=null;

            }

            }

            }

            public void upgrowth()

            {

            //當蛇吃到東西時的方法

            if(length50)

            {

            length++;

            }

            growth--;

            time=time-10;

            reform();

            life+=100;

            if(fenshulife)

            {

            fenshu = life;

            }

            foods++;

            }

            public void reform()

            {

            for(i=length-1;i0;i--)

            {

            m[i]=m[i-1];

            n[i]=n[i-1];

            }

            if(z==4)

            {

            m[0]=m[0]+10;

            }

            if(z==3)

            {

            m[0]=m[0]-10;

            }

            if(z==2)

            {

            n[0]=n[0]+10;

            }

            if(z==1)

            {

            n[0]=n[0]-10;

            }

            }

            public void keyPressed(KeyEvent e)

            {

            if(she!=null)

            {

            if(e.getKeyCode()==KeyEvent.VK_UP)

            {

            if(z!=2)

            {

            z=1;

            check();

            }

            }

            else if(e.getKeyCode()==KeyEvent.VK_DOWN)

            {

            if(z!=1)

            {

            z=2;

            check();

            }

            }

            else if(e.getKeyCode()==KeyEvent.VK_LEFT)

            {

            if(z!=4)

            {

            z=3;

            check();

            }

            }

            else if(e.getKeyCode()==KeyEvent.VK_RIGHT)

            {

            if(z!=3)

            {

            z=4;

            check();

            }

            }

            }

            }

            public void keyReleased(KeyEvent e)

            {

            }

            public void keyTyped(KeyEvent e)

            {

            }

            public void paint(Graphics g) {

            g.setColor(Color.DARK_GRAY); //設(shè)置背景

            g.fillRect(0,50,400,400);

            g.setColor(Color.pink);

            for(i=0;i=length-1;i++)

            {

            g.fillRect(m[i],n[i],10,10);

            }

            g.setColor(Color.green); //蛇的食物

            g.fillRect(objectX,objectY,10,10);

            g.setColor(Color.white);

            g.drawString("當前 分數(shù)"+this.life,6,60);

            g.drawString("當前已吃食物數(shù)"+this.foods,6,72);

            }

            }

            求Java 大神給個可以在eclipse上運行的貪吃蛇源代碼在線等急

            packagecom.tarena.elts.test;importjava.awt.Color;importjava.awt.Font;importjava.awt.Point;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.KeyAdapter;importjava.awt.event.KeyEvent;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.HashSet;importjava.util.List;importjava.util.Map;importjava.util.Random;importjava.util.Set;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JPanel;publicclassWormFrameextendsJFrame{privatestaticfinallongserialVersionUID=1L;publicstaticfinalintUP=-10;publicstaticfinalintDOWN=10;publicstaticfinalintLEFT=-200;publicstaticfinalintRIGHT=200;privateintspeed=200;//蛇的移動速度,越小越快privateJPaneljPanel=null;//游戲面板privateJLabeljLabel=null;//顯示游戲結(jié)束的標簽privateJButtonreset=null;//從新開始游戲的按鈕privateJButtoncontrol=null;//控制方向的按鈕privateListworm=newArrayList();//貪吃蛇//將整個面板劃分成節(jié)點,蛇走到那里,就那整個節(jié)點點亮privateMapnodes=newHashMap();privateintdir=LEFT;//方向privatePointfood;//食物privatebooleanisContinue=false;//判斷蛇是否行動的標記publicstaticvoidmain(String[]args){newWormFrame();}publicWormFrame(){initialize();start();}//游戲初始化privatevoidinitialize(){this.setSize(500,500);this.setLocation(250,100);this.setResizable(false);this.add(getJPanel());//添加面板this.setTitle("貪吃蛇,空格鍵暫停,回車開始");this.setVisible(true);}//游戲開始privatevoidstart(){isContinue=true;while(true){while(isContinue){try{Pointp=worm.get(0);intx=(int)p.getX()+dir/20;inty=(int)p.getY()+dir%100;if(food.equals(newPoint(x,y))){worm.add(0,food);if(worm.size()%1==0){speed-=10;}getFood();continue;}p=newPoint(x,y);if(worm.contains(p)){thrownewException();}nodes.get(p).setVisible(false);worm.add(0,p);nodes.get(worm.remove(worm.size()-1)).setVisible(true);Thread.sleep(speed);}catch(Exceptione){jLabel.setVisible(true);reset.setVisible(true);//不停止內(nèi)循環(huán),jLabel和reset不消失isContinue=false;}}try{Thread.sleep(1000);}catch(InterruptedExceptione){e.printStackTrace();}}}//游戲從新開始privatevoidreset(){worm=newArrayList();for(Pointp:nodes.keySet()){nodes.get(p).setVisible(false);}addWorm();dir=LEFT;getFood();isContinue=true;}//獲取游戲面板的方法,面板中有記錄游戲時間的標簽,//代表游戲角色的按鈕和重新開始游戲的按鈕privateJPanelgetJPanel(){if(jPanel==null){//顯示游戲結(jié)束的標簽getOver();//從新開始的按鈕getReset();//控制按鈕getControl();//游戲面板jPanel=newJPanel();jPanel.setLayout(null);//設(shè)置面板布局為空//jPanel.setForeground(newColor(255,255,255));//設(shè)置面板前景色jPanel.setBackground(newColor(0,0,0));//設(shè)置面板背景色jPanel.add(jLabel,null);//面板中添加顯示游戲結(jié)束的標簽jPanel.add(reset,null);//面板中添加從新開始的按鈕jPanel.add(control,null);for(inti=0;i490;i+=10){for(intj=0;j470;j+=10){JButtonjb=newJButton();Pointp=newPoint(i,j);jb.setBounds(i,j,10,10);jb.setBackground(newColor(255,255,255));jb.setEnabled(false);//jb.setVisible(true);nodes.put(p,jb);jPanel.add(jb,null);}}addWorm();//添加一條蛇getFood();//食物按鈕jPanel.setVisible(true);//設(shè)置面板可見}returnjPanel;}//游戲結(jié)束標簽privatevoidgetOver(){jLabel=newJLabel();jLabel.setBounds(170,200,200,50);//設(shè)置標簽大小和位置jLabel.setFont(newFont("Dialog",Font.BOLD,24));//設(shè)置標簽字體jLabel.setForeground(newColor(250,2,2));//設(shè)置標簽前景顏色jLabel.setText("游戲結(jié)束");jLabel.setEnabled(true);//設(shè)置此標簽可用jLabel.setVisible(false);//設(shè)置此標簽不可見}//從新開始按鈕privatevoidgetReset(){if(reset==null){reset=newJButton();//新建一個按鈕reset.setBounds(170,300,164,51);//設(shè)置按鈕的大小reset.setText("重新開始");//設(shè)置按鈕的內(nèi)容reset.setVisible(false);//設(shè)置按鈕不可見//添加按鈕的時間監(jiān)聽器reset.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){reset.setVisible(false);//點擊重新開始按鈕后,按鈕消失jLabel.setVisible(false);//記錄游戲時間的按鈕也消失try{Thread.sleep(1000);}catch(InterruptedExceptione1){e1.printStackTrace();}reset();}});}}//控制方向的按鈕privatevoidgetControl(){if(control==null){control=newJButton();control.addKeyListener(newKeyAdapter(){@OverridepublicvoidkeyPressed(KeyEvente){switch(e.getKeyCode()){caseKeyEvent.VK_LEFT:chDir(LEFT);break;caseKeyEvent.VK_RIGHT:chDir(RIGHT);break;caseKeyEvent.VK_UP:chDir(UP);break;caseKeyEvent.VK_DOWN:chDir(DOWN);break;caseKeyEvent.VK_ENTER:isContinue=true;break;caseKeyEvent.VK_SPACE:isContinue=false;break;}}});}}//生成食物privatevoidgetFood(){Randomran=newRandom();//橫坐標最大480,縱坐標最大460intx=ran.nextInt(49)*10;inty=ran.nextInt(47)*10;food=newPoint(x,y);Setset=newHashSet(worm);while(set.contains(food)){x=ran.nextInt(50)*10;y=ran.nextInt(50)*10;food=newPoint(x,y);}nodes.get(food).setVisible(false);}//改變方向privatevoidchDir(intdir){if(this.dir+dir!=0){this.dir=dir;}}//添加Worm的方法privatevoidaddWorm(){for(inti=250;i300;i+=10){Pointp=newPoint(i,250);worm.add(p);nodes.get(p).setVisible(true);}}}//給分

            求一份java 貪吃蛇的代碼

            package games;

            import java.awt.*;

            import java.awt.event.*;

            import javax.swing.*;

            import java.util.*;

            import static java.lang.Math.*;//靜態(tài)導(dǎo)入

            /*

            * 此類是貪吃蛇的簡單實現(xiàn)方法

            * 自己可以加入在開始時的設(shè)置,比如

            * 選關(guān),初始的蛇的長度等等

            */

            public class Snake extends JPanel {

            private static final long serialVersionUID = 1L;

            private Direction dir;// 要走的方向

            private int blockWidth = 10;// 塊大小

            private int blockSpace = 2;// 塊之間的間隔

            private long sleepTime;// 重畫的進間間隔

            private MySnake my;

            private int total;// 代表蛇的長度

            private Rectangle food;// 代表蛇的食物

            private volatile boolean go;

            private int round;// 表示第幾關(guān)

            public Snake(JFrame jf) {

            initOther();

            // 為頂級窗口類JFrame添加事件處理函數(shù)

            jf.addKeyListener(new KeyAdapter() {

            public void keyReleased(KeyEvent ke) {

            int code = ke.getKeyCode();

            if (code == KeyEvent.VK_RIGHT) {

            if (dir != Direction.WEST)

            dir = Direction.EAST;

            }

            else if (code == KeyEvent.VK_LEFT) {

            if (dir != Direction.EAST)

            dir = Direction.WEST;

            }

            else if (code == KeyEvent.VK_UP) {

            if (dir != Direction.SOUTH)

            dir = Direction.NORTH;

            }

            else if (code == KeyEvent.VK_DOWN) {

            if (dir != Direction.NORTH)

            dir = Direction.SOUTH;

            } else if (code == KeyEvent.VK_ENTER) {

            if (!go)

            initOther();

            }

            }

            });

            this.setBounds(300, 300, 400, 400);

            this.setVisible(true);

            }

            // 隨機生成一個食物的位置

            private void makeFood() {

            int x = 40 + (int) (random() * 30) * 12;

            int y = 10 + (int) (random() * 30) * 12;

            food = new Rectangle(x, y, 10, 10);

            }

            // 做一些初始化的工作

            private void initOther() {

            dir = Direction.EAST;

            sleepTime = 500;

            my = new MySnake();

            makeFood();

            total = 3;

            round = 1;

            new Thread(new Runnable() {

            public void run() {

            go = true;

            while (go) {

            try {

            Thread.sleep(sleepTime);

            repaint();

            } catch (Exception exe) {

            exe.printStackTrace();

            }

            }

            }

            }).start();

            }

            // 處理多少關(guān)的函數(shù)

            private void handleRound() {

            if (total == 6) {

            round = 2;

            sleepTime = 300;

            } else if (total == 10) {

            round = 3;

            sleepTime = 200;

            } else if (total == 15) {

            round = 4;

            sleepTime = 100;

            } else if (total == 18) {

            round = 5;

            sleepTime = 50;

            } else if (total == 20) {

            round = 6;

            sleepTime = 20;

            } else if (total 21) {

            round = 7;

            sleepTime = 15;

            }

            }

            // 把自己的組件全部畫出來

            public void paintComponent(Graphics g) {

            g.setColor(Color.PINK);

            g.fillRect(0, 0, this.getWidth(), this.getHeight());

            g.setColor(Color.BLACK);

            g.drawRect(40, 10, 358, 360);

            if (go) {

            my.move();

            my.draw(g);

            g.setFont(new Font("黑體", Font.BOLD, 20));

            g.drawString("您的得分:" + (total * 10) + " 第" + round + "關(guān)", 40,

            400);

            } else {

            g.setFont(new Font("黑體", Font.BOLD, 20));

            g.drawString("游戲結(jié)束,按回車(ENTER)鍵重玩!", 40, 440);

            }

            g.setColor(Color.RED);

            g.fillRect(food.x, food.y, food.width, food.height);

            }

            private class MySnake {

            private ArrayListRectangle list;

            public MySnake() {

            list = new ArrayListRectangle();

            list.add(new Rectangle(160 + 24, 130, 10, 10));

            list.add(new Rectangle(160 + 12, 130, 10, 10));

            list.add(new Rectangle(160, 130, 10, 10));

            }

            // 蛇移動的方法

            public void move() {

            if (isDead()) {

            go = false;

            return;

            }

            if (dir == Direction.EAST) {

            Rectangle rec = list.get(0);

            Rectangle rec1 = new Rectangle(rec.x

            + (blockWidth + blockSpace), rec.y, rec.width,

            rec.height);

            list.add(0, rec1);

            } else if (dir == Direction.WEST) {

            Rectangle rec = list.get(0);

            Rectangle rec1 = new Rectangle(rec.x

            - (blockWidth + blockSpace), rec.y, rec.width,

            rec.height);

            list.add(0, rec1);

            } else if (dir == Direction.NORTH) {

            Rectangle rec = list.get(0);

            Rectangle rec1 = new Rectangle(rec.x, rec.y

            - (blockWidth + blockSpace), rec.width, rec.height);

            list.add(0, rec1);

            } else if (dir == Direction.SOUTH) {

            Rectangle rec = list.get(0);

            Rectangle rec1 = new Rectangle(rec.x, rec.y

            + (blockWidth + blockSpace), rec.width, rec.height);

            list.add(0, rec1);

            }

            if (isEat()) {

            handleRound();

            makeFood();

            } else {

            list.remove(list.size() - 1);

            }

            }

            // 判斷是否吃到了食物

            private boolean isEat() {

            if (list.get(0).contains(food)) {

            total++;

            return true;

            } else

            return false;

            }

            // 判斷是否死了,如果碰壁或者自己吃到自己都算死了

            private boolean isDead() {

            Rectangle temp = list.get(0);

            if (dir == Direction.EAST) {

            if (temp.x == 388)

            return true;

            else {

            Rectangle comp = new Rectangle(temp.x + 12, temp.y, 10, 10);

            for (Rectangle rec : list) {

            if (rec.contains(comp))

            return true;

            }

            }

            return false;

            } else if (dir == Direction.WEST) {

            if (temp.x == 40)

            return true;

            else {

            Rectangle comp = new Rectangle(temp.x - 12, temp.y, 10, 10);

            for (Rectangle rec : list) {

            if (rec.contains(comp))

            return true;

            }

            }

            return false;

            } else if (dir == Direction.NORTH) {

            if (temp.y == 10)

            return true;

            else {

            Rectangle comp = new Rectangle(temp.x, temp.y - 12, 10, 10);

            for (Rectangle rec : list) {

            if (rec.contains(comp))

            return true;

            }

            }

            return false;

            } else if (dir == Direction.SOUTH) {

            if (temp.y == 358)

            return true;

            else {

            Rectangle comp = new Rectangle(temp.x, temp.y + 12, 10, 10);

            for (Rectangle rec : list) {

            if (rec.contains(comp))

            return true;

            }

            }

            return false;

            } else {

            return false;

            }

            }

            // 把自己畫出來

            public void draw(Graphics g) {

            for (Rectangle rec : list) {

            g.fillRect(rec.x, rec.y, rec.width, rec.height);

            }

            }

            }

            public static void main(String arsg[]) {

            JFrame jf = new JFrame("貪吃蛇");

            Snake s = new Snake(jf);

            jf.getContentPane().add(s, BorderLayout.CENTER);

            jf.setBounds(300, 300, 500, 500);

            jf.setVisible(true);

            jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            }

            }

            // 定義一個枚舉,在此也可以用接口或者常量值代替

            enum Direction {

            EAST, SOUTH, WEST, NORTH;

            }

            java 雙人貪吃蛇

            package game;

            /*這是一個雙人貪吃蛇游戲

            *玩家一 A S D W 控制方向

            *玩家二 上下左右 控制方向

            *當某玩家無路可走的時候既輸

            */

            import java.awt.*;

            import javax.swing.*;

            import java.awt.event.*;

            public class HsGame extends JFrame {

            HsGame(String str) {

            // 設(shè)置主面版

            this.setTitle(str);

            this.setSize(910, 630);

            this.setLocation(50, 50);

            MyPanel mp = new MyPanel();

            this.add(mp);

            this.addKeyListener(mp);

            new Thread(mp).start();

            }

            // 主線程

            public static void main(String[] args) {

            HsGame m = new HsGame("貪吃蛇競技版");

            m.setVisible(true);

            }

            }

            class MyPanel extends JPanel implements Runnable, KeyListener {

            int[][] s1 = new int[180][120];

            int[][] s2 = new int[180][120];

            int x1 = 40;

            int y1 = 60;

            int x2 = 140;

            int y2 = 60;

            // 設(shè)置線程休眠時間

            int sleep = 50;

            // 設(shè)置初始方向

            int fangxiang1 = 2;

            int fangxiang2 = 0;

            // 構(gòu)造函數(shù)

            MyPanel() {

            // 初始化界面

            for (int ix = 0; ix 180; ix++) {

            for (int iy = 0; iy 120; iy++) {

            s1[ix][iy] = 0;

            s2[ix][iy] = 0;

            }

            }

            // 設(shè)置邊界

            // 上下邊界

            for (int ix = 0; ix 180; ix++) {

            s1[ix][0] = 1;

            s1[ix][119] = 1;

            s2[ix][0] = 1;

            s2[ix][119] = 1;

            }

            // 左右邊界

            for (int iy = 0; iy 120; iy++) {

            s1[0][iy] = 1;

            s1[179][iy] = 1;

            s2[0][iy] = 1;

            s2[179][iy] = 1;

            }

            }

            // 畫板

            public void paint(Graphics g) {

            // 顯示玩家一

            g.setColor(Color.red);

            for (int ix = 0; ix 180; ix++) {

            for (int iy = 0; iy 120; iy++) {

            if (s1[ix][iy] == 1) {

            g.fillRect(ix * 5, iy * 5, 5, 5);

            }

            }

            }

            // 顯示玩家二

            g.setColor(Color.blue);

            for (int ix = 0; ix 180; ix++) {

            for (int iy = 0; iy 120; iy++) {

            if (s2[ix][iy] == 1) {

            g.fillRect(ix * 5, iy * 5, 5, 5);

            }

            }

            }

            // 畫出邊界

            g.setColor(Color.black);

            for (int i = 0; i 180; i++) {

            g.fillRect(i * 5, 0, 5, 5);

            g.fillRect(i * 5, 119 * 5, 5, 5);

            }

            for (int i = 0; i 120; i++) {

            g.fillRect(0, i * 5, 5, 5);

            g.fillRect(179 * 5, i * 5, 5, 5);

            }

            }

            public void run() {

            while (true) {

            switch (fangxiang1) {

            case 0:

            x1--;

            break;

            case 1:

            y1--;

            break;

            case 2:

            x1++;

            break;

            case 3:

            y1++;

            }

            switch (fangxiang2) {

            case 0:

            x2--;

            break;

            case 1:

            y2--;

            break;

            case 2:

            x2++;

            break;

            case 3:

            y2++;

            }

            // 判斷死活

            if (s1[x1][y1] == 1 || s2[x1][y1] == 1) {

            // 彈出player2勝利對話框

            JOptionPane.showMessageDialog(null,

            "player 2 win!",

            "Game Over !", JOptionPane.ERROR_MESSAGE);

            // 結(jié)束游戲

            System.exit(0);

            } else {

            s1[x1][y1] = 1;

            }

            if (s2[x2][y2] == 1 || s1[x2][y2] == 1) {

            // 彈出player1勝利對話框

            JOptionPane.showMessageDialog(null,

            "player 1 win!",

            "Game Over !", JOptionPane.ERROR_MESSAGE);

            // 結(jié)束游戲

            System.exit(0);

            } else {

            s2[x2][y2] = 1;

            }

            try {

            Thread.sleep(sleep);

            } catch (Exception e) {

            e.printStackTrace();

            }

            // 重畫

            this.repaint();

            }

            }

            public void keyTyped(KeyEvent e) {

            }

            public void keyPressed(KeyEvent e) {

            // 玩家一控制

            if (e.getKeyCode() == 65) {

            if (fangxiang1 != 2) {

            fangxiang1 = 0;

            System.out.println("player 1 left");

            }

            }

            if (e.getKeyCode() == 87) {

            if (fangxiang1 != 3) {

            fangxiang1 = 1;

            System.out.println("player 1 up");

            }

            }

            if (e.getKeyCode() == 68) {

            if (fangxiang1 != 0) {

            fangxiang1 = 2;

            System.out.println("player 1 right");

            }

            }

            if (e.getKeyCode() == 83) {

            if (fangxiang1 != 1) {

            fangxiang1 = 3;

            System.out.println("player 1 down");

            }

            }

            // 玩家二控制

            if (e.getKeyCode() == 37) {

            if (fangxiang2 != 2) {

            fangxiang2 = 0;

            System.out.println("player 2 left");

            }

            }

            if (e.getKeyCode() == 38) {

            if (fangxiang2 != 3) {

            fangxiang2 = 1;

            System.out.println("player 2 up");

            }

            }

            if (e.getKeyCode() == 39) {

            if (fangxiang2 != 0) {

            fangxiang2 = 2;

            System.out.println("player 2 right");

            }

            }

            if (e.getKeyCode() == 40) {

            if (fangxiang2 != 1) {

            fangxiang2 = 3;

            System.out.println("player 2 down");

            }

            }

            }

            public void keyReleased(KeyEvent e) {

            }

            }

            本文標題:貪吃蛇雙人源代碼java 貪吃蛇的源代碼
            分享地址:http://www.jbt999.com/article24/hhhhce.html

            成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、虛擬主機、、定制開發(fā)Google網(wǎng)頁設(shè)計公司

            廣告

            聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

            成都網(wǎng)站建設(shè)公司

              <del id="d4fwx"><form id="d4fwx"></form></del>
              <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

                    <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
                  • 2017夜夜撸 | 91AV电影在线播放 | 操鼻视频素材直接看 | 大香蕉www.www | 波多野结衣无码AⅤ一区t二区三区 |