java--飛翔的小鳥

游戲玩法:通過鼠標點擊使小鳥上下移動穿過柱子并完成得分,小鳥碰到柱子或掉落到地面上都會結束游戲。

游戲內圖片

?Brid類:

package bird;import org.omg.CORBA.IMP_LIMIT;import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;public class Brid {int x,y;int width,height;int size;//鳥的大小,用于檢測碰撞BufferedImage image;
BufferedImage[] images;
int index;double g;   //重力加速度double t;   //兩次位置的時間間隔double v0;  //初始上拋的速度double speed; //當前上拋的速度double s;     //經過時間t以后的位移double alpha; //鳥的傾角,單位是弧度public  Brid() throws Exception {image = ImageIO.read(getClass().getResource("0.png"));width = image.getWidth();height = image.getHeight();x = 132;y = 280;size = 40;g = 4;v0 = 20;t = 0.25;speed = v0;s = 0;alpha = 0;images = new BufferedImage[8];for (int i = 0; i < 8; i++) {images[i] = ImageIO.read(getClass().getResource(i + ".png"));}
index=0;}
public void  fly(){index++;image=images[(index/12)%8];
}public  void  step(){
double v0=speed;
s=v0*t+g*t*t/2;  //計算上拋運動的位移;
y=y-(int)s;//計算鳥的位置坐標
double v =v0-g*t;//計算下次的速度
speed=v;
alpha=Math.atan(s/8);}
public  void flappy(){speed=v0;   //重新設置初始速度,重新向上飛
}public boolean hit( Ground ground){boolean hit=y+size/2>ground.y;if(hit){y= ground.y-size/2;alpha=-3.1415926/2;}return  hit;}public boolean hit(Column column) {if (x > column.x - column.width / 2 - size / 2 && x < column.x + column.width / 2 + size / 2) {if (y > column.y - column.gap / 2 + size / 2 && y < column.y + column.gap / 2 - size / 2) {return false;}return true;}return false;}
}

?BridGame類:

package bird;import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;public class BridGame extends JPanel {Brid brid;Column column1,column2;Ground ground;BufferedImage background;int score;//  boolean gameOver;//游戲狀態int state;public  static  final  int START=0;public  static  final  int RUNNING=1;public  static  final  int GAME_OVER=2;BufferedImage gameOverImage;
BufferedImage startImage;public BridGame() throws Exception{//gameOver=false;state=START;gameOverImage =ImageIO.read(getClass().getResource("gameover.png"));startImage=ImageIO.read(getClass().getResource("start.png"));brid=new Brid();column1=new Column(1);column2=new Column(2);ground=new Ground();background= ImageIO.read(getClass().getResource("bg.png"));score=0;
}@Overridepublic void paint(Graphics g) {super.paint(g);g.drawImage(background,0,0,null);g.drawImage(column1.image,column1.x-column1.width/2,column1.y-column1.height/2,null);g.drawImage(column2.image,column2.x-column2.width/2,column2.y-column2.height/2,null);g.drawImage(ground.image,ground.x,ground.y,null);Graphics2D g2=(Graphics2D) g;g2.rotate(-brid.alpha,brid.x,brid.y);g.drawImage(brid.image,brid.x-brid.width/2,brid.y-brid.width/2,null);g2.rotate(brid.alpha,brid.x,brid.y);Font f=new Font(Font.SANS_SERIF,Font.BOLD,40);g.setFont(f);g.drawString(""+score,40,60);g.setColor(Color.white);g.drawString(""+score,40-3,60-3);switch (state){case GAME_OVER:g.drawImage(gameOverImage,0,0,null);break;case START:g.drawImage(startImage,0,0,null);break;}}public  void action() throws  Exception{  //讓地面動起來MouseListener l=new MouseAdapter(){@Overridepublic void mousePressed(MouseEvent e) {  //鼠標按下// brid.flappy(); //鳥向上飛try {switch (state) {case GAME_OVER:column1 = new Column(1);column2 = new Column(2);brid = new Brid();score = 0;state = START;break;case START:state = RUNNING;case RUNNING:brid.flappy();}}catch (Exception e2){}}};addMouseListener(l);while(true){switch (state){case START:brid.fly();ground.step();break;case RUNNING:ground.step();column1.step();column2.step();brid.step();brid.fly();if(brid.x==column1.x||brid.x==column2.x){score++;}if(brid.hit(ground)||brid.hit(column1)||brid.hit(column2)){state=GAME_OVER;}break;}repaint();Thread.sleep(1000/30);}
}public static void main(String[] args) throws  Exception {JFrame frame=new JFrame();BridGame game=new BridGame();frame.add(game);frame.setSize(440,670);frame.setLocationRelativeTo(null);frame.setVisible(true);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);game.action();}
}

Column類:

package bird;import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.font.LineMetrics;
import java.awt.image.BufferedImage;
import java.util.Random;//柱子
public class Column {int x,y;int width,height;int gap;int distance;BufferedImage image;Random random=new Random();public  Column(int n) throws  Exception{image= ImageIO.read(getClass().getResource("column.png"));width=image.getWidth();height =image.getHeight();gap=144;distance=245;x=550+(n-1)*distance;y=random.nextInt(218)+132;}
public void step(){x--;if(x==-width/2){x=distance*2-width/2;y=random.nextInt(218)+132;}
}
}

Ground類:

package bird;import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;public class Ground {int x,y;int width,height;BufferedImage image;public Ground() throws Exception{image= ImageIO.read(getClass().getResource("ground.png"));width=image.getWidth();height =image.getHeight();x=0;y=500;}//添加方法讓地面移動public void step(){x--;if(x==-109){x=0;}}}

?

?

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/161203.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/161203.shtml
英文地址,請注明出處:http://en.pswp.cn/news/161203.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

前置聲明避免循環依賴

當你有兩個類互相引用的情況時&#xff0c;使用前置聲明可以幫助你避免循環依賴。以下是一個簡單的例子&#xff0c;其中包含兩個頭文件、兩個源文件以及一個 main 函數的示例 Toolnterface.h #pragma once#include <QString>// Forward declaration of QToolBase clas…

Eclipse常用設置-亂碼

在用Eclipse進行Java代碼開發時&#xff0c;經常會遇到一些問題&#xff0c;記錄下來&#xff0c;方便查看。 一、properties文件亂碼 常用的配置文件properties里中文的亂碼&#xff0c;不利于識別。 處理流程&#xff1a;Window -> Preferences -> General -> Ja…

golang學習筆記——羅馬數字轉換器

文章目錄 羅馬數字轉換器代碼 參考LeetCode 羅馬數字轉整數代碼 羅馬數字轉換器 編寫一個程序來轉換羅馬數字&#xff08;例如將 MCLX 轉換成 1,160&#xff09;。 使用映射加載要用于將字符串字符轉換為數字的基本羅馬數字。 例如&#xff0c;M 將是映射中的鍵&#xff0c;其值…

Qt+sqlite3使用事務提升插入效率

參考&#xff1a; 【精選】SQLite批量插入效率_sqlite 批量插入_PengX_Seek的博客-CSDN博客 (1)不使用事務時&#xff1a; clock_t t_start clock();QSqlQuery query(db);QString sql("insert into test(col1,col2) values(1,2);");for (int i 0; i < 1000; i…

c++學習之哈希

目錄 1.關于unordered系列關聯式容器 2.關于unordered_map 3.哈希&#xff08;散列&#xff09;表的實現 一&#xff0c;直接定址法 二&#xff0c;除留余數法 方法一&#xff1a;閉散列&#xff1a;開放定址法 方法二&#xff1a;閉散列&#xff1a;哈希桶/拉鏈法 4.哈希…

機器學習/sklearn 筆記:K-means,kmeans++

1 K-means介紹 1.0 方法介紹 KMeans算法通過嘗試將樣本分成n個方差相等的組來聚類&#xff0c;該算法要求指定群集的數量。它適用于大量樣本&#xff0c;并已在許多不同領域的廣泛應用領域中使用。KMeans算法將一組樣本分成不相交的簇&#xff0c;每個簇由簇中樣本的平均值描…

hadoop shell操作 hdfs處理文件命令 hdfs上傳命令 hadoop fs -put命令hadoop fs相關命令 hadoop(十三)

hadoop fs -help rm 查看rm命令作用 hadoop fs 查看命令 1. 創建文件夾&#xff1a; # hdfs前綴也是可以的。更推薦hadoop hadoop fs -mkdir /sanguo 2.上傳至hdfs命令&#xff1a; 作用&#xff1a; 從本地上傳hdfs系統 &#xff08;本地文件被剪切走&#xff0c;不存在了&…

論防火墻的體系結構

防火墻的體系結構 防火墻的體系結構 雙重宿主主機體系結構。屏蔽主機體系結構。屏蔽子網體系結構。 雙重宿主主機體系結構 雙重宿主主機體系結構是指以一臺具有雙重宿主的主機計算機作為防火墻系統的主體&#xff0c;執行分離外部網絡與內部網絡的任務。該計算機至少有兩個…

【NGINX--4】大規模可擴展的內容緩存

1、緩存區 緩存內容并定義緩存的存儲位置。 使用 proxy_cache_path 指令定義共享內存緩存區和內容的位置&#xff1a; proxy_cache_path /var/nginx/cachekeys_zoneCACHE:60m levels1:2inactive3h max_size20g; proxy_cache CACHE;上述緩存定義示例在文件系統 /var/nginx/ca…

為什么要用多線程?

提高響應速度&#xff1a;對于耗時操作&#xff0c;使用多線程可以使得應用程序更快地響應用戶的請求&#xff0c;從而提高用戶體驗。實現并行計算&#xff1a;多線程可以同時執行多個任務&#xff0c;從而實現并行計算&#xff0c;提高程序的運行效率。提高CPU利用率&#xff…

html屬性值可以不用引號嗎,實例驗證

html屬性值可以不用引號 HTML元素的屬性值可以不適用引號來包裹&#xff0c;瀏覽器一樣可以將其進行渲染。不過&#xff0c;如果這樣寫HTML的代碼的話&#xff0c;屬性與屬性值之間需要用空格來進行隔開&#xff0c;避免后面的屬性變成前面屬性的屬性值。 提示&#xff1a;雖…

達夢列式存儲和clickhouse基準測試

要驗證達夢BigTable和ClickHouse的性能差異&#xff0c;您需要進行一系列基準測試。基準測試通常包括多個步驟&#xff0c;如準備測試環境、設計測試案例、執行測試、收集數據和分析結果。以下是您可以遵循的一般步驟&#xff1a; 準備測試環境&#xff1a; 確保兩個數據庫系統…

sql手工注入漏洞測試(MYSQL)-墨者-url信息

背景&#xff1a; 自己在墨者官網靶場練習的時候&#xff0c;一直出錯&#xff0c;手工容易出錯&#xff0c;所以列舉一些信息供大家核對&#xff0c;可以參考改動。 數據庫版本version() 5.7.22-0ubuntu0.16.04.1 當前數據庫名稱database&#xff08;) m…

模擬量采集----測量輸入的電流

生活中的模擬量有很多 大多都為電壓信號和電流信號 今天講如何測量輸入的電流信號 通過歐姆定律可知 電流測量的測量&#xff1a;是將電流加載在固定阻值的電阻上&#xff0c;來測量這個電阻二端的電壓 最后反算出電流的大小 所用的公式是IU/R 我們使用仿真軟件來看測量…

神經網絡中間層特征圖可視化(輸入為音頻)(二)

相比方法一個人感覺這種方法更好 import librosa import numpy as np import utils import torch import matplotlib.pyplot as pltclass Hook:def __init__(self):self.features Nonedef hook_fn(self, module, input, output):self.features output# 創建鉤子的實例 hook …

EasyExcel listener無法通過Autowired注入xxMapper

easyexcel listener無法通過Autowired注入xxMapper 文章目錄 easyexcel listener無法通過Autowired注入xxMapperbug記錄&#xff1a;解決方案&#xff1a;easyexcel 使用例子controllerServiceImpllistener bug記錄&#xff1a; productMapper注入一直為null,而procureDetailM…

Visual Studio(VS) C++程序LNK2005錯誤,提示“error LNK2005: _XXX已經在xxx.obj中定義”解決方案

1.問題如圖 2.出現原因 項目中有多個源文件或頭文件&#xff0c;include后導致有些變量重復定義&#xff0c;加上Visual Studio新版版要求更嚴格 3.解決辦法 查詢到的解決辦法很多不好用&#xff0c;此處記錄解決自己問題的一個辦法&#xff1a;直接讓編譯器忽略第二次定義的…

圖形數據庫的實戰應用:如何在 Neo4j 中有效管理復雜關系

關系數據庫管理系統( RDBMS ) 代表了最先進的技術&#xff0c;這在一定程度上要歸功于其由周邊技術、工具和廣泛的專業技能組成的完善的生態系統。 在這個涵蓋信息技術(IT) 和運營技術(OT) 的技術革命時代&#xff0c;人們普遍認識到性能方面出現了重大挑戰&#xff0c;特別是…

連續變量降維:主成分分析和因子分析

主成分分析&#xff08;Principal Component Analysis&#xff0c;PCA&#xff09;和因子分析&#xff08;Factor Analysis&#xff09;都是用于處理連續變量降維的統計方法&#xff0c;它們在數據分析和特征提取中經常被使用。盡管它們有一些相似之處&#xff0c;但它們的目標…

初識JVM(簡單易懂),解開JVM神秘的面紗

目錄 一、什么是JVM&#xff08;Java虛擬機&#xff09;&#xff1f; 二、JVM的功能 三、JVM的功能-即時編譯 四、常見的JVM 五、JVM的組成 五、JVM的工作流程 參考資料 一、什么是JVM&#xff08;Java虛擬機&#xff09;&#xff1f; 在Java的世界里&#xff0c;Java虛…