黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 貪吃蛇Java代碼

貪吃蛇Java代碼

更新時間:2022-07-27 11:51:20 來源:動力節點 瀏覽1440次

貪吃蛇是一款較老的經典電子游戲。它最初是在 70 年代后期創建的。后來它被帶到了PC上。在這個游戲中,玩家控制一條蛇。目標是盡可能多地吃蘋果。蛇每吃一個蘋果,它的身體就會變大。蛇必須避開墻壁和自己的身體。這個游戲有時被稱為Nibbles。

Java Sname 游戲的開發

蛇的每個關節的大小是 10 像素。蛇是用光標鍵控制的。最初,這條蛇有三個關節。如果游戲結束,棋盤中央會顯示“游戲結束”消息。

包 com.zetcode;
導入 java.awt.Color;
導入 java.awt.Dimension;
導入java.awt.Font;
導入 java.awt.FontMetrics;
導入 java.awt.Graphics;
導入 java.awt.Image;
導入 java.awt.Toolkit;
導入 java.awt.event.ActionEvent;
導入 java.awt.event.ActionListener;
導入 java.awt.event.KeyAdapter;
導入 java.awt.event.KeyEvent;
導入 javax.swing.ImageIcon;
導入 javax.swing.JPanel;
導入 javax.swing.Timer;
公共類 Board 擴展 JPanel 實現 ActionListener {
    私人最終int B_WIDTH = 300;
    私人最終int B_HEIGHT = 300;
    私人最終 int DOT_SIZE = 10;
    私人最終 int ALL_DOTS = 900;
    私人最終 int RAND_POS = 29;
    私人最終 int 延遲 = 140;
    私有最終 int x[] = new int[ALL_DOTS];
    私有最終 int y[] = new int[ALL_DOTS];
    私有 int 點;
    私有 int apple_x;
    私人 int apple_y;
    私人布爾左方向=假;
    私有布爾rightDirection = true;
    私人布爾向上方向=假;
    私人布爾下方向=假;
    私人布爾 inGame = true;
    私人定時器定時器;
    私人形象球;
    私人形象蘋果;
    私有圖像頭;
    公共板(){        
        初始化板();
    }    
    私人無效初始化板(){
        addKeyListener(new TAdapter());
        設置背景(顏色。黑色);
        可聚焦(真);
        setPreferredSize(新維度(B_WIDTH, B_HEIGHT));
        加載圖像();
        初始化游戲();
    }
    私人無效加載圖像(){
        ImageIcon iid = new ImageIcon("src/resources/dot.png");
        球 = iid.getImage();
        ImageIcon iia = new ImageIcon("src/resources/apple.png");
        蘋果 = iia.getImage();
        ImageIcon iih = new ImageIcon("src/resources/head.png");
        頭 = iih.getImage();
    }
    私人無效初始化游戲(){
        點 = 3;
        for (int z = 0; z < 點; z++) {
            x[z] = 50 - z * 10;
            y[z] = 50;
        }        
        定位蘋果();
        計時器 = 新計時器(延遲,此);
        計時器.start();
    }
    @覆蓋
    公共無效paintComponent(圖形g){
        super.paintComponent(g);
        繪圖(g);
    }    
    私人無效doDrawing(圖形g){        
        如果(游戲中){
            g.drawImage(蘋果,apple_x,apple_y,這個);
            for (int z = 0; z < 點; z++) {
                如果(z == 0){
                    g.drawImage(頭, x[z], y[z], 這個);
                } 別的 {
                    g.drawImage(球, x[z], y[z], this);
                }
            }
            Toolkit.getDefaultToolkit().sync();
        } 別的 {
            游戲結束(g);
        }        
    }
    私人無效gameOver(圖形g){        
        String msg = "游戲結束";
        小字體 = new Font("Helvetica", Font.BOLD, 14);
        FontMetrics 度量 = getFontMetrics(small);
        g.setColor(Color.white);
        g.setFont(小);
        g.drawString(msg, (B_WIDTH - metr.stringWidth(msg)) / 2, B_HEIGHT / 2);
    }
    私人無效檢查蘋果(){
        if ((x[0] == apple_x) && (y[0] == apple_y)) {
            點++;
            定位蘋果();
        }
    }
    私人無效移動(){
        for (int z = 點; z > 0; z--) {
            x[z] = x[(z - 1)];
            y[z] = y[(z - 1)];
        }
        如果(左方向){
            x[0] -= DOT_SIZE;
        }
        如果(右方向){
            x[0] += DOT_SIZE;
        }
        如果(向上方向){
            y[0] -= DOT_SIZE;
        }
        如果(向下方向){
            y[0] += DOT_SIZE;
        }
    }
    私人無效檢查碰撞(){
        for (int z = 點; z > 0; z--) {
            if ((z > 4) && (x[0] == x[z]) && (y[0] == y[z])) {
                游戲內=假;
            }
        }
        如果(y[0] >= B_HEIGHT){
            游戲內=假;
        }
        如果 (y[0] < 0) {
            游戲內=假;
        }
        如果 (x[0] >= B_WIDTH) {
            游戲內=假;
        }
        如果 (x[0] < 0) {
            游戲內=假;
        }        
        如果(!游戲中){
            計時器.stop();
        }
    }
    私人無效locateApple(){
        int r = (int) (Math.random() * RAND_POS);
        apple_x = ((r * DOT_SIZE));
        r = (int) (Math.random() * RAND_POS);
        apple_y = ((r * DOT_SIZE));
    }
    @覆蓋
    公共無效actionPerformed(ActionEvent e){
        如果(游戲中){
            檢查蘋果();
            檢查碰撞();
            移動();
        }
        重繪();
    }
    私有類 TAdapter 擴展 KeyAdapter {
        @覆蓋
        公共無效keyPressed(KeyEvent e){
            int key = e.getKeyCode();
            if ((key == KeyEvent.VK_LEFT) && (!rightDirection)) {
                左方向=真;
                向上方向 = 假;
                向下方向 = 假;
            }
            if ((key == KeyEvent.VK_RIGHT) && (!leftDirection)) {
                正確方向=真;
                向上方向 = 假;
                向下方向 = 假;
            }
            if ((key == KeyEvent.VK_UP) && (!downDirection)) {
                向上方向=真;
                正確的方向=假;
                左方向=假;
            }
            if ((key == KeyEvent.VK_DOWN) && (!upDirection)) {
                向下方向 = 真;
                正確的方向=假;
                左方向=假;
            }
        }
    }
}

首先,我們將定義游戲中使用的常量。

私人最終int B_WIDTH = 300;
私人最終int B_HEIGHT = 300;
私人最終 int DOT_SIZE = 10;
私人最終 int ALL_DOTS = 900;
私人最終 int RAND_POS = 29;
私人最終 int 延遲 = 140;

B_WIDTH和B_HEIGHT常量決定了板子的大小 。DOT_SIZE是蘋果的大小和蛇的圓點。該ALL_DOTS常數定義了板上可能的最大點數 (900 = (300*300)/(10*10))。該RAND_POS 常數用于計算蘋果的隨機位置。DELAY常數決定了游戲的速度 。

私有最終 int x[] = new int[ALL_DOTS];
私有最終 int y[] = new int[ALL_DOTS];

這兩個數組存儲蛇所有關節的 x 和 y 坐標。

私人無效加載圖像(){
    ImageIcon iid = new ImageIcon("src/resources/dot.png");
    球 = iid.getImage();
    ImageIcon iia = new ImageIcon("src/resources/apple.png");
    蘋果 = iia.getImage();
    ImageIcon iih = new ImageIcon("src/resources/head.png");
    頭 = iih.getImage();
}

在該loadImages()方法中,我們獲取游戲的圖像。該類ImageIcon用于顯示 PNG 圖像。

私人無效初始化游戲(){
    點 = 3;
    for (int z = 0; z < 點; z++) {
        x[z] = 50 - z * 10;
        y[z] = 50;
    }
    定位蘋果();
    計時器 = 新計時器(延遲,此);
    計時器.start();
}

在initGame()我們創建蛇的方法中,在板上隨機定位一個蘋果,然后啟動計時器。

私人無效檢查蘋果(){
    if ((x[0] == apple_x) && (y[0] == apple_y)) {
        點++;
        定位蘋果();
    }
}

如果蘋果撞到頭部,我們增加蛇的關節數。我們調用locateApple()隨機定位新蘋果對象的方法。

在move()方法中我們有游戲的關鍵算法。要理解它,看看蛇是如何移動的。我們控制了蛇的頭。我們可以用光標鍵改變它的方向。其余關節沿鏈條向上移動一個位置。第二個關節移動到第一個關節的位置,第三個關節移動到第二個關節的位置,依此類推。

for (int z = 點; z > 0; z--) {
    x[z] = x[(z - 1)];
    y[z] = y[(z - 1)];
}

此代碼將關節沿鏈向上移動。

如果(左方向){
    x[0] -= DOT_SIZE;
}

這條線將頭部向左移動。

在該checkCollision()方法中,我們確定蛇是撞到自己還是撞到了一堵墻。

for (int z = 點; z > 0; z--) {
    if ((z > 4) && (x[0] == x[z]) && (y[0] == y[z])) {
        游戲內=假;
    }
}

如果蛇用頭撞到它的一個關節,游戲就結束了。

如果(y[0] >= B_HEIGHT){
    游戲內=假;
}

如果蛇擊中棋盤底部,則游戲結束。

包 com.zetcode;
導入 java.awt.EventQueue;
導入 javax.swing.JFrame;
公共類蛇擴展 JFrame {
    公共蛇(){       
       初始化界面();
    }    
    私人無效initUI(){        
        添加(新板());        
        可調整大小(假);
        盒();        
        setTitle("蛇");
        setLocationRelativeTo(null);
        設置默認關閉操作(JFrame.EXIT_ON_CLOSE);
    }    
    公共靜態無效主要(字符串[]參數){        
        EventQueue.invokeLater(() -> {
            JFrame ex = new Snake();
            ex.setVisible(true);
        });
    }
}

這是主要編程。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 2020欧美极品hd18 | 欧美日韩三级在线 | 亚洲男女免费视频 | 91精品在线观看视频 | 麻豆一区二区三区四区 | 性8sex亚洲区入口 | h视频在线看 | 国产成人h福利小视频在线观看 | 一区二区午夜 | 曰皮全部过程视频免费国产 | 中国一级特黄高清免费的大片 | 久久精品伊人波多野结 | 成人免费www在线高清观看 | 性色va | 久久网伊人 | 国产综合第一页在线视频 | 日韩美女免费线视频 | 在线观看a视频 | 欧美日本一区二区三区 | 免费看v片网站 | 成人资源在线 | h国产视频 | 国产91精品一区二区麻豆网站 | 特级淫片aaaa毛片aa视频 | 日韩欧美高清一区 | 日韩福利一区 | 欧美大交乱xxxx | 久久精品免费全国观看国产 | xx视频在线永久免费观看 | 视色视频在线 | 手机看片国产欧美日韩高清 | 久久久噜久噜久久综合 | 亚洲欧美精品网站在线观看 | 9久爱午夜视频 | 天堂网欧美 | 欧美日本在线一区二区三区 | 亚洲欧美国产一区二区三区 | 成人精品亚洲 | 国产视频中文字幕 | 操丝袜秘书 | 免费一级欧美片在线观看 |