JAVA小游戲“飛翔的小鳥”

第一步是創建項目 項目名自擬

第二步創建個包名?來規范class

再創建一個包? 來存儲照片

如下:

??

代碼如下:

package game;
import java.awt.*;
import javax.swing.*;
import javax.imageio.ImageIO;public class Bird {Image image;int x,y;int width,height;int size;double g;double t;double v0;double speed;double s;double alpha;//?Image[] images;int index;public Bird() throws Exception{image=new ImageIcon("source/0.png").getImage();width = image.getWidth(null);height = image.getHeight(null);x=132;y=280;size=40;g=4;v0=20;t=0.25;speed=v0;s=0;alpha=0;images=new Image[8];for(int i=0;i<8;i++){images[i]=new ImageIcon("source/"+i+".png").getImage();}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=Math.PI/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;}
}

?

package game;import javax.imageio.ImageIO;
import java.util.*;import javax.swing.*;import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import javax.imageio.*;
import java.awt.*;public class BirdGame extends JPanel {Image background;Image startImage;Image overImage;Ground ground;//����Column column1,column2;Bird bird;int score;int state;//??//??����public static final int START=0;public static final int RUNNING=1;public static final int GAME_OVER=2;public BirdGame() throws Exception{background = new ImageIcon("./source/bg.png").getImage();startImage = new ImageIcon("./source/start.png").getImage();overImage=new ImageIcon("./source/gameover.png").getImage();//??ground=new Ground();column1=new Column(1);column2=new Column(2);bird=new Bird();score=0;state=0;}public void paint(Graphics g){g.drawImage(background, 0, 0,null);g.drawImage(ground.image, ground.x, ground.y, 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);Graphics2D g2=(Graphics2D) g;g2.rotate(-bird.alpha,bird.x,bird.y);g.drawImage(bird.image,bird.x-bird.width/2,bird.y-bird.height/2,null);g2.rotate(bird.alpha,bird.x,bird.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 START:g.drawImage(startImage, 0, 0, null);break;case GAME_OVER:g.drawImage(overImage, 0, 0, null);break;}}public void action() throws Exception{MouseListener l=new MouseAdapter(){public void mousePressed(MouseEvent e){try {switch(state) {case START://??state=RUNNING;break;case RUNNING:bird.flappy();break;case GAME_OVER:column1=new Column(1);column2=new Column(2);bird=new Bird();score=0;state=START;break;}}catch (Exception ex){ex.printStackTrace();}}};addMouseListener(l);while(true){switch(state){case START:bird.fly();ground.step();break;case RUNNING:ground.step();column1.step();column2.step();bird.fly();bird.step();score++;//if(bird.hit(ground)||bird.hit(column1)||bird.hit(column2)){state=GAME_OVER;}break;}	Thread.sleep(1000/60);repaint();}}public static void main(String[] args) throws Exception{JFrame frame=new JFrame();BirdGame game=new BirdGame();frame.add(game);frame.setSize(440,670);frame.setLocationRelativeTo(null);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);game.action();}}
package game;import java.util.*;
import java.awt.*;import javax.imageio.ImageIO;
import javax.swing.*;public class Column {Image image;int x,y;int width,height;int gap;int distance;Random random =new Random();public Column(int n) throws Exception{image=new ImageIcon("source/column.png").getImage();width=image.getWidth(null);height=image.getHeight(null);gap=144;distance=245;x=550+(n-1)*distance;y=random.nextInt(218)+132;}public void step(){x-=4;if(x<= -width/2){x=distance*2-width/2;y=random.nextInt(218);}}
}

?

?

package game;import javax.swing.*;
import java.awt.*;public class Ground {Image image;int x,y;int width,height;public Ground() throws Exception{image =new ImageIcon("source/ground.png").getImage();width=image.getWidth(null);height=image.getHeight(null);x=0;y=500;}public void step(){x-=4;if(x<=-109){x=0;}}}

運行結果如下所示:

?

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

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

相關文章

Windows下安裝Anaconda3并使用JupyterNoteBook

下載安裝包 Anaconda官網 進官網&#xff0c;點擊下載 自動根據當前系統下載對應的包了&#xff0c;安裝包大約1G&#xff0c;喝杯Java耐心等待。 安裝 很多人安裝C盤&#xff0c;我這里放D盤。 注意&#xff1a;你的文件夾目錄一定要不能有空格 然后其他的直接默認install即…

不同路徑 遞歸

int dfs(int i, int j, int m, int n) { if (i > m || j > n) return 0; // 越界了 if (i m && j n) return 1; // 找到一種方法&#xff0c;相當于找到了葉子節點 return dfs(i 1, j, m, n) dfs(i, j 1, m, n); } int u…

在線視頻課程教育系統源碼/網課網校/知識付費/在線教育系統/在線課程培訓系統源碼

源碼簡介&#xff1a; 在線視頻課程教育系統源碼&#xff0c;作為網課/網校/知識付費/在線教育系統&#xff0c;它有文章付費閱讀在線點播自動發貨付費閱讀VIP會員系統等功能。它是實用的在線課程培訓系統源碼。 發貨100-在線視頻課程教育系統&#xff0c;它是一款功能實用的…

優思學院|2024年質量管理的大趨勢

2023年我們已經順利度過了整年的大部分時間&#xff0c;2024年質量管理的趨勢和問題在全球范圍內都已經引起了關注&#xff0c;或者仍然是企業導航的首要任務。 1. 通貨膨脹與質量管理 2023年&#xff0c;全球范圍內通貨膨脹和嚴峻的經濟狀況成為企業最關心的問題之一。盡管物…

Flash可更換聲音語音芯片WT588F02系列:優勢盡顯,應用廣泛

在語音技術日益普及的今天&#xff0c;唯創知音推出的Flash可更換聲音語音芯片WT588F02系列備受關注。該系列芯片憑借其強大的性能與廣泛的應用領域&#xff0c;成為市場上的一顆璀璨明星。本文將分析WT588F02系列的優勢&#xff0c;并探討其應用場景&#xff0c;以展現其在語音…

typedef 的使用

typedef 的定義 typedef 是 C 和 C 中的一個關鍵字&#xff0c;用于給已有類型定義一個新的名字&#xff0c;與 class、struct、union 和 enum 聲明不同&#xff0c;typedef 聲明不引入新類型&#xff1b;它們引入現有類型的新名稱 typedef 的語法格式 typedef existing_typ…

gitlab 12升級14(解決各種報錯問題)

1.這里是從自己公司的源下載的rpm包&#xff0c;需要換成自己的 2.從12的最后一個版本升級到14的最后一個版本 # 停服務 [rootdocker test]# gitlab-ctl stop puma && gitlab-ctl stop sidekiq && gitlab-ctl stop nginx && gitlab-ctl status# 進入…

前端如何判空

這樣判空就會報錯 loadNode(node, resolve)console.log("node")console.log(node)if (node.data ! null) {this.get(ctx /publicity/publicityType/typeTreeData?id node.data.id).then((res) > {resolve(res)})}}, 需要這樣寫&#xff0c;用typeof來做類型判…

【webrtc】ModuleRtpRtcpImpl2: RtpRtcp DEPRECATED_Create 廢棄了

基于m98 代碼。Deprecate the static RtpRtcp::Create() method. 提交記錄RtpRtcp::Create factory method 工廠方法廢棄了。std::unique_ptr<RtpRtcp> RtpRtcp::DEPRECATED_Create(const Configuration& configuration) {RTC_DCHECK

java 實現發送郵箱,復制即用,包含郵箱設置第三方登錄授權碼獲取方法

application.yml spring:profiles:active: dev # active: test#郵件附件上傳文件大小限制servlet:multipart:max-file-size: 50MB #單個文件大小限制max-request-size: 100MB #總文件大小限制&#xff08;允許存儲文件的文件夾大小&#xff09;mail:default-encoding: UTF…

【開題報告】基于SpringBoot的機車模型交流平臺的設計與實現

1.研究背景 機車模型是一種受到廣泛關注的模型制作愛好&#xff0c;它涵蓋了機車模型的收藏、展示、制作等多個方面。然而&#xff0c;由于機車模型愛好者的數量較少&#xff0c;且分散在不同的地區和社區&#xff0c;導致他們難以進行互動和資源共享。因此&#xff0c;需要一…

COBOL排序問題

*SORT排序文件文件超長&#xff0c;將主鍵保存在臨時文件里&#xff0c;超長的數據從數組里面去檢索獲取。 IDENTIFICATION DIVISION. PROGRAM-ID. TEST002. * ENVIRONMENT DIVISION. CONFIGURATION SECTION. …

YOLOv5改進: Inner-IoU基于輔助邊框的IoU損失,高效結合 GIoU, DIoU, CIoU,SIoU 等 | 2023.11

??????本文獨家改進:Inner-IoU引入尺度因子 ratio 控制輔助邊框的尺度大小用于計算損失,并與現有的基于 IoU ( GIoU, DIoU, CIoU,SIoU )損失進行有效結合 推薦指數:5顆星 新穎指數:5顆星 ??????Yolov5/Yolov7魔術師,獨家首發創新(原創),適用于…

安卓畢業設計基于安卓android微信小程序的培訓機構系統

項目介紹 本文以實際運用為開發背景&#xff0c;運用軟件工程原理和開發方法&#xff0c;它主要是采用java語言技術和mysql數據庫來完成對系統的設計。整個開發過程首先對培訓機構管理系統進行需求分析&#xff0c;得出培訓機構管理系統主要功能。接著對培訓機構管理系統 進行…

基于Python實現的一個命令行文本計數統計程序,可統計純英文txt文本中的字符數,單詞數,句子數,Python文件行數

項目簡介 這是一個用 Python 編寫的命令行文本計數統計程序。 基礎功能&#xff1a;能正確統計導入的 純英文txt文本 中的 字符數&#xff0c;單詞數&#xff0c;句子數。擴展功能&#xff1a;能正確統計導入的 Python 文件中的代碼行數&#xff0c;注釋行數&#xff0c;空白…

如何使用VisualSVN在Windows系統上設置SVN服務器并公網遠程訪問

文章目錄 前言1. VisualSVN安裝與配置2. VisualSVN Server管理界面配置3. 安裝cpolar內網穿透3.1 注冊賬號3.2 下載cpolar客戶端3.3 登錄cpolar web ui管理界面3.4 創建公網地址 4. 固定公網地址訪問 正文開始前給大家推薦個網站&#xff0c;前些天發現了一個巨牛的 人工智能學…

seaTunnel使用

如何源碼編譯seaTunnel 參考Set Up Develop Environment 編譯前準備 下列軟件需要提前安裝好 GitJava ( JDK8/JDK11) 并設置JAVA_HOME 環境變量Scala (只支持 scala 2.11.12 )JetBrains IDEA . 下載源碼并編譯 git clone gitgithub.com:apache/seatunnel.git cd seatunne…

vivado聯合modelsim測試覆蓋率

&#xff08;1&#xff09;配置環境 安裝modelsim和vivado。點擊vivado菜單欄中的tools&#xff0c;在下拉選項中選擇compile simulation libraries。simulator選項選擇&#xff1a;modelsim simulator。compile library location表示編譯庫存放的路徑。simulator executable p…

java.sql.SQLException: Connection has already been closed

背景&#xff1a; 通過一個接口觸發后臺數據庫的批量更新操作&#xff0c;原本只是一個觸發動作&#xff0c;不需要返回值&#xff0c;因此沒有關心出現的http超時問題。后面發現批量更新任務中斷了&#xff0c;查日志發現了Connection has already been closed報錯。 具體的…

【網絡奇緣】- 計算機網絡|性能指標|體系結構

&#x1f308;個人主頁: Aileen_0v0&#x1f525;系列專欄: 一見傾心,再見傾城 --- 計算機網絡~&#x1f4ab;個人格言:"沒有羅馬,那就自己創造羅馬~" 目錄 溫故而知新 計算機網絡性能指標 時延 時延帶寬積 往返時延RTT 訪問百度?編輯 訪問b站 訪問谷歌 …