弹球小游戏

2023-11-07

创建loginBall类实现开始游戏界面

package 弹球小游戏;
import javax.swing.*;
import java.awt.*;

public class loginBall {
     JFrame JF=new JFrame("弹球小游戏");
    JLabel JL=new JLabel("欢迎来到弹球小游戏");
    JButton jb=new JButton("开始游戏");
    loginBall(){
        JF.setBounds(700,270,450,500);
      JL.setFont(new Font("宋体",Font.BOLD,30));
      JL.setForeground(Color.pink);
      JF.add(JL);
      JF.add(jb);
      JF.setVisible(true);
      JF.setLayout(new FlowLayout(FlowLayout.CENTER,30,100));
     JF.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    }
}

创建Ball类继承loginball类。使用Dialog文件对话框并添加相应的事件监听处理,当点击开始游戏后,游戏界面会弹出在开始游戏界面之上!

package 弹球小游戏;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Ball extends loginBall {
    //设置桌面的宽度和高度
    int Tab_width = 400;
    int Tab_height = 550;
    //设置球拍的宽度和高度
    int P_width = 80;
    int P_height = 20;
    //设置球的大小(18个像素)
    int Ball_siz = 18;
    //用于记录小球的位置及初始化小球的位置(X:240,Y:100)
    int X = 240;
    int Y = 50;
    //记录小球在X方向与Y的分速度
    int Vx = 20;
    int Vy = 20;
    //记录球拍的位置
    int P_X = 120;
    final int P_Y = 450;
    //标识游戏是否结束
    boolean isOver =false;
    //声名一个定时器
    Timer time;
    //自定义类,继承Canvas,充当画布

    class myCanvas extends Canvas {
        @Override
        public void paint(Graphics g) {
//绘制内容
            if (isOver) {
                g.setColor(Color.PINK);
                g.setFont(new Font("宋体", Font.BOLD, 30));
                g.drawString("游戏结束!", 130, 150);
            } else {
                g.setColor(Color.red);
                g.fillOval(X, Y, Ball_siz, Ball_siz);
                g.setColor(Color.CYAN);
                g.fillRect(P_X, P_Y, P_width, P_height);
            }
        }
    }
    myCanvas my = new myCanvas();

    public void init() {
        Dialog D1=new Dialog(JF, "弹球小游戏",true);
        D1.setBounds(750,300,Tab_width,Tab_height);
        jb.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                D1.setVisible(true);

            }
        });

        D1.addWindowListener(new WindowAdapter(){
                                 @Override
                                 public void windowClosing(WindowEvent e) {
                                     System.exit(0);
                                 }
             });
        KeyListener listen = new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                //获取当前按下的键对应的整数(键盘上的每一个键都对应一个整数)
                int key = e.getKeyCode();
                if (key == KeyEvent.VK_LEFT) {
                    if (P_X > 0) {
                        P_X-= 30;
                    }
                }
                if (key == KeyEvent.VK_RIGHT) {
                    if (P_X<=(Tab_width-P_width)) {
                        P_X+= 30;
                    }
                }
            }
        };
        D1.addKeyListener(listen);

//小球坐标的控制

     ActionListener sss = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
//*根据边界范围修正速度


                if (X <= 0||X >=(Tab_width-Ball_siz)) {
                    Vx = -Vx;
                }
                if (Y <= 0||(Y >P_Y-Ball_siz && X >P_X && X < P_X + P_width)) {
                    Vy = -Vy;
                }

                if (Y >P_Y-Ball_siz && (X < P_X || X > P_X+ P_width)) {
                    time.stop();
                    isOver = true; Dialog D1=new Dialog(JF, "弹球小游戏",true);
                    my.repaint();
                }
                X+=Vx;
                Y+=Vy;
                my.repaint();
            }
        };

        time=new Timer(100,sss);
        time.start();
        my.setPreferredSize(new Dimension(Tab_width,Tab_height));

        D1.add(my);
    }

    public static void main(String[] args) {
        new Ball().init();
    }
}

运行结果:当点击开始游戏后通过挡板的移动弹起小球;若小球下落未被弹起则游戏结束#当点击开始游戏后通过挡板的移动弹起小球
若小球下落未被弹起则游戏结束

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

弹球小游戏 的相关文章

随机推荐

  • 看穿式监管来了

    收藏关注 台电脑登录 个账号 或者 个账号 台电脑同时登录 会有什么后果 根据监管部门 关于加强证券期货经营机构客户交易终端信息等客户信息管理的规定 关于进一步加强期货经营机构客户交易终端信息采集有关事项的公告 的要求 我司正式启动交易终端
  • Java之集合(15个demo)

    本节主要介绍java的集合 主要包括List Set和Map 其中List的子类ArrayList和LinkedList Set的子类HashSet和TreeSet Map的字类HashMap等 介绍了集合的常用方法 Collections
  • 面试必备之Java 最常见 200+ 面试题全解析

    这篇文章主要介绍了面试必备之Java 最常见 200 面试题全解析 老王觉得挺不错的 现在分享给大家 也给大家做个参考 给准备面试的大家 特别总结了 Java 程序员面试必备的面试题库 共含208道面试题 涵盖十九个模块 从 Java 基础
  • List中移除指定元素

    例一 想在list中删除元素 先看下面的这一段代码 public class App2 public static void main String args List
  • opencv图像处理(加法运算)

    加法运算 import os import re import cv2 cv2 imshow image img 显示 cv2 waitKey 10000 停留 cv2 destroyAllWindows 关闭 from PIL impor
  • 大数据-Linux的常用命令

    一 Linux的目录结构 1 标黄的是我们一般常用的 其他的作为了解就好 2 Linux的命令有很多 我只挑了一些和大数据相关的写一下 命令格式 command options parameter 说明 command 命令名 相应功能的英
  • android四大组件(详细总结)

    Android四大组件分别为activity service content provider broadcast receiver 一 android四大组件详解 1 activity 1 一个Activity通常就是一个单独的屏幕 窗口
  • springboot mybaties Invalid bound statement (not found) 错误

    错误信息 org apache catalina connector RequestFacade 5151cc1f org apache ibatis binding BindingException Invalid bound state
  • No module named ‘rospy‘

    1 rospkg未安装 pip install rospkg 或 conda install rospkg 2 rospkg已安装 参考 为pycharm设置搜索路径 sunshine drizzle的博客 CSDN博客 以下适用于 pyc
  • 补码的除法运算

    补码的除法运算是将两个数都使用补码的形式来进行计算 和原码的除法相比 补码的除法运算中被除数 除数以及余数都采用双符号位的形式参与计算 最后得到的余数符号位就代表着最终结果的符号位 加减交替法 题目 假设机器字长为5位 x 0 1000 y
  • C++类中的三大函数(构造,析构,拷贝)

    下面一段话与大家共勉 每个人的一生都会遇到很多边界 有些边界可以突破 有些则不能 那些无法突破的边界就是你的极限 而划分边界的标准就是 阈值 每次突破阈值之后 人生轨迹就会发生剧烈变化 其间需要你做出很多思考和判断 直到最后找到自己的极限
  • 类模板特例化

    参考来源 C primer 中文版第5版 P626 1 举个例子 为标准库hash模板定义一个特例化版本 可以用它来将Sales data对象保存在无序容器中 默认情况下 无序容器使用hash
  • Rancher持续集成部署K8S集群的脚本

    文章目录 1 概要 2 安装 2 1 Rancher CLI安装 2 2 kubectl 安装 3 Rancher CLI 配置API Key 3 1 添加API key 3 2 测试API key 3 3 配置部署镜像的脚本 3 3 1
  • gcc常用命令的使用

    一 简介 gcc提供了30多条警告信息和3个警告级别 使用它们有助于增强程序的稳定性和可移植性 此外 gcc还对标准的C和C 语言进行了大量的扩展 提高了程序的执行效率 有助于编译器进行代码优化 能够减轻编程的工作量 二 gcc常用的编译选
  • 高性能MySQL实战(一):表结构

    最近因需求改动新增了一些数据库表 但是在定义表结构时 具体列属性的选择有些不知其所以然 索引的添加也有遗漏和不规范的地方 所以我打算为创建一个高性能表的过程以实战的形式写一个专题 以此来学习和巩固这些知识 一 实战 我使用的 MySQL 版
  • 计算机外部设备IO接口

    计算机外部设备IO接口 常见接口 术语 常见接口 接口 特点 USB 通用串行总线 Universal Serial Bus 高速率 热插拔 雏菊链 最新版本 USB 4 SCSI 小型计算机系统接口 Small Computer Syst
  • rocketmq安装、启动

    1 下载 gt wget http mirror bit edu cn apache rocketmq 4 4 0 rocketmq all 4 4 0 source release zip gt unzip rocketmq all 4
  • 做一个合格的开发,从玩转Apipost开始

    前言 也是有一段时间没更文了 最近忙于跟生活对线 今天给大家带来的是一个宝贝 Apipost 这东西做啥用 这东西做啥用 这东西做啥用 这东西做啥用 在了解这个apipost的作用之前 先听我说 谢谢你因为有你 温暖了四季 身为后端研发的我
  • 全栈之前端

    关注回复 学习交流群 加入 安全开发运维 答疑交流群 原文连接 全栈之前端 2 CSS3基础知识之选择器学习本章将主要介绍CSS选择器类型 id 类 属性伪类和伪元素及关系选择器 它是CSS规则的第一部分 常常用于元素和其他部分组合起来告诉
  • 弹球小游戏

    创建loginBall类实现开始游戏界面 package 弹球小游戏 import javax swing import java awt public class loginBall JFrame JF new JFrame 弹球小游戏