千家信息网

Java如何实现接月饼小游戏

发表于:2024-09-21 作者:千家信息网编辑
千家信息网最后更新 2024年09月21日,这篇文章给大家分享的是有关Java如何实现接月饼小游戏的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。主要设计设计游戏界面,用swing实现设计背景设计得分物体-月饼,碰到加
千家信息网最后更新 2024年09月21日Java如何实现接月饼小游戏

这篇文章给大家分享的是有关Java如何实现接月饼小游戏的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

    主要设计

    • 设计游戏界面,用swing实现

    • 设计背景

    • 设计得分物体-月饼,碰到加一分

    • 设计障碍物-月亮,碰到会死亡

    • 监听鼠标的左右键,用来控制篮子左右移动

    • 设计积分系统

    • 将resource文件夹设为resource(Project Manage中可以设置),因为要用里面的图片

    功能截图

    游戏开始界面:

    代码实现

    游戏启动类

    public class Start {    public static void main(String[] args) throws URISyntaxException {        new EatGame();    }}

    核心类

    public class EatGame extends JFrame implements ActionListener, MouseListener{    private final int WIDTH = 400;    private final int HEIGHT = 800;    private int score;    private int ticks;     private boolean gameOver = false;    private GameControl control;     private List moons;    private List cakes;    private Timer timer;    private ChangeE changeE;    /**     * Constructor for objects of class FallingGame     */    public EatGame() throws URISyntaxException {        changeE = new ChangeE(150, 650, "player.jpg", WIDTH);        moons = new ArrayList<>();        cakes = new ArrayList<>();        addMoonAndCake();                control = new GameControl(changeE, moons, cakes);        timer = new Timer(20, this);                 //add keybinds        control.addAction("Left", -20, KeyEvent.VK_LEFT);        control.addAction("Right", 20, KeyEvent.VK_RIGHT);                //add components        add(control);        addMouseListener(this);        control.addMouseListener(this);        setTitle("吃月饼");        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        setSize(WIDTH, HEIGHT);        setResizable(false);        setVisible(true);               timer.start();    }    /**     * 添加月亮和月饼     */    public void addMoonAndCake() {        Random r = new Random();        int x, y;        x = 60 + (r.nextInt(35) * 2);        y = r.nextInt(20) + moons.size() * 30;        Moon moon1 = new Moon(x, y, "moon.png");        moons.add(moon1);        x = 190 + r.nextInt(35) * 2;        y = r.nextInt(20) + moons.size() * 30;        Moon moon2 = new Moon(x, y, "moon.png");        moons.add(moon2);        x = 80 + (r.nextInt(35) * 2);        y = r.nextInt(20) + moons.size() * 50;        Cake cake = new Cake(x, y, "cake.png");        cakes.add(cake);    }    /**     * 更新窗口     */    private void updateFrame() {        ticks++;        for(int i = 0; i < moons.size(); i++)        {            Moon moon = moons.get(i);            if(ticks % 25 == 0 && moon.getSpeed() < 10)            {                moon.setSpeed(moon.getSpeed() + 2);            }        }        Iterator moonIterator = moons.iterator();        while (moonIterator.hasNext()) {            Moon moon = moonIterator.next();            // 超出屏幕            if(moon.getY() > HEIGHT) {                moonIterator.remove();            } else                moon.move();        }        Iterator cakeIterator = cakes.iterator();        while (cakeIterator.hasNext()) {            Cake cake = cakeIterator.next();            // 超出屏幕            if(cake.getY() > HEIGHT) {                cakeIterator.remove();            } else                cake.move();        }        if(moons.size() == 0) {            addMoonAndCake();        }    }    private boolean checkCollision() {        Rectangle rectangle = (Rectangle) changeE.getShape();        for(Moon moon : moons) {            Ellipse2D circle = (Ellipse2D) moon.getShape();            // 判断是否与圆形相撞            if (circle.intersects(rectangle)) {                gameOver = true;            }        }        Iterator cakeIterator = cakes.iterator();        while (cakeIterator.hasNext()) {            Cake cake = cakeIterator.next();            Ellipse2D circle = (Ellipse2D) cake.getShape();            if (circle.intersects(rectangle)) {                score ++;   // 得分                cakeIterator.remove();            }        }        return gameOver;    }    public void actionPerformed(ActionEvent e)    {        if(gameOver) {            timer.stop();             control.drawEnd(control.getGraphics(), score);        } else {            //continue with game            updateFrame();            checkCollision();            control.repaint();         }    }    public void mouseClicked(MouseEvent e) {    }    public void mousePressed(MouseEvent e)    {        if(gameOver)        {            //reset game            moons.clear();            control.removeAll();             control.updateUI();             score = 0;            changeE.setX(150);            changeE.setY(650);            addMoonAndCake();            timer.start();            repaint();            gameOver = false;         }    }    public void mouseReleased(MouseEvent e)    {            }    public void mouseEntered(MouseEvent e)    {            }    public void mouseExited(MouseEvent e)    {            }}

    画面绘制

    /** * 画面绘制 */public class GameControl extends JPanel{    private InputMap inputMap;     private ChangeE myChangeE;    private List moons;    private List cakes;    public GameControl(ChangeE changeE, List moons, List cakes)    {        this.myChangeE = changeE;        this.moons = moons;        this.cakes = cakes;        setBackground(Color.white);        inputMap = getInputMap(WHEN_IN_FOCUSED_WINDOW);      }    @Override    protected void paintComponent(Graphics g)    {        super.paintComponent(g);        // 绘制背景        ImageIcon icon=new ImageIcon(Thread.currentThread().getContextClassLoader().getResource("background.png"));        Image img=icon.getImage();        g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), this);        // 绘制玩家        g.drawImage(myChangeE.getImage(), myChangeE.getX(), myChangeE.getY(), this);        // 绘制月亮        for(Moon moon : moons) {            g.drawImage(moon.getImage(), moon.getX(), moon.getY(), this);        }        // 绘制月饼        for (Cake cake : cakes) {            g.drawImage(cake.getImage(), cake.getX(), cake.getY(), this);        }            }    public void drawEnd(Graphics g, int score)    {        g.setColor(Color.WHITE);        g.fillRect(50, 200, 300, 300);        g.setColor(Color.RED);        g.drawString("祝你中秋快乐,阖家欢乐!", 100, 300);        g.setColor(Color.BLUE);        g.drawString("您吃的到的月饼个数为:" + score, 100, 350);        g.setColor(Color.BLACK);        g.drawString("鼠标点击重玩", 100, 400);    }    public void addAction(String name, int deltaX, int keyCode) {        MoveAction moveAction = new MoveAction(name, deltaX);        inputMap.put(KeyStroke.getKeyStroke(keyCode, 0), name);        getActionMap().put(name, moveAction);    }     private class MoveAction extends AbstractAction implements ActionListener {        private int myDeltaX;        public MoveAction(String name, int deltaX) {            super(name);            myDeltaX = deltaX;        }        public void actionPerformed(ActionEvent e) {            myChangeE.move(myDeltaX);        }    }}

    感谢各位的阅读!关于"Java如何实现接月饼小游戏"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

    月饼 设计 月亮 小游戏 内容 屏幕 得分 更多 画面 界面 篇文章 背景 鼠标 不错 实用 快乐 欢乐 阖家欢乐 个数 代码 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州服务器pdu供应商 火爆交友平台网站软件开发 浙江专业软件开发服务厂家现货 美国网络安全知名企业 t无法登录请求的数据库 网络安全漏洞整改流程 不属于网络安全法的基本原则 求生之路服务器怎么搭 网络安全 国家网站 hive命令创建数据库 江西盛泰软件开发公司 注册网络安全等级测评工程师认证 网络安全相关工作汇报会议记录 3dMax软件开发原理 数据库备用字段取名 对数据库实验作业的总结 家庭教和网络安全 奉贤区第三方软件开发价格查询 智海云洲软件开发 哪些软件开发采用瀑布模型 软件开发合同税费 反恐精英无法连接到服务器 泰州商城软件开发外包公司 德宏网络安全前景 电脑网络接入服务器 数据库安全控制的目的是 好的网络技术培训项目 无电脑密码 复制所有数据库 成都到哪里学校学软件开发 本地数据库如何连接云数据库
    0