Java王者火柴人

前言

基于Java的飞翔小鸟游戏,本代码来自b站up主分享。本游戏所需的图片素材需要自己获取并下载,在此视频下,视频链接:【Java经典小游戏项目之飞翔的小鸟】 https://www.bilibili.com/video/BV1ou411o7br/?p=10&share_source=copy_web&vd_source=4611ec45767280678018f593c547e388。

 

 

启动入口

package com.bird.app;

import com.bird.main.GameFrame;

 

public class GameApp {

    public static void main(String[] args) {

        new GameFrame();

    }

}

主类

 

游戏主窗口类

package com.bird.main;

 

import static com.bird.util.Constant.*;

 

import java.awt.*;

import java.awt.event.*;

import java.awt.image.BufferedImage;

 

/**

 * 游戏的主窗口类,所有的关于游戏中绘制的内容都在此类中完成。

 */

public class GameFrame extends Frame {

 

    //实例化gamebackGround类

    private GameBackGround gameBackGround;

 

    //实例化Bird类

    private Bird bird;

 

    //实例化GameBarrierLayer类

    private GameBarrierLayer gameBarrierLayer;

 

    //实例化GameFrontGround类

    private GameFrontGround gameFrontGround;

 

 

    //存放图片的图片

    private BufferedImage buffimg = new BufferedImage(FRAM_WIDTH,FRAM_HEIGNT,BufferedImage.TYPE_4BYTE_ABGR);

 

 

    //构造方法中初始化一些参数

    public GameFrame(){

        //窗口是否可见

        setVisible(true);

        //窗口的大小

        setSize(FRAM_WIDTH,FRAM_HEIGNT);

        //窗口的标题

        setTitle(FRAM_TITLE);

        //窗口的初始化位置

        setLocation(FRAM_X,FRAM_Y);

        //窗口的大小不可改变

        setResizable(false);

 

 

        //窗口的关闭事件

        addWindowListener(new WindowAdapter() {

            @Override

            public void windowClosing(WindowEvent e) {

                System.exit(0);//结束程序

            }

        });

 

 

        //初始化游戏对象

        initGamg();

 

        new run().start();

 

        //添加按键监听

        addKeyListener(new KeyAdapter() {

            @Override

            public void keyPressed(KeyEvent e) {

                add(e);

            }

 

            @Override

            public void keyReleased(KeyEvent e) {

                minu(e);

            }

        });

 

 

 

    }

 

    //对游戏中的对象初始化

    public void initGamg(){

        gameBackGround = new GameBackGround();

        bird = new Bird();

        gameFrontGround = new GameFrontGround();

        gameBarrierLayer = new GameBarrierLayer();

    }

 

 

 

    class run extends Thread{

        @Override

        public void run() {

            while (true) {

                repaint();

                try {

                    Thread.sleep(33);

                } catch (InterruptedException e) {

                    e.printStackTrace();

                }

            }

        }

    }

 

 

    /**

     * 所有的我们需要绘制的内容都在此方法中进行调用绘制

     */

    @Override

    public void update(Graphics g) {

        if(bird.life){

            //得到图片的画笔

            Graphics graphics = buffimg.getGraphics();

 

            gameBackGround.draw(graphics);

            bird.draw(graphics);

            gameFrontGround.draw(graphics);

            gameBarrierLayer.draw(graphics,bird);

 

            //一次性的将图片绘制到屏幕中

            g.drawImage(buffimg,0,0,null);

        }else {

            String over = "游戏结束";

            g.setColor(Color.red);

            g.setFont(new Font("微软雅黑",1,60));

            g.drawString(over,180,250);

 

            String reset = "Space Reset Game";

            g.drawString(reset,25,350);

        }

    }

    //按键

    public void add(KeyEvent e){

        switch (e.getKeyCode()){

            case KeyEvent.VK_UP:

                bird.fly(1);

                break;

            case KeyEvent.VK_SPACE:

                if (bird.life == false) {

                    restart();

                }

                break;

        }

    }

    //抬键

    public void minu(KeyEvent e){

        switch (e.getKeyCode()){

            case KeyEvent.VK_UP:

                bird.fly(5);

                break;

        }

    }

 

    /**

     * 重置游戏

     */

    public void restart(){

        gameBarrierLayer.restant();

        bird.restartDraw();

    }}

游戏前景类

package com.bird.main;

 

import com.bird.util.Constant;

import com.bird.util.GameUtil;

 

import java.awt.*;

import java.awt.image.BufferedImage;

import java.util.ArrayList;

import java.util.List;

import java.util.Random;

 

/**

 * 游戏的前景类

 */

public class GameFrontGround {

    //云彩的个数

    private static final int CLOUND_COUNT = 2;

    //存放云彩的容器

    private List<Cloud> clouds;

    //云彩的飞行速度

    private static final int CLOUNG_SPEED = 1;

    //使用到图片资源

    private BufferedImage[] img;

 

    //用于产生随机数

    private Random random;

 

    // 构造器初始化数据

    public GameFrontGround() {

        clouds = new ArrayList<>();

        img = new BufferedImage[CLOUND_COUNT

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/487090.shtml

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

相关文章

Windows 快捷键

win快捷键&#xff1a; 单独按Windows&#xff1a;显示或隐藏 “开始”功能表 WindowsBREAK&#xff1a;显示“系统属性” 对话框 WindowsD&#xff1a;显示桌面或恢复桌面 WindowsM&#xff1a;最小化所有窗口 WindowsShiftM&#xff1a;还原最小化的窗口 CtrlShiftN&am…

day2-元组 列表-赋值和深浅拷贝

一 元组 元组其实跟列表差不多&#xff0c;也是存一组数&#xff0c;只不是它一旦创建&#xff0c;便不能再修改&#xff0c;所以又叫只读列表 用途&#xff1a;一般情况下用于自己写的程序能存下数据&#xff0c;但是又希望这些数据不会被改变&#xff0c;比如&#xff1a;数据…

乖乖给行人让路?学界推出无人机控制技术NMPC,可在低空中实现自主导航和避障...

来源&#xff1a;万物智能视界前天&#xff0c;在深圳经济特区40周年庆上&#xff0c;上千架无人机在深圳上空演绎了一场大型灯光秀。近些年&#xff0c;各种无人机高空秀屡见不鲜&#xff0c;在刚刚过去的七夕夜上&#xff0c;上海警方也运用无人机开启了一场反欺诈安防宣传。…

个人银行管理系统

// 4-10个人银行账户管理系统.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 #include <iostream> #include <cmath> using namespace std; class SavingsAccount {//存储账户类 private:int id; //账号double balance; //余额…

一天学习一个设计模式之命令模式

命令模式&#xff08;Command&#xff09;&#xff0c;将一个请求封装为一个对象&#xff0c;从而使你可用不同的请求对客户进行参数化&#xff1b;对请求排队或记录请求日志&#xff0c;以及支持可撤销的操作。 代码如下&#xff1a; 1 /** 2 * 抽象命令角色类 3 */ 4 publi…

PNAS:张航课题组揭示人类为何“扭曲”概率信息

来源&#xff1a;脑科学2020年8月25日&#xff0c;北京大学心理与认知科学学院、北京大学IDG麦戈文脑科学研究所、北大-清华生命科学联合中心的张航研究组在美国科学院院刊&#xff08;PNAS&#xff09;上发表了题为“The bounded rationality of probability distortion”的文…

修改结构体中成员的值

#include <iostream> using namespace std; struct student { char name[10]; float grade; }; //更改student数据的grade成员&#xff0c;参数形式为引用 void change(student& x, float grade) { x.grade grade; } //更改student数据的grade成员&…

Object.prototype的成员介绍

3.Object.prototype的成员介绍 Object.prototype是js中所有的对象的祖宗Object.prototype中所有的成员都可以被js中所有的对象使用&#xff01;3.1. 方法&#xff1a; hasOwnProperty 语法&#xff1a; 对象.hasOwnProperty("属性名")功能&#xff1a; 判断当前对象自…

为什么AI感知与人类感知无法直接比较?

来源丨TechTalks作者丨Ben Dickson编译丨科技行者人类级别的表现、人类级别的精度……在开发AI系统的企业中&#xff0c;我们经常会听到这类表述&#xff0c;其指向范围则涵盖人脸识别、物体检测&#xff0c;乃至问题解答等各个方面。随着机器学习与深度学习的不断进步&#xf…

C++中冒号的用法

1.冒号&#xff08;:&#xff09;用法 &#xff08;1&#xff09;表示机构内位域的定义&#xff08;即该变量占几个bit空间&#xff09; typedef struct _XXX{unsigned char a:4;unsigned char c;} ; XXX&#xff08;2&#xff09;构造函数后面的冒号起分割作用&#xff0c;是…

JaveScript运算符(JS知识点归纳三)

JaveScript中有许多的运算符,在这里就只说明一些需要注意的. 01 一元运算符 一元:指的是参与运算的操作数只有一个 最经常使用的是 -- 计算规则: /-- 前置于操作数的时候 , 先进行 aa1,再去进行运算 /--后置于操作数的时候 , 先进行运算,在进行aa1 无论/--前置于操作数还是后…

微软白皮书:47页报告详解中国芯片设计云技术

来源&#xff1a;智东西在多方面因素的推动下&#xff0c;中国的芯片设计行业迎来了前所未有的发展契机。当前&#xff0c;我国芯片设计业的产品范围已经涵盖了几乎所有门类&#xff0c;且部分产品已拥有了一定的市场规模&#xff0c;但我国芯片产品总体上仍然处于中低端&#…

Restful Service 中 DateTime 在 url 中传递

在C# url 中一旦包特殊字符&#xff0c;请求可能就无法送达。可以使用如下方法&#xff0c;最为便捷。 请求端&#xff1a; beginTime.Value.ToString("yyyyMMddHHmmss") 接收端&#xff1a; DateTime? dtBeginTime null; DateTime tempTime;if (DateTime.TryParse…

【无标题】this指针

在 C 中&#xff0c;每一个对象都能通过 this 指针来访问自己的地址。this 指针是所有成员函数的隐含参数。因此&#xff0c;在成员函数内部&#xff0c;它可以用来指向调用对象。 友元函数没有 this 指针&#xff0c;因为友元不是类的成员。只有成员函数才有 this 指针。 下…

一文读懂马斯克展示脑机接口:硬币大小芯片植入猪脑 实时读取猪脑信息

视频&#xff1a;马斯克展示脑机接口设备无线实时读取猪脑信息&#xff0c;时长约7分10秒来源&#xff1a;腾讯科技马斯克展示了一群实验猪。这些实验猪之前曾接受过外科手术&#xff0c;由手术机器人将最新版的Neuralink设备植入大脑。这些项目的目标都是利用大脑植入技术实现…

循环,函数,指针作业

一、循环 题目1&#xff1a;7-6 统计素数并求和 提交列表&#xff1a; 流程图&#xff1a; 问题&#xff1a; 解决&#xff1a;mn最多一个素数&#xff0c;都为0无答案&#xff1b;m和n本身也可能是素数。 题目2&#xff1a;7-12 约分最简分式 提交列表&#xff1a; 流程图&…

字符数组的应用

一维数组 char s[10]; s可以存储的字符串的最大长度&#xff08;字符串中字符的个数&#xff09;为9个字符&#xff0c;在最后一个字符后面存储一个字符\0&#xff08;ASCII码为0的字符&#xff09;作为字符串的结束标志 char s2[10]{"student"}; char s3[10]&quo…

华为徐文伟:后香农时代,面向数学的十大挑战问题

本文为2020年8月28日徐文伟在长沙由中国工业与应用数学学会举办的“数学促进企业创新发展论坛”上的发言来源&#xff1a;中国科学院院刊徐文伟华为技术有限公司董事&#xff0c;华为战略研究院院长后香农时代数学决定未来发展的边界数学作为基础的基础&#xff0c;将决定未来发…

06006_redis数据存储类型——String

1、概述 &#xff08;1&#xff09;字符串类型是Redis中最为基础的数据存储类型&#xff0c;它在Redis中是二进制安全的&#xff0c;这意味着该类型可以接受任何格式的数据&#xff0c;如JPEG图像数据或Json对象描述信息等&#xff1b; &#xff08;2&#xff09;在Redis中字符…

C/C++预处理指令

本文主要记录了C/C预处理指令&#xff0c;常见的预处理指令如下&#xff1a; #空指令&#xff0c;无任何效果#include包含一个源代码文件#define定义宏#undef取消已定义的宏#if如果给定条件为真&#xff0c;则编译下面代码#ifdef如果宏已经定义&#xff0c;则编译下面代码#ifn…