java多线程游戏设计-弹球游戏(包含全部代码)

本文介绍了使用Java实现的多线程弹球游戏,包括需求分析、系统设计与实现。游戏由UI类、球线程、球板线程和绘图线程构成,通过监听和线程控制实现游戏状态切换和对象动态移动。游戏在遇到碰撞和界面闪烁等问题时进行了优化,提供了一个理解多线程思想的实例。
摘要由CSDN通过智能技术生成

目录

  1. 需求分析 3
    1.1目的 3
    1.2背景 3
  2. 系统设计 3
    2.1 项目结构 3
    2.2游戏初始化界面设计 4
    2.3游戏开始界面设计 5
    2.4游戏结束界面设计 5
  3. 系统实现 6
    3.1 游戏初始化(UI类) 6
    3.1.1 框架结构 6
    3.1.2 构造函数 6
    3.1.3 窗体初始化 7
    3.1.4 数据初始化 7
    3.1.5 Paint方法 8
    3.1.6 监听 8
    3.2 球线程(Thread Ball类) 9
    3.2.1 框架结构 9
    3.2.2 run方法 10
    3.3 球板线程(Thread Paddle类) 11
    3.3.1框架结构 11
    3.3.2 run方法 11
    3.4 绘图线程(Thread Controle类) 12
    3.4.1框架结构 12
    3.4.2 run方法 12
    3.5主函数(Main 类) 13
  4. 系统测试 13
    4.1游戏状态切换测试 13
    4.1.1未开始-开始 13
    4.1.2开始-结束 14
    4.1.3结束-重新开始 14
    4.2游戏运行bug改进 15
    4.2.1 小球和球板碰撞bug 15
    4.2.2 游戏界面闪烁 15
  5. 小结 16

1.需求分析

1.1目的
利用多线程的思想,编写一个游戏。
1.2背景
1).游戏名称:弹球游戏。
2).开发环境:IDEA。
3).游戏规则:小球实现从不同角度,不同坐标落下,与挡板接触后反弹并加分,落在地面上则游戏结束失败。

2.系统设计

2.1 项目结构
在这里插入图片描述

在这里插入图片描述

由五个类构成:
在这里插入图片描述
1).三个线程类分别控制球的移动,球板的移动和画面的重绘。
2).UI类控制界面的初始化和绘制。
3).Main类用来创建线程和启动线程。

2.2游戏初始化界面设计
在这里插入图片描述
1).游戏界面显示:点击开始游戏。
2).点击以后,游戏状态改变,显示开始游戏界面。
2.3游戏开始界面设计
在这里插入图片描述
1).画出两个对象:球和球板。
2).显示得分。

2.4游戏结束界面设计
在这里插入图片描述
1).给出提示信息:游戏结束以及得分情况。
2).给出提示信息:按下空格可以重新开始。

3.系统实现

3.1 游戏初始化(UI类)

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

public class Ui extends JFrame implements KeyListener ,MouseListener{
   
    //判断球还活着
    static boolean blIsOver;
    //分数
    static int intSore;
    //定义游戏状态 0:游戏未开始/1:游戏开始/2:暂停/3:结束
    static int state=0;
    //双缓存解决界面闪烁
    Image offScreenImage=null;
    //构造函数
    public Ui() {
   
        initFrame();
        initData();
        addKeyListener(this);
        addMouseListener(this);
        setVisible(true);
    }
    public void initFrame(){
   
        setTitle("弹球游戏");
        setBackground(Color.WHITE);
        setSize(900,600);
        //setLocationRelativeTo(null);
        setLocation(300,50);
        setResizable(false);
        setFocusable(true);                               //获取键盘焦点,将键盘聚集在游戏界面上
        //setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }//初始化窗体
    public void initData(){
   
        //球的初始化坐标
        ThreadBall.PositionX=(int)(Math.random()*100)+300;//300-400
        ThreadBall.PositionY=(int)(Math.random()*100)+100;//100-200
        //初始化角度
        ThreadBall.intDu= (int)(Math.random()*3)+1;//1-4
        //初始化球板
        ThreadPaddles.PositionA=0;
        ThreadPaddles.PositionB=450;
        //初始化
        intSore=0;
        System.out.println("state="+state);
    }//初始化数据
    public void paint(Graphics gImage) {
   
        if(offScreenImage==null){
   
            offScreenImage=createImage(900,600);
        }
        //获取画笔对象
        Graphics g=offScreenImage.getGraphics();//画笔对象
        g.fillRect(0,0,900,600); //填充一个宽900,高600的区域
        if(state==0){
   //游戏未开始
            g.clearRect(0, 0, 900, 600);//0,0:是相对于容器的坐标
            //g.draw
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值