亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java實現flappy Bird小游戲的案例

發布時間:2021-04-15 11:51:04 來源:億速云 閱讀:257 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關java實現flappy Bird小游戲的案例的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

具體內容如下

整個游戲由3個類構成。Bird類,Pipe類,stage類

第一步:首先寫一個Bird類

//鳥類
public class Bird {
 private int flyHeight;//飛行高度
 private int xpos;//距離y軸(窗口左邊緣)的位置,
 public static int Up=1;//向上飛
 public static int Down=-1;//向下飛
 public Bird()
 {
 flyHeight=200;
 xpos=30;
 }
 public void fly(int direction)
 {
 if(direction==Bird.Up)
 flyHeight-=20;//每次向上飛20m
 if(direction==Bird.Down)
 flyHeight+=20;//每次向下飛20m
 }
 public int getFlyHeight()//獲得當前飛行高度
 {
 return flyHeight;
 }
 public int getXpos()//獲得當前鳥的水平位置
 {
 return xpos;
 }
 public Boolean hit(Pipe pipe[])//檢測是否碰到管道。只有在鳥經過管道的過程才有可能相撞
 {
 for(int i=0;i<pipe.length;i++)//遍歷管道進行檢測,是否相撞
 {
 if(getXpos()+20>=pipe[i].getXpos()&&getXpos()<=pipe[i].getXpos()+20)//鳥經過管道
 if(flyHeight<pipe[i].getUpHeight()||flyHeight>pipe[i].getDownHeight())//鳥與管道相撞
  return true;
 }
 return false;
 }
}

第二步:寫一個Pipe類,Pipe類 里有3個成員,upHeight表示頂管道端的高度,downHeight表示底端管道段的高度,同樣要記錄管道的水平位置。

public class Pipe {
 private int upHeight;//表示頂管道端的高度
 private int downHeight;//表示底端管道段的高度
 private int xpos;
 public Pipe()
 {
 upHeight=0;
 downHeight=0;
 xpos=0;
 }
 public Pipe(int maxHeight,int xpos)//給管道一個最大總長度(maxHeight)=upHeight+downHeight。還有管道的水平位置
 {
 double num;
 num=Math.random();
 while(num==0)
 num=Math.random();
 upHeight=(int) (maxHeight*num);//隨機產生一個頂端管道段高度(<maxHeight)
 downHeight=maxHeight-upHeight;//用總長度減去upHeight
 this.xpos=xpos;
 }
 public void setXpos(int xpos)
 {
 this.xpos=xpos;
 }
 public int getXpos()
 {
 return xpos;
 }
 public int getUpHeight()
 {
 return upHeight;
 }
 public int getDownHeight()
 {
 return downHeight;
 }
 public String toSting()
 {
 return "("+upHeight+","+downHeight+")";
 }
}

最后一步,寫好舞臺類,即操作游戲的類

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.lang.reflect.Array;
import java.util.Timer;
import java.util.TimerTask;
 
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
 
public class stage extends JPanel{
 private Pipe pipe[];//管道數組
 private Bird bird;//鳥
 private int space;//上下管道之間的間隔
 public JLabel scoreBoard;//計分面板
 private int score;//計分
 public stage()
 {
 space=150;//<span >上下管道之間的間隔為150</span>
 score=0;
 scoreBoard=new JLabel("得分:"+score);
 pipe=new Pipe[5];//總共5跟根
 for(int i=0;i<pipe.length;i++)
 {
 pipe[i]=new Pipe(400-space,i*130+110);//柱子每隔110m放一根
 //System.out.println(pipe[i].toSting());
 }
 bird=new Bird();
 }
 public void play()
 {
 Timer timer=new Timer();//定時任務,即使不操作也能動
 timer.schedule(new TimerTask()
 {
  public void run()
  {
  
  if(bird.hit(pipe))//碰到,重置所有數據成員
  {
  //System.out.println("碰到了");
  score=0;
  scoreBoard.setText("得分:"+score);
  pipe=new Pipe[10];
  for(int x=0;x<pipe.length;x++)
  pipe[x]=new Pipe(400-space,x*130+110);
  bird=new Bird();
  }
  else{//沒碰到
  //System.out.println("沒碰到");
  bird.fly(Bird.Down);//鳥默認向下飛
  for(int x=0;x<pipe.length;x++)//管道每次往前移動10m,造成鳥向右移動的效果
  {
   pipe[x].setXpos(pipe[x].getXpos()-10);
  }
  score=score+10;
  scoreBoard.setText("得分:"+score);
  }
  repaint();
  }
 }, 0, 1000);//在不操作的情況下,每一秒飛一次
 this.requestFocus();//獲取”輸入“焦點
 this.addKeyListener(new KeyAdapter() {//加入鍵盤時間
 public void keyPressed(KeyEvent e)
 {
 if(e.getKeyCode()==38)
 <span > </span>action(Bird.Up);
 else if(e.getKeyCode()==40)
 action(Bird.Down);
 });
 }
 public void action(int direction)//按下上下方向鍵后執行的函數
 {
 
 if(bird.hit(pipe))
 {
 //System.out.println("碰到了");
 score=0;
 scoreBoard.setText("得分:"+score);
 pipe=new Pipe[10];
 for(int x=0;x<pipe.length;x++)
 pipe[x]=new Pipe(400-space,x*130+110);
 bird=new Bird();
 }
 else{
 //System.out.println("沒碰到");
 if(direction==Bird.Up)
 {
 bird.fly(Bird.Up);
 }
 else if(direction==Bird.Down)
 {
 bird.fly(Bird.Down);
 }
 for(int x=0;x<pipe.length;x++)//管道每次往前移動10m,造成鳥向右移動的效果
 {
 pipe[x].setXpos(pipe[x].getXpos()-10);
 }
 score=score+10;
 scoreBoard.setText("得分:"+score);
 }
 repaint();
 }
 public void paint(Graphics g)
 {
 g.setColor(g.getColor());
 g.fillRect(0, 0, getWidth(), getHeight());//用默認顏色清屏
 g.setColor(Color.red);
 g.fill3DRect(bird.getXpos(), bird.getFlyHeight(), 20, 20, true);//紅色畫鳥
 g.setColor(Color.green);
 for(int i=0;i<pipe.length;i++)//綠色畫管道
 {
 g.fill3DRect(pipe[i].getXpos(), 0, 20, pipe[i].getUpHeight(), true);
 g.fill3DRect(pipe[i].getXpos(),pipe[i].getUpHeight()+space, 20, pipe[i].getDownHeight(), true);
 }
 if(pipe[0].getXpos()+20<=0)//如果第一根管道出界,就刪掉第一根管道,把后面的往前挪,再新創建一根管道
 {
 for(int i=1;i<pipe.length;i++)
  pipe[i-1]=pipe[i];
 pipe[pipe.length-1]=new Pipe(400-space,(pipe.length-1)*130+110);
 //System.out.println(pipe[pipe.length-1].toSting());
 }
 }
 public static void main(String[] args) {
 // TODO Auto-generated method stub
 JFrame jf=new JFrame("flappyBird");
 stage app=new stage();
 jf.setLayout(null);
 app.setBounds(0,20,600,400);
 app.scoreBoard.setBounds(0, 0, 100, 20);
 jf.add(app);
 jf.add(app.scoreBoard);
 jf.setSize(610, 460);
 jf.setVisible(true);
 app.play();//游戲開始
 }
 
}

程序截圖:

java實現flappy Bird小游戲的案例

感謝各位的閱讀!關于“java實現flappy Bird小游戲的案例”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

修文县| 泸州市| 盐城市| 锡林浩特市| 安化县| 雷波县| 罗平县| 太白县| 沁水县| 锡林浩特市| 阿荣旗| 定兴县| 临潭县| 蒙自县| 南安市| 克什克腾旗| 岢岚县| 通海县| 铁岭县| 平塘县| 杭锦后旗| 红原县| 七台河市| 江油市| 二手房| 永新县| 榆林市| 孟连| 黄梅县| 汉中市| 中阳县| 武平县| 临朐县| 肇源县| 明光市| 南漳县| 利川市| 永川市| 宁乡县| 安国市| 宁强县|