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

基于Java制作一個好玩的打飛機游戲

 更新時間:2022年01月26日 10:54:39   作者:白大鍋  
這篇文章主要介紹了基于Java制作的打飛機小游戲,這里整理了詳細的代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下

1.效果圖

2.項目整體構(gòu)造

3.主類代碼展示

public class MyGameFrame ?extends ?Frame {
?? ?
?? ?Image ? planeImg ?= GameUtil.getImage("images/plane.png");
?? ?Image ? bg ?= GameUtil.getImage("images/bg.jpg");
?? ?
?? ?Plane ? plane = new Plane(planeImg,250,250);
?? ?Shell[] ? shells = new Shell[50];
?? ?
?? ?Explode ? bao ;
?? ?Date ?startTime = new Date();
?? ?Date ?endTime;
?? ?int period; ? //游戲持續(xù)的時間
?? ?
?? ?//@Override
?? ?public void paint(Graphics g) {?? ??? ?//自動被調(diào)用。 ?g相當于一只畫筆
?? ??? ?Color ? c = ?g.getColor();
?? ??? ?g.drawImage(bg, 0, 0, null);
?? ??? ?
?? ??? ?plane.drawSelf(g); ?//畫飛機
?? ??? ?
?? ??? ?//畫出所有的炮彈
?? ??? ?for(int i=0;i<shells.length;i++){
?? ??? ??? ?shells[i].draw(g);
?? ??? ??? ?
?? ??? ??? ?//飛機和炮彈的碰撞檢測?。?!
?? ??? ??? ?boolean ?peng = shells[i].getRect().intersects(plane.getRect());
?? ??? ??? ?if(peng){
?? ??? ??? ??? ?plane.live = false;
?? ??? ??? ??? ?if(bao ==null){
?? ??? ??? ??? ??? ?bao ?= new Explode(plane.x, plane.y);
?? ??? ??? ??? ??? ?
?? ??? ??? ??? ??? ?endTime = new Date();
?? ??? ??? ??? ??? ?period = (int)((endTime.getTime()-startTime.getTime())/1000);
?? ??? ??? ??? ?}
?? ??? ??? ??? ?bao.draw(g);
?? ??? ??? ?}
?? ??? ??? ?
?? ??? ??? ?//計時功能,給出提示
?? ??? ??? ?if(!plane.live){
?? ??? ??? ??? ?g.setColor(Color.red);
?? ??? ??? ??? ?Font ? f ?= ?new Font("宋體", Font.BOLD, 50);
?? ??? ??? ??? ?g.setFont(f);
?? ??? ??? ??? ?g.drawString("時間:"+period+"秒", (int)plane.x, (int)plane.y);
?? ??? ??? ?}
?? ??? ??? ?
?? ??? ?}
?? ??? ?
?? ??? ?g.setColor(c);
?? ?}
?? ?
?? ?
?? ?//幫助我們反復的重畫窗口!
?? ?class ?PaintThread ?extends ?Thread ?{
?? ??? ?//@Override
?? ??? ?public void run() {
?? ??? ??? ?while(true){
?? ??? ??? ??? ?repaint();?? ??? ?//重畫
?? ??? ??? ??? ?
?? ??? ??? ??? ?try {
?? ??? ??? ??? ??? ?Thread.sleep(40); ? ?? ?//1s=1000ms
?? ??? ??? ??? ?} catch (InterruptedException e) {
?? ??? ??? ??? ??? ?e.printStackTrace();
?? ??? ??? ??? ?}?? ??? ?
?? ??? ??? ?}
?? ??? ?}
?? ??? ?
?? ?}
?? ?
?? ?//定義鍵盤監(jiān)聽的內(nèi)部類
?? ?class ? KeyMonitor extends ?KeyAdapter ?{

?? ??? ?//@Override
?? ??? ?public void keyPressed(KeyEvent e) {
?? ??? ??? ?plane.addDirection(e);
?? ??? ?}

?? ??? ?//@Override
?? ??? ?public void keyReleased(KeyEvent e) {
?? ??? ??? ?plane.minusDirection(e);
?? ??? ?}
?? ??? ?
?? ??? ?
?? ?}
?? ?
?? ?
?? ?/**
?? ? * 初始化窗口
?? ? */
?? ?public ?void ?launchFrame(){
?? ??? ?this.setTitle("飛機大戰(zhàn)");
?? ??? ?this.setVisible(true);
?? ??? ?this.setSize(Constant.GAME_WIDTH?? ?, Constant.GAME_HEIGHT);
?? ??? ?this.setLocation(300, 300);
?? ??? ?
?? ??? ?this.addWindowListener(new WindowAdapter() {
?? ??? ??? ?//@Override
?? ??? ??? ?public void windowClosing(WindowEvent e) {
?? ??? ??? ??? ?System.exit(0);
?? ??? ??? ?}
?? ??? ?});
?? ??? ?
?? ??? ?new PaintThread().start();?? ?//啟動重畫窗口的線程
?? ??? ?addKeyListener(new KeyMonitor()); ? //給窗口增加鍵盤的監(jiān)聽
?? ??? ?
?? ??? ?
?? ??? ?//初始化50個炮彈
?? ??? ?for(int i=0;i<shells.length;i++){
?? ??? ??? ?shells[i] = new Shell();
?? ??? ?}
?? ??? ?
?? ?}

4.飛機類代碼展示

public ?void ?drawSelf(Graphics ?g){
?? ??? ?if(live){
?? ??? ??? ??? ?g.drawImage(img, (int)x,(int) y, null);
?? ??? ??? ??? ?
?? ??? ??? ??? ?if(left){
?? ??? ??? ??? ??? ?x -=speed;
?? ??? ??? ??? ?}
?? ??? ??? ??? ?if(right){
?? ??? ??? ??? ??? ?x += speed;
?? ??? ??? ??? ?}
?? ??? ??? ??? ?if(up){
?? ??? ??? ??? ??? ?y -=speed; ? ?//y = y-speed;
?? ??? ??? ??? ?}
?? ??? ??? ??? ?if(down){
?? ??? ??? ??? ??? ?y += speed;
?? ??? ??? ?}
?? ??? ?}else{
?? ??? ??? ?
?? ??? ?}
?? ??? ?
?? ??? ?
?? ??? ?
?? ?}
?? ?
?? ?public ?Plane(Image ?img, double x, double y){
?? ??? ?this.img = img;
?? ??? ?this.x = x;
?? ??? ?this.y = y;
?? ??? ?this.speed = 3;
?? ??? ?this.width = img.getWidth(null) ;
?? ??? ?this.height = img.getHeight(null);
?? ??? ?
?? ?}
?? ?
?? ?//按下某個鍵,增加相應的方向
?? ?public ?void ? addDirection(KeyEvent ?e){
?? ??? ?switch (e.getKeyCode()) {
?? ??? ?case KeyEvent.VK_LEFT:
?? ??? ??? ?left = true;
?? ??? ??? ?break;
?? ??? ?case KeyEvent.VK_UP:
?? ??? ??? ?up = true;
?? ??? ??? ?break;
?? ??? ?case KeyEvent.VK_RIGHT:
?? ??? ??? ?right = true;
?? ??? ??? ?break;
?? ??? ?case KeyEvent.VK_DOWN:
?? ??? ??? ?down = true;
?? ??? ??? ?break;
?? ??? ?}
?? ?}

5.炮彈類代碼展示

public ?Shell(){
?? ??? ?x = 200;
?? ??? ?y = 200;
?? ??? ?width=10;
?? ??? ?height = 10;
?? ??? ?speed = 3;
?? ??? ?degree = Math.random()*Math.PI*2;
?? ?}
?? ?
?? ?public ?void ? draw(Graphics ?g){
?? ??? ?Color ? c = ?g.getColor();
?? ??? ?g.setColor(Color.YELLOW);
?? ??? ?
?? ??? ?g.fillOval((int)x,(int) y, width, height);
?? ??? ?
?? ??? ?//炮彈沿著任意角度去飛
?? ??? ?x += speed*Math.cos(degree);
?? ??? ?y += speed*Math.sin(degree);
?? ??? ?
?? ??? ?
?? ??? ?if(x<0||x>Constant.GAME_WIDTH-width){
?? ??? ??? ?degree ?= Math.PI - degree;
?? ??? ?}
?? ??? ?
?? ??? ?if(y<30||y>Constant.GAME_HEIGHT-height){
?? ??? ??? ?degree ?= - degree;
?? ??? ?}

6.爆炸類代碼展示

static {
?? ??? ?for (int i = 0; i < 16; i++) {
?? ??? ??? ?imgs[i] = GameUtil.getImage("images/explode/e" + (i + 1) + ".gif");
?? ??? ??? ?imgs[i].getWidth(null);
?? ??? ?}
?? ?}

?? ?int count;

?? ?public void draw(Graphics g) {
?? ??? ?if (count <= 15) {
?? ??? ??? ?g.drawImage(imgs[count], (int) x, (int) y, null);
?? ??? ??? ?count++;
?? ??? ?}
?? ?}

?? ?public Explode(double x, double y) {
?? ??? ?this.x = x;
?? ??? ?this.y = y;
?? ?}

到此這篇關(guān)于基于Java制作一個好玩的打飛機游戲的文章就介紹到這了,更多相關(guān)Java打飛機游戲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Java如何利用數(shù)字描述更多的信息

    詳解Java如何利用數(shù)字描述更多的信息

    在數(shù)據(jù)庫里面?,通常我們會用數(shù)字的遞進來描述狀態(tài)等信息?,?但是如果想進行更復雜的操作?,?就有必要對二進制有一定理解了。本文就來趣味性的探討一下?,?如何通過更少的空間描述更多的信息
    2022-09-09
  • SpringBoot攔截器Filter的使用方法詳解

    SpringBoot攔截器Filter的使用方法詳解

    這篇文章主要介紹了SpringBoot攔截器Filter的使用方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • Java簡易登錄注冊小程序

    Java簡易登錄注冊小程序

    這篇文章主要為大家詳細介紹了Java圖形界面開發(fā),簡易登錄注冊小程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • Java快速掌握Vector類方法

    Java快速掌握Vector類方法

    Vector?類實現(xiàn)了一個動態(tài)數(shù)組。和?ArrayList?很相似,但是兩者是不同的:Vector?是同步訪問的;Vector?包含了許多傳統(tǒng)的方法,這些方法不屬于集合框架
    2022-03-03
  • 使用maven war包打包去除jar包瘦身

    使用maven war包打包去除jar包瘦身

    這篇文章主要介紹了使用maven war包打包去除jar包瘦身操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Spring及Mybatis整合占位符解析失敗問題解決

    Spring及Mybatis整合占位符解析失敗問題解決

    這篇文章主要介紹了Spring及Mybatis整合占位符解析失敗問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • java數(shù)據(jù)結(jié)構(gòu)排序算法之歸并排序詳解

    java數(shù)據(jù)結(jié)構(gòu)排序算法之歸并排序詳解

    這篇文章主要介紹了java數(shù)據(jù)結(jié)構(gòu)排序算法之歸并排序,結(jié)合具體實例形式詳細分析了歸并排序的原理、實現(xiàn)技巧與相關(guān)注意事項,需要的朋友可以參考下
    2017-05-05
  • JDK動態(tài)代理,代理接口沒有實現(xiàn)類,實現(xiàn)動態(tài)代理方式

    JDK動態(tài)代理,代理接口沒有實現(xiàn)類,實現(xiàn)動態(tài)代理方式

    這篇文章主要介紹了JDK動態(tài)代理,代理接口沒有實現(xiàn)類,實現(xiàn)動態(tài)代理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • SpringBoot應用的接口訪問從HTTP改為HTTPS

    SpringBoot應用的接口訪問從HTTP改為HTTPS

    本文主要介紹了SpringBoot應用的接口訪問從HTTP改為HTTPS,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-03-03
  • 深入理解Java設(shè)計模式之外觀模式

    深入理解Java設(shè)計模式之外觀模式

    這篇文章主要介紹了JAVA設(shè)計模式之外觀模式的的相關(guān)資料,文中示例代碼非常詳細,供大家參考和學習,感興趣的朋友可以了解下
    2021-11-11

最新評論

常德市| 江津市| 萝北县| 靖远县| 石屏县| 丰顺县| 德格县| 南漳县| 建瓯市| 林西县| 商南县| 紫阳县| 芦山县| 仙游县| 阿瓦提县| 双鸭山市| 肃宁县| 商南县| 霞浦县| 麦盖提县| 十堰市| 阿拉善左旗| 临潭县| 福泉市| 苏尼特右旗| 丰宁| 仲巴县| 章丘市| 皮山县| 揭东县| 南投县| 武鸣县| 龙江县| 桑植县| 鲁甸县| 浑源县| 阳信县| 新龙县| 尖扎县| 车致| 安图县|