最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java實現(xiàn)Flappy Bird游戲源代碼

 更新時間:2018年12月24日 09:46:31   作者:Koma_Wong  
這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)Flappy Bird游戲源代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了java實現(xiàn)Flappy Bird游戲的具體代碼,供大家參考,具體內(nèi)容如下

/*
2017/7/23
*/
 
import java.awt.Graphics;
//import java.util.Timer;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
import java.awt.Rectangle;
import java.awt.*;
 
import java.util.*;
 
import javax.swing.JFrame;
import javax.swing.Timer;
import javax.swing.*;
 
 
import javax.swing.JPanel;
 
class Renderer extends JPanel
{
 
 private static final long serialVersionUID = 1L;
 
 protected void paintComponent(Graphics g)
 {
 super.paintComponent(g);
 
 FlappyBird.flappyBird.repaint(g);
 }
 
}
public class FlappyBird implements ActionListener, MouseListener, KeyListener
{
 public static FlappyBird flappyBird;
 
 public final int WIDTH = 900, HEIGHT = 800;
 
 public Renderer renderer;
 
 public Rectangle bird;
 
 public ArrayList<Rectangle> columns; 
 
 public int ticks, yMotion, score;
 
 public boolean gameOver, started;
 
 public Random rand;
 
 public FlappyBird()
 {
 JFrame jframe = new JFrame();
 Timer timer = new Timer(20,this);
 
 renderer = new Renderer();
 rand = new Random();
 
 jframe.add(renderer);
 jframe.setTitle("Flappy Bird");
 jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 jframe.setSize(WIDTH,HEIGHT);
 jframe.addMouseListener(this);
 jframe.addKeyListener(this);
 jframe.setResizable(false);
 jframe.setVisible(true);
 
 bird = new Rectangle(WIDTH / 2 - 10, HEIGHT / 2 - 10, 20, 20);
 
 columns = new ArrayList<Rectangle>();
 
 addColumn(true);
 addColumn(true);
 addColumn(true);
 addColumn(true);
 
 timer.start();
 }
 
 public void addColumn(boolean start)
 {
 int space = 300;
 int width = 100;
 int height = 50 + rand.nextInt(300);
 
 if(start)
 {
 columns.add(new Rectangle(WIDTH + width + columns.size() * 300, HEIGHT - height - 120, width, height));
 columns.add(new Rectangle(WIDTH + width + (columns.size()-1)*300, 0, width, HEIGHT - height - space));
 }
 else
 {
 columns.add(new Rectangle(columns.get(columns.size() - 1).x + 600, HEIGHT - height - 120, width, height));
 columns.add(new Rectangle(columns.get(columns.size() - 1).x , 0, width, HEIGHT - height - space));
 }
 
 }
 
 public void paintColumn(Graphics g, Rectangle column)
 {
 g.setColor(Color.green.darker());
 g.fillRect(column.x, column.y, column.width, column.height);
 }
 
 public void jump()
 {
 if (gameOver)
 {
 bird = new Rectangle(WIDTH / 2 - 10, HEIGHT / 2 - 10, 20, 20);
 
 columns.clear();
 
 yMotion = 0;
 score = 0;
 
 addColumn(true);
 addColumn(true);
 addColumn(true);
 addColumn(true);
 
 gameOver = false;
 }
 
 if(!started)
 {
 started = true;
 }
 else if(!gameOver)
 {
 if(yMotion > 0)
 {
 yMotion = 0;
 }
 
 yMotion -= 10;
 }
 }
 
 public void actionPerformed(ActionEvent e)
 {
 
 int speed = 10;
 
 ticks++;
 
 if(started )
 {
 for( int i = 0; i < columns.size(); i++)
 {
 Rectangle column = columns.get(i);
 
 column.x -= speed;
 }
 
 if(ticks % 2 ==0 && yMotion < 15)
 {
 yMotion += 2;
 }
 
 for (int i = 0; i < columns.size(); i++)
 {
 Rectangle column = columns.get(i);
 
 if (column.x + column.width < 0)
 {
  columns.remove(column);
  if(column.y ==0)
  {
  addColumn(false);
  }
 }
 }
 
 bird.y += yMotion;
 
 for(Rectangle column : columns)
 {
 if(bird.x + bird.width / 2 > column.x + column.width / 2 - 5 
 && bird.x + bird.width / 2 < column.x + column.width / 2 + 5
 && column.y == 0)
 {
  score++;
 } 
 
 if(column.intersects(bird))
 {
  gameOver = true;
 
  if(bird.x <= column.x)
  {
  bird.x = column.x - bird.width;
  }
  else
  {
  if(column.y != 0)
  {
  bird.y = column.y - bird.height;
  }
  else if(bird.y < column.height)
  {
  bird.y = column.height;
  }
  }
 } 
 }
 
 if(bird.y > HEIGHT - 120 || bird.y < 0 )
 {
 gameOver = true;
 }
 
 if(bird.y + yMotion >= HEIGHT -120)//(gameOver)
 {
 bird.y = HEIGHT -120 - bird.height;
 }
 }
 renderer.repaint();
 }
 
 public void repaint(Graphics g)
 {
 //System.out.println("hello");
 g.setColor(Color.cyan);
 g.fillRect(0,0,WIDTH,HEIGHT);
 
 g.setColor(Color.orange);
 g.fillRect(0, HEIGHT - 120, WIDTH, 150);
 
 g.setColor(Color.green);
 g.fillRect(0, HEIGHT - 120, WIDTH, 20);
 
 g.setColor(Color.red);
 g.fillRect(bird.x, bird.y, bird.width, bird.height);
 
 for ( Rectangle column : columns )
 {
 paintColumn(g,column);
 }
 
 g.setColor(Color.white);
 g.setFont(new Font("Arial",1,70));
 
 if(!started)
 {
 g.drawString("Click to start!",90,HEIGHT / 2-50);
 }
 
 if(gameOver)
 {
 g.drawString("Game Over! You suck!",40,HEIGHT / 2-50);
 }
 
 if(!gameOver && started)
 {
 g.drawString(String.valueOf(score), WIDTH / 2, 100);
 }
 }
 
 public static void main(String[]args)
 {
 flappyBird = new FlappyBird();
 }
 
 public void mouseClicked(MouseEvent e)
 {
 jump();
 }
 public void mousePressed(MouseEvent e){}
 public void mouseReleased(MouseEvent e){}
 public void mouseEntered(MouseEvent e){}
 public void mouseExited(MouseEvent e){}
 
 public void keyPressed(KeyEvent e){}
 public void keyTyped(KeyEvent e){}
 public void keyReleased(KeyEvent e)
 {
 if(e.getKeyCode() == KeyEvent.VK_SPACE)
 {
 jump();
 }
 }
 
}

效果圖:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • mybatis?example如何自動生成代碼?排序語句

    mybatis?example如何自動生成代碼?排序語句

    這篇文章主要介紹了mybatis?example如何自動生成代碼?排序語句,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • java模擬ajax訪問另一個項目的controller代碼實例

    java模擬ajax訪問另一個項目的controller代碼實例

    今天小編就為大家分享一篇關(guān)于java模擬ajax訪問另一個項目的controller代碼實例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Java實現(xiàn)的分頁工具類與用法示例

    Java實現(xiàn)的分頁工具類與用法示例

    這篇文章主要介紹了Java實現(xiàn)的分頁工具類與用法,結(jié)合完整實例形式分析了java分頁工具類的定義、使用方法及相關(guān)操作技巧,需要的朋友可以參考下
    2019-10-10
  • Java后端實現(xiàn)生成驗證碼圖片的示例代碼

    Java后端實現(xiàn)生成驗證碼圖片的示例代碼

    驗證碼是一種用于驗證用戶身份或確保用戶操作安全的技術(shù)手段,通常以圖形、聲音或文字的形式出現(xiàn),本文主要介紹了如何通過java實現(xiàn)生成驗證碼圖片,需要的可以參考下
    2023-12-12
  • Java實現(xiàn)數(shù)據(jù)庫圖片上傳功能詳解

    Java實現(xiàn)數(shù)據(jù)庫圖片上傳功能詳解

    這篇文章主要為大家詳細(xì)介紹了如何使用Java實現(xiàn)數(shù)據(jù)庫圖片上傳功能,包含從數(shù)據(jù)庫拿圖片傳遞前端渲染,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-03-03
  • Java中使用MongoDB數(shù)據(jù)庫實例Demo

    Java中使用MongoDB數(shù)據(jù)庫實例Demo

    MongoDB是由C++語言編寫的,基于分布式文件存儲的數(shù)據(jù)庫,是一個介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品,是最接近于關(guān)系型數(shù)據(jù)庫的NoSQL數(shù)據(jù)庫,下面這篇文章主要給大家介紹了關(guān)于Java中使用MongoDB數(shù)據(jù)庫的相關(guān)資料,需要的朋友可以參考下
    2023-12-12
  • java中的移位運算符心得總結(jié)

    java中的移位運算符心得總結(jié)

    這篇文章介紹了java中的移位運算符,有需要的朋友可以參考一下
    2013-11-11
  • 關(guān)于Tomcat出現(xiàn)The origin server did not find a current representation for the target resourc...的問題

    關(guān)于Tomcat出現(xiàn)The origin server did not find a current represent

    這篇文章主要介紹了關(guān)于Tomcat出現(xiàn)The origin server did not find a current representation for the target resourc...的問題,感興趣的小伙伴們可以參考一下
    2020-08-08
  • Maven分模塊開發(fā)與依賴管理和聚合和繼承及屬性深入詳細(xì)介紹

    Maven分模塊開發(fā)與依賴管理和聚合和繼承及屬性深入詳細(xì)介紹

    依賴管理是項目管理中非常重要的一環(huán)。幾乎任何項目開發(fā)的時候需要都需要使用到庫。而這些庫很可能又依賴別的庫,這樣整個項目的依賴形成了一個樹狀結(jié)構(gòu),而隨著這個依賴的樹的延伸和擴大,一系列問題就會隨之產(chǎn)生
    2022-10-10
  • springboot 使用logback啟動報警報錯的解決

    springboot 使用logback啟動報警報錯的解決

    這篇文章主要介紹了springboot 使用logback啟動報警報錯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07

最新評論

琼中| 革吉县| 纳雍县| 余姚市| 交口县| 霞浦县| 区。| 会理县| 江门市| 长岭县| 龙山县| 台州市| 林周县| 铁力市| 苍山县| 达孜县| 安宁市| 汉源县| 彝良县| 乌苏市| 祁连县| 惠来县| 贵溪市| 成安县| 阿克| 墨竹工卡县| 永胜县| 兴安县| 恩平市| 大埔区| 杂多县| 堆龙德庆县| 连南| 龙南县| 延寿县| 出国| 泉州市| 凯里市| 鄂托克旗| 山丹县| 抚远县|