<menu id="ycqsw"></menu><nav id="ycqsw"><code id="ycqsw"></code></nav>
<dd id="ycqsw"><menu id="ycqsw"></menu></dd>
  • <nav id="ycqsw"></nav>
    <menu id="ycqsw"><strong id="ycqsw"></strong></menu>
    <xmp id="ycqsw"><nav id="ycqsw"></nav>
  • java貪吃蛇代碼(最全的java游戲網站)


    年末啦,小編首先祝各位程序員新年快樂!真的是應了那句話:過了12歲之后,那歲數可就是不按規律的蹭蹭的往上漲啊,就在今年2018年,最后一批90后也步入了18歲的成人禮。正式宣布90后退出青年市場,00后統治世界~我們也即將是老去的一代。

    純java開發貪吃蛇小游戲(附代碼),回憶童年玩過的經典小游戲!

    小編偶然想到童年玩過的那些經典游戲,在當下吃雞,擼啊擼風靡的時代,那些小游戲漸漸被人遺忘,現在回想起來,當時那些游戲還是很好玩的呢,各位看官覺得呢?所以小編自己動手寫出了貪吃蛇游戲的java代碼,又重溫了一下,仿佛又回到了童年時代。下面給大家介紹一下代碼的邏輯和具體的代碼是什么:

    1.邏輯判斷

    要點分析:

    1)數據結構:matrix[][]用來存儲地圖上面的信息,如果什么也沒有設置為false,

    如果有食物或蛇,設置為true;nodeArray,一個LinkedList,用來保存蛇的每

    一節;food用來保存食物的位置;而Node類是保存每個位置的信息。

    2)重要函數:

    changeDirection(int newDirection) ,用來改變蛇前進的方向,而且只是

    保存頭部的前進方向,因為其他的前進方向已經用位置來指明了。 其中newDirection

    必須和原來的direction不是相反方向,所以相反方向的值用了同樣的奇偶性。在測試

    的時候使用了direction%2!=newDirection%2 進行判斷。

    moveOn(),用來更新蛇的位置,對于當前方向,把頭部位置進行相應改變。如果越界,

    結束;否則,檢測是否遇到食物(加頭部)或身體(結束);如果什么都沒有,加上頭部,

    去掉尾部。由于用了LinkedList數據結構,省去了相當多的麻煩。

    純java開發貪吃蛇小游戲(附代碼),回憶童年玩過的經典小游戲!

    2.具體代碼

    public class SnakePanel extends JPanel implements KeyListener,ActionListener {

    ImageIcon up = new ImageIcon(“up.png”);

    ImageIcon down = new ImageIcon(“down.png”);

    ImageIcon right = new ImageIcon(“right.png”);

    ImageIcon left = new ImageIcon(“left.png”);

    ImageIcon title = new ImageIcon(“title.jpg”);

    ImageIcon food = new ImageIcon(“food.png”);

    ImageIcon body = new ImageIcon(“body.png”);

    /*

    * 定義數組記錄蛇頭和蛇身體的坐標,變量len表示蛇的長度

    * 變量方向表示蛇移動的方向

    */

    int[] snakex = new int[750];

    int[] snakey = new int[750];

    Random rand = new Random();

    int foodx = rand.nextInt(34)*25+25;

    int foody = rand.nextInt(24)*25+75;

    int len = 3;

    int score = 0;

    String fangxiang = “R”;//R右、L左、U上、D下

    boolean isStarted = false;//判斷游戲是否開始

    boolean isFailed = false;//判斷是否死亡

    //計時器:1.時間 2.時間到了去找的對象

    Timer timer = new Timer(300, this);

    public SnakePanel(){

    this.setFocusable(true);//取得焦點

    this.addKeyListener(this);

    setup();

    timer.start();

    }

    /*

    * Graphics圖像

    * public void paint(Graphics g) 以繪制組件。

    * 應用程序不應直接調用 paint,而是應該使用 repaint 方法來安排重繪組件。

    * 參數:g (相當于畫筆)- 在其中進行繪制的 Graphics 上下文

    */

    public void paint(Graphics g){

    // super.paint(g);

    // this.setBackground(Color.WHITE);

    this.getRootPane().setBackground(Color.WHITE);

    /*

    * public void paintIcon(Component c,Graphics g,int x,int y)

    * 繪制圖標。

    * 圖標的左上角在圖形上下文 g 的坐標空間中的點 (x, y) 處繪制。

    * 如果此圖標沒有圖像觀察者,則此方法使用 c 組件作為觀察者。

    * 參數:c(畫布) – 用作觀察者的組件,如果此圖標沒有圖像觀察者

    g (畫筆)- 圖形上下文

    x – 圖標左上角的 X 坐標

    y – 圖標左上角的 Y 坐標

    */

    title.paintIcon(this, g, 25, 11);

    /*

    * void java.awt.Graphics.fillRect(int x, int y, int width, int height)

    * 填充指定的矩形。

    * 該矩形左邊和右邊位于 x 和 x + width – 1。

    * 頂邊和底邊位于 y 和 y + height – 1。

    * 得到的矩形覆蓋的區域寬度為 width 像素,高度為 height 像素。

    * 使用圖形上下文的當前顏色填充該矩形。

    * 參數:x – 要填充矩形的 x 坐標。

    y – 要填充矩形的 y 坐標。

    width – 要填充矩形的寬度。

    height – 要填充矩形的高度。

    */

    g.fillRect(25, 75, 850, 600);

    //畫蛇頭,先判斷蛇頭的方向

    if(fangxiang.equals(“R”)){

    right.paintIcon(this, g, snakex[0], snakey[0]);

    }else if(fangxiang.equals(“L”)){

    left.paintIcon(this, g, snakex[0], snakey[0]);

    }else if(fangxiang.equals(“U”)){

    up.paintIcon(this, g, snakex[0], snakey[0]);

    }else if(fangxiang.equals(“D”)){

    down.paintIcon(this, g, snakex[0], snakey[0]);

    }

    //畫蛇的身體

    for (int i = 1; i < len; i++) {

    body.paintIcon(this, g, snakex[i], snakey[i]);

    }

    //游戲沒有開始時,顯示提示語(!isStarted)

    if(isStarted == false){

    g.setColor(Color.WHITE);

    g.setFont(new Font(“微軟雅黑”,Font.BOLD,35));

    g.drawString(“Press Space to Start/Pause”, 250, 350);

    }

    if(isFailed){

    g.setColor(Color.WHITE);

    g.setFont(new Font(“微軟雅黑”,Font.BOLD,35));

    g.drawString(“Game Over! Press Space to ReStart”, 200, 350);

    }

    food.paintIcon(this, g, foodx, foody);

    //添加分數

    g.setColor(Color.WHITE);

    g.drawString(“Score : “+score, 600, 45);

    }

    public void setup(){

    isStarted = false;

    isFailed = false;

    len = 3;

    snakex[0] = 100;

    snakey[0] = 100;

    snakex[1] = 75;

    snakey[1] = 100;

    snakex[2] = 50;

    snakey[2] = 100;

    }

    @Override

    public void keyPressed(KeyEvent e) {

    // TODO Auto-generated method stub

    int keyCode = e.getKeyCode();

    //實現轉向,不能實現反轉

    if(keyCode == KeyEvent.VK_SPACE){

    if (isFailed) {

    // isStarted = false;

    // isFailed = false;

    setup();

    }else {

    // isStarted = true;

    isStarted = !isStarted;//改變當前狀態

    // repaint();

    }

    }else if(keyCode == KeyEvent.VK_UP && fangxiang != “D”){

    fangxiang = “U”;

    }else if(keyCode == KeyEvent.VK_DOWN && fangxiang != “U”){

    fangxiang = “D”;

    }else if(keyCode == KeyEvent.VK_RIGHT && fangxiang != “L”){

    fangxiang = “R”;

    }else if(keyCode == KeyEvent.VK_LEFT && fangxiang != “R”){

    fangxiang = “L”;

    }

    }

    @Override

    public void actionPerformed(ActionEvent e) {

    // TODO Auto-generated method stub

    //1.再定義個鬧鐘

    timer.start();

    //2.移動數據

    if (isStarted && !isFailed) {

    //移動身體

    for (int i = len; i >0; i–) {

    snakex[i] = snakex[i-1];

    snakey[i] = snakey[i-1];

    }

    //移動頭

    if(fangxiang.equals(“R”)){

    snakex[0] = snakex[0] + 25;

    if(snakex[0] > 850)

    snakex[0] = 25;

    }else if(fangxiang.equals(“L”)){

    snakex[0] = snakex[0] – 25;

    if(snakex[0] < 25) snakex[0] = 850;

    }else if(fangxiang.equals(“U”)){

    snakey[0] = snakey[0] – 25;

    if(snakey[0] < 75) snakey[0] = 650;

    }else if(fangxiang.equals(“D”)){

    snakey[0] = snakey[0] + 25;

    if(snakey[0] > 650) snakey[0] = 75;

    }

    }

    //吃食物

    if(snakex[0] == foodx && snakey[0] == foody){

    len ++;

    score ++;

    foodx = rand.nextInt(34)*25+25;

    foody = rand.nextInt(24)*25+75;

    }

    //判斷身體相碰,游戲結束

    for (int i = 1; i < len; i++) {

    if (snakex[0] == snakex[i] && snakey[0] == snakey[i]) {

    isFailed = true;

    }

    }

    //3.repaint()

    repaint();

    }

    @Override

    public void keyReleased(KeyEvent e) {

    // TODO Auto-generated method stub

    }

    @Override

    public void keyTyped(KeyEvent e) {

    // TODO Auto-generated method stub

    }

    }

    package 貪吃蛇;

    import java.applet.Applet;

    import java.io.File;

    import java.net.MalformedURLException;

    import javax.swing.JFrame;

    public class Snake {

    public static void main(String[] args) {

    // TODO Auto-generated method stub

    JFrame frame = new JFrame();

    frame.setBounds(10, 10, 900, 720);

    frame.setResizable(false);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    SnakePanel panel = new SnakePanel();

    frame.add(panel);

    frame.setVisible(true);

    }

    }

    代碼量有點大,小伙伴們可以復制到eclipse中運行就可以了。

    在最后呢,祝各位小伙伴永遠18歲,新年快樂~謝謝觀看~

    版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。

    發表評論

    登錄后才能評論
    国产精品区一区二区免费