文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

java实现弹球小游戏

2024-04-02 19:55

关注

GUI实现弹球小游戏,供大家参考,具体内容如下

先看一下游戏效果图。

一个简单的Demo。也比较简单,新手试着做一做完善改进。

源代码


import Com.Style.FontStyle;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Demo  extends JFrame {
    //创建游戏窗口
    public Demo() {
        init();
    }

    //桌面大小
    private final int TABLE_WIDTH = 450;
    private final int TABLE_HEIGHT = 600;
    //球大小
    private final int BALL_SIZE = 15;

    //球拍大小
    private final int RACKET_WIDTH = 120;
    private final int RACKET_HEIGHT = 20;
    //记录小球坐标
    private double BallX = 100;
    private double BallY = 200;
    //记录球拍坐标
    private double RACKET_X = 150;
    private final double RACKET_Y = 380;
    //记录小球速度
    private double speedX = 10;
    private double speedY = 20;
    //记录游戏是否结束
    private boolean isOver = false;
    //声明一个积分器
    int score= 0;


    //声明一个计时器。

    ActionListener run = new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            //更新小球坐标让小球动起来
            BallY+=speedY;
            BallX+=speedX;
            //重绘界面
            mycanvas.repaint();
            //碰到两边的时候
            if (BallX<=0||BallX>=TABLE_WIDTH-BALL_SIZE){
                speedX=-speedX;
            }
            //碰到上边界的时候
            if(BallY<=0){
                speedY=-speedY;
            }
            //接住小球的时候
            if ( BallY>=(RACKET_Y-BALL_SIZE)&&BallX>RACKET_X&&BallX<(RACKET_X+RACKET_WIDTH)){
                //得10分
                score+=10;
                speedY=-speedY;

            }
            if ((BallY>(RACKET_Y-BALL_SIZE)&&(BallX<RACKET_X||BallX>RACKET_X+RACKET_WIDTH))){
                timer.stop();
                isOver=true;
                mycanvas.repaint();
            }
        }
    }

        ;
        private Timer timer = new Timer(60, run);

        //内部类继承Canvas充当画布
        private class myCanvas extends Canvas {
            public void paint(Graphics g) {
                //绘制内容
                //如果游戏结束
                if (isOver) {
                    //给画笔颜色
                    g.setColor(new Color(0xFF9A1B44, true));
                    //给画笔字体
                    g.setFont(new Font("宋体", FontStyle.BOLD, 25));
                    g.drawString("Game Over!", 120, TABLE_HEIGHT / 4);
                    g.drawString("成绩"+score+"分", 120, TABLE_HEIGHT / 3);
                    g.drawString("按空格再来一次", 120, TABLE_HEIGHT / 2);
                } else {
                    //否则游戏中
                    //绘制小球

                    g.setColor(new Color(0xFF09FAA6, true));
                    g.fillOval((int) BallX, (int) BallY, BALL_SIZE, BALL_SIZE);
                    //画一个积分系统
                    //上色
                    g.setColor(new Color(0xE8DC0C77,true));
                    //给画笔字体
                    g.setFont(new Font("宋体", FontStyle.BOLD, 25));
                    g.drawString("得分:"+score, 25, 25);

                    //绘制球拍
                    g.setColor(new Color(0xFF0E51D7, true));
                    g.fillRect((int) RACKET_X, (int) RACKET_Y, RACKET_WIDTH, RACKET_HEIGHT);
                    timer.start();

                }
            }
        }

        //创建绘画区
        myCanvas mycanvas = new myCanvas();


        //窗口初始化
        public void init() {

            JFrame jFrame = new JFrame();
            jFrame.setTitle("弹球小游戏");//窗口名称
            jFrame.pack();//自适应布局
            jFrame.setVisible(true);//可见
            jFrame.add(mycanvas);
            jFrame.setBounds(500, 200, TABLE_WIDTH, TABLE_HEIGHT);
            jFrame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);//关闭
            mycanvas.setPreferredSize(new Dimension(TABLE_WIDTH, TABLE_HEIGHT));//画布大小
            jFrame.setResizable(false);//大小不可变


            KeyListener keyListener = new KeyAdapter() {
                //重写键盘被按压的方法
                @Override
                public void keyPressed(KeyEvent e) {
                    //接收按下的是哪个键
                    int key = e.getKeyCode();
                    if (key == KeyEvent.VK_LEFT) {
                        if (RACKET_X >0) {
                            RACKET_X -= 30;
                        }
                    }
                    if (key == KeyEvent.VK_RIGHT) {
                        if (RACKET_X < (TABLE_WIDTH - RACKET_WIDTH )) {
                            RACKET_X += 30;
                        }
                    }
                    if (key == KeyEvent.VK_SPACE) {
                        if (isOver=true) {
                            Demo.main(null);

                        }
                    }
                }

            };

            //窗口获取键盘监听
            jFrame.addKeyListener(keyListener);
            //键盘获取键盘监听
            mycanvas.addKeyListener(keyListener);


        }

        public static void main(String[] args) {
            new Demo();

        }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯