飞翔的鸟小游戏

第一步是创建项目 项目名自拟

第二步创建个包名 来规范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.mzph.cn/news/173911.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BUUCTF刷题之路--ciscn_2019_es_21

这题考察的是一个栈迁移的知识。作为入门学习栈迁移是个不可多得的好题。程序简单并且是32位的架构。保护也没有开&#xff0c;因此对于理解栈迁移再好不过了。看一下这题的基本信息&#xff1a; 栈迁移的基本原理其实就是栈的空间不够我们利用。也就是不不足以覆盖返回地址&am…

python之yaml技术(可用于写接口自动化的测试用例文件)

一.yaml介绍 yaml文件是一种配置文件类型&#xff0c;相比较ini&#xff0c;conf配置文件来说&#xff0c;更加的简洁&#xff0c;操作也更加简单&#xff0c;同时可以存放不同类型的数据。 yaml使用场景 配置文件 测试用例 二.yaml语法 大小写敏感 使用缩进表示层级关系…

Pytorch深度学习实战2-1:详细推导Xavier参数初始化(附Python实现)

目录 1 参数初始化2 Xavier参数初始化原理2.1 前向传播阶段2.2 反向传播阶段2.3 可视化思考 3 Python实现 1 参数初始化 参数初始化在深度学习中起着重要的作用。在神经网络中&#xff0c;参数初始化是指为模型中的权重和偏置项设置初始值的过程。合适的参数初始化可以帮助模型…

单片机毕设实物买的成品,论文是自己查资料和照着实物写的

单片机毕设实物买的成品&#xff0c;论文是自己查资料和照着实物写的&#xff0c;算学术不端吗&#xff1f; 很多人的想法可能是这样的&#xff1a; 一般来说&#xff0c;毕业论文是独立完成的学术研究&#xff0c;需要表明作者自己的思考和研究成果&#xff0c;应该包括自己的…

Google Shopping Action

Google Shopping Action是Google推出的一项在线购物服务&#xff0c;可以帮助零售商将产品推广和销售到Google平台上的消费者中。通过Google Shopping Action&#xff0c;用户可以在谷歌搜索页面上直接购买商品&#xff0c;而不需要离开搜索结果页面。 Google Shopping Action的…

饺子馆外卖点餐系统小程序效果如何

餐饮行业所涵盖的细分类目非常广&#xff0c;同时又是经济发展的重要支撑&#xff0c;市场规模非常高。饺子是很多人非常喜欢吃的食物&#xff0c;尤其过年的时候&#xff0c;必是少不了几碗饺子&#xff0c;平时也有大量人前往饺子馆。 但相对比火锅、炒菜馆则少些竞争力&…

原创文章生成器-批量原文高质量伪原创

在信息爆炸的时代&#xff0c;创作者们面临的挑战愈发严峻。写一篇原创文章&#xff0c;不仅需要脑洞大开&#xff0c;还得担心自己的文字是否能够迎合读者口味。原创文章生成器只需输入标题或关键词&#xff0c;即可轻松生成原创文章。而与此同时&#xff0c;147SEO改写软件也…

Vatee万腾的数字创新征途:vatee科技力量的独特奇点

在数字化的时代浪潮中&#xff0c;Vatee万腾如一颗耀眼的明星&#xff0c;以其独特的科技奇点引领着数字创新的征途。无论是在人工智能、大数据、云计算&#xff0c;还是智能化领域&#xff0c;Vatee万腾都展现出了与众不同的创新力量&#xff0c;为科技征途描绘了独一无二的奇…

【Springboot系列】SpringBoot整合WebSocket,既然如此简单(含源码)

文章目录 前言&#xff1a;什么是WebSocket&#xff1f;Spring Boot中的WebSocket支持WebSocket和HTTP优劣势WebSocket的优势&#xff1a;1.实时性&#xff1a;2.较低的延迟&#xff1a;3.较小的数据传输量&#xff1a;4.更好的兼容性&#xff1a; HTTP的优势&#xff1a;1.简单…

教师如何高质量备课

备课是教学工作中不可或缺的一部分。高质量的备课不仅可以提高课堂效率&#xff0c;还可以更好地激发学生的学习兴趣和积极性。那么&#xff0c;如何高质量备课呢&#xff1f; 深入了解学生 备课的目的是教授知识&#xff0c;让学生掌握知识。因此&#xff0c;了解学生的需求和…

「直播预告」替代 Oracle,我们还有多长的路要走?

数字经济浪潮席卷全球&#xff0c;我国数字经济也进入快速发展阶段&#xff0c;作为数字化重要载体&#xff0c;国产软件的重要性不言而喻。近年来&#xff0c;国际局势复杂多变&#xff0c;在客观要求和主观需求的双重驱动下&#xff0c;核心技术自主可控的紧迫性也愈加凸显。…

​使用PotPlayer播放器查看软解和硬解4K高清视频时的CPU及GPU占用情况​

目录 1、问题说明 2、PotPlayer播放器介绍 3、视频的软解与硬解 4、使用PotPlayer查看4K高清视频软解和硬解时的CPU占用情况 4.1、使用软解时CPU和GPU占用情况 4.2、使用硬解时CPU和GPU占用情况 5、最后 VC常用功能开发汇总&#xff08;专栏文章列表&#xff0c;欢迎订阅…

学嵌入式,已经会用stm32做各种小东西了,下一步是什么

学嵌入式&#xff0c;已经会用stm32做各种小东西了&#xff0c;下一步是什么&#xff0c;研究stm32的内部吗&#xff1f; 针对题主这种类型的&#xff0c;首先我想提出几个技术问题。 1&#xff0c;除了那几个常用的外设&#xff0c;stm32上集成的众多外设是否都有实际的使用经…

Day58权限提升-网站权限后台漏洞第三方获取

webshell 一般我们的渗透流程就是信息收集&#xff0c;发现漏洞&#xff0c;漏洞利用&#xff0c;一些漏洞成功之后获得一些相应的权限&#xff0c;还有一些是漏洞利用成功之后并没有取得的权限&#xff0c;而这个权限是要通过漏洞利用之后在利用其它地方取货的权限。 权限的获…

百度人工智能培训第二天笔记

参加了百度人工智能初步培训&#xff0c;主要是了解一下现在人工智能的基本情况&#xff0c;以便后续看可以参与一些啥&#xff1f; 下面就继续前一天的内容记录。 一、先做电动自行车的电梯里检测 先进行图片资料的上传与标注&#xff0c;这个昨天的最好也说了一下。 训练完后…

sql中的left join, right join 和inner join,union 与union all的用法

left join&#xff0c; right join 和inner join&#xff1a;这些都是SQL中用来连接两个或多个表的操作。 union&#xff0c;union all&#xff1a;用于合并两个或多个 SELECT 语句的结果。 但是有时候&#xff0c;对于Select出来的结果集不是很清楚。 假设我们有两张表。pers…

让CHAT简单说明下软件工程师的工作性质

问CHAT&#xff1a;软件工程师的工作性质是什么&#xff1f; CHAT回复&#xff1a;软件工程师的工作性质主要包括以下几点&#xff1a; 1. 解决问题&#xff1a;软件工程师的很大一部分工作就是解决问题&#xff0c;这可能是来自客户的特定需求&#xff0c;也可能是软件开发过…

现货黄金走势图下载与保存

MetaTrader 4 (MT4) 是一款在全球范围内广受欢迎的现货黄金交易软件&#xff0c;简单性和灵活性是其深受市场欢迎的原因。它的显示界面的主要部分由品种的走势图表组成&#xff0c;投资者可以在其中查看实时的行情走势。屏幕左上角是市场观察窗口&#xff0c;当中列出了平台所有…

NABOCUL集团专注科研创新 为内源护肤、护发提供更优选择

据权威媒体报道,日本知名化妆品集团NABOCUL Cosmetics株式会社研通过多年的科技创新和内源护肤研究,创新研发Olandu、TakuMin、“CIMIVOSOTUY”等核心成分,向中国消费者传递“关爱恒久之美”的理念,更好地释放内源护肤的独特魅力,为人们内源护肤、护发提供了全新选择。 据了解,…

JVM中的双亲委派模型

双亲委派模型&#xff08;Parent-Delegation Model&#xff09;是Java类加载器&#xff08;ClassLoader&#xff09;机制的一种实现方式。它是Java中实现类加载的一种层次结构模型。 双亲委派模型的工作过程是&#xff1a;在Java中&#xff0c;每个类加载器实例都有一个父类加载…