Java 多线程的利用(弹球小游戏)



      最近在搞一个弹球游戏,其中,用到了Java多线程的应用,首先,先说一下,什么叫做线程。或许大家都知道进程是什么,打开电脑的任务管理器,可以看到,里面有进程这个选项,非常明显,进程就是一个程序,而每个程序,有由多个线程组成。好了,这样说的不清不楚的,那么好,我用一个弹球小游戏来解释一下,那样可能大家会更容易理解些。

 

import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
 * 游戏界面类
 * 
 * @author Administrator
 * 
 */
public class GameUI extends javax.swing.JFrame {
	private static GameUI UI;
	private java.awt.Graphics g;
	private MyListener ml;
	public javax.swing.JLabel text_field;
	public javax.swing.JProgressBar pBar;
	private String command;
	public java.util.ArrayList<MyThread> list = new java.util.ArrayList<MyThread>();
	private javax.swing.JToggleButton button;

	public static void main(String args[]) {
		UI = new GameUI();
		UI.initUI();
	}

	/**
	 * 初始化窗体的方法
	 */
	public void initUI() {
		// 设置标题
		this.setTitle("是高手就坚持100s");
		// 设置大小
		this.setSize(610, 635);
		// 设置关闭是退出程序
		this.setDefaultCloseOperation(3);
		// 设置打开窗体时在屏幕中间显示
		this.setLocationRelativeTo(null);
		// 设置窗体的流式布局管理器
		this.setLayout(new java.awt.FlowLayout());
		// 设置窗体背景颜色
		this.getContentPane().setBackground(java.awt.Color.black);
		// 创建文本标签对象
		text_field = new javax.swing.JLabel();
		javax.swing.JLabel lable = new javax.swing.JLabel("时  间  :");
		// 设置文本标签前景颜色
		lable.setForeground(java.awt.Color.red);
		text_field.setForeground(java.awt.Color.red);

		

		// 创建进度条对象
		pBar = new javax.swing.JProgressBar(0, 330);
		// 创建按钮对象
		button = new javax.swing.JToggleButton();
		button.setMargin(new Insets(0, 0, 0, 0));
		button.setIcon(new javax.swing.ImageIcon("images/Pause.gif"));
		button.setActionCommand("暂停");
		// 通过匿名内部类来创建动作监听器
		java.awt.event.ActionListener button_listener = new java.awt.event.ActionListener() {

			public void actionPerformed(ActionEvent e) {
				String com = e.getActionCommand();

				if (com.equals("暂停")) {
					button.setMargin(new Insets(0, 0, 0, 0));
					button
							.setIcon(new javax.swing.ImageIcon(
									"images/start.gif"));
					button.setActionCommand("继续");
					for (int i = 0; i < list.size(); i++) {
						list.get(i).PauseThread();

					}

				}
				if (com.equals("继续")) {

					button.setMargin(new Insets(0, 0, 0, 0));
					button
							.setIcon(new javax.swing.ImageIcon(
									"images/Pause.gif"));
					button.setActionCommand("暂停");

					for (int i = 0; i < list.size(); i++) {
						list.get(i).ContinueThread();
					}

				}

			}

		};
		button.addActionListener(button_listener);

		this.add(button);
		this.add(lable);
		this.add(pBar);
		this.add(text_field);
		// 的到菜单条
		javax.swing.JMenuBar bar = creatMenuBar();
		// 为窗体设置菜单条
		this.setJMenuBar(bar);
		// 设置窗体的可见性
		this.setVisible(true);
	}

	/**
	 * 创建菜单条的方法
	 * 
	 * @return
	 */
	public javax.swing.JMenuBar creatMenuBar() {
		// 创建菜单条对象
		javax.swing.JMenuBar bar = new javax.swing.JMenuBar();
		// 创建菜单对象
		javax.swing.JMenu menu_menu = new javax.swing.JMenu("菜单");
		javax.swing.JMenu difficulty_menu = new javax.swing.JMenu("难度");
		javax.swing.JMenu help_menu = new javax.swing.JMenu("帮助");
		// 创建菜单选项对象
		javax.swing.JMenuItem star_item = new javax.swing.JMenuItem("开始");
		javax.swing.JMenuItem exit_item = new javax.swing.JMenuItem("退出");
		javax.swing.JMenuItem help_item = new javax.swing.JMenuItem("游戏说明");
		javax.swing.JMenuItem about_item = new javax.swing.JMenuItem("关于");
		// 创建单选选项
		javax.swing.JRadioButtonMenuItem easy_item = new javax.swing.JRadioButtonMenuItem(
				"简单");
		javax.swing.JRadioButtonMenuItem middle_item = new javax.swing.JRadioButtonMenuItem(
				"中等");
		javax.swing.JRadioButtonMenuItem hard_item = new javax.swing.JRadioButtonMenuItem(
				"困难");
		// 创建一个按钮组
		javax.swing.ButtonGroup group = new javax.swing.ButtonGroup();
		// 将单选按钮添加到按钮组中
		group.add(easy_item);
		group.add(middle_item);
		group.add(hard_item);
		// 将单选按钮添加到菜单中
		difficulty_menu.add(easy_item);
		difficulty_menu.add(middle_item);
		difficulty_menu.add(hard_item);
		// 通过匿名内部类来创建动作监听器
		ActionListener listener = new java.awt.event.ActionListener() {
			public void actionPerformed(ActionEvent e) {
				command = e.getActionCommand();
				// 如果选择开始,则创建线程对象
				if (command.equals("开始") && list.size() == 0) {
					creatBall(20, 1);

				}
				// 如果选择退出按钮,则退出程序
				if (command.equals("退出")) {
					System.exit(0);
				}

				// 如果选择简单按钮
				if (command.equals("简单") && list.size() == 0) {

					creatBall(20, 1);
				}

				// 如果选择中等按钮
				if (command.equals("中等") && list.size() == 0) {
					creatBall(50, 2);

				}
				if (command.equals("困难") && list.size() == 0) {
					creatBall(40, 2);
				}
				if (command.equals("游戏说明")) {
					javax.swing.JOptionPane.showMessageDialog(null,
							"移动鼠标,用挡板接球,如果接不住,就算输了……\n游戏可以选择难度,包括简单、中等、困难");
				}
				if (command.equals("关于")) {
					javax.swing.JOptionPane
							.showMessageDialog(null,
									"这是一个用Java编写的小游戏……\n制作人:沈冠军\n时间:2010年8月\n版权所有,翻版必究!");
				}
			}
		};
		// 添加动作监听器
		star_item.addActionListener(listener);
		exit_item.addActionListener(listener);
		easy_item.addActionListener(listener);
		middle_item.addActionListener(listener);
		hard_item.addActionListener(listener);
		help_item.addActionListener(listener);
		about_item.addActionListener(listener);

		// 将菜单选项对象添加到菜单对象上
		menu_menu.add(star_item);
		menu_menu.add(exit_item);
		help_menu.add(help_item);
		help_menu.add(about_item);
		// 将菜单对象添加到菜单条上
		bar.add(menu_menu);
		bar.add(difficulty_menu);
		bar.add(help_menu);
		// 返回菜单条对象
		return bar;
	}

	/**
	 * 创建线程对象的方法
	 * 
	 * @param speed
	 *            :速度
	 * 
	 */
	public void creatBall(int speed, int num) {
		java.util.Random ran = new java.util.Random();

		if (ml == null) {
			g = UI.getGraphics();
			ml = new MyListener(g);
			UI.addMouseListener(ml);
			UI.addMouseMotionListener(ml);

		}
		for (int i = 0; i < num; i++) {
			int x = ran.nextInt(600) + 10;
			int y = ran.nextInt(300) + 100;
			MyThread th = new MyThread(g, ml, UI, x, y, speed);
			list.add(th);
			th.start();
		}

	}

	/**
	 * 得到命令的方法
	 */
	public String getCommand() {
		return command;
	}

}import java.awt.Color;

import javax.swing.JOptionPane;
/**
 * 线程类
 * 
 * @author Administrator
 * 
 */
public class MyThread extends Thread {
	private int width = 20, height = 20;
	private int x, y;
	private  java.awt.Graphics g;
	private GameUI UI;
	private boolean isexist = true;
	private MyListener listener;
	private int speed;
	private int x1 = 12, y1 = 12;
	private long start, end;
	private long last_time;
	private int response;
	private boolean isFinish = true;
	private boolean isPause = true;
	private java.util.ArrayList<MyThread> list;
	private float value = 320;
	private java.awt.Color color = java.awt.Color.blue;

	/*
	 * 重写构造器
	 */
	public MyThread(java.awt.Graphics g, MyListener listener, GameUI UI, int x,
			int y, int speed) {
		this.g = g;
		this.UI = UI;
		this.x = x;
		this.y = y;
		this.speed = speed;
		this.listener = listener;
	}

	/*
	 * (non-Javadoc)重写run的方法
	 * 
	 * @see java.lang.Thread#run()
	 */
	public void run() {
		drawOval();
	}

	/**
	 * 创建线程的方法
	 */
	public void drawOval() {
		
		
		start = System.currentTimeMillis();
		while (isFinish) {
			while (isPause) {
				synchronized(this.g){
				// 画一个圆
				g.setColor(java.awt.Color.black);
				g.fillOval(x, y, width, height);
				x += x1;
				y += y1;

				getColors();
				g.setColor(color);
				g.fillOval(x, y, width, height);
				}
				int x2 = listener.getX();
				if (x > 580) {
					x1 = -12;
				}
				if (x < 10) {
					x1 = 12;
				}
				if (y < 90) {
					y1 = 12;
				}
				if (y > 595 && x > x2 && x < x2 + 100) {
					y1 = -12;
				}
				if (y > 630) {
					if (isexist) {
						isAgain();
					}
					stopThread();
				}
				try {
					Thread.sleep(speed);
					value -= 0.1;
				} catch (Exception ef) {
					ef.printStackTrace();
				}
				// 将前一次画的清除掉
				end = System.currentTimeMillis();
				last_time = 100 - (end - start) / 1000;
				UI.text_field.setText(last_time + "s");
				UI.pBar.setValue((int) value);
				if (last_time == 0) {
					list = UI.list;
					for (int j = 0; j < list.size(); j++) {
						// 停在线程,并且去掉最后一个圆
						list.get(j).stopThread();
						list.get(j).fadeOval();

					}
					stopThread();
					showDialog();
				}
			}

		}

	}

	/**
	 * 线程结束时消去最后一个圆的方法
	 */
	public void fadeOval() {
		g.setColor(java.awt.Color.black);
		g.fillOval(x, y, width, height);
	}

	/**
	 * 重来对话框的处理方法
	 */
	public void isAgain() {
		isexist = false;
		list = UI.list;
		System.out.println(list.size());

		for (int j = 0; j < list.size(); j++) {
			// 停在线程,并且去掉最后一个圆
			list.get(j).stopThread();
			list.get(j).fadeOval();

		}
		Object[] options = { "是", "否" };
		String command = UI.getCommand();
		response = JOptionPane.showOptionDialog(null,
				"哈哈,你输了!不要灰心\n坚持就是胜利,是否再来一次?", null, JOptionPane.YES_OPTION,
				JOptionPane.NO_OPTION, null, options, null);

		System.out.println(response);
		if (response == 0) {
			if (command.equals("简单") || command.equals("开始")) {
				AgainThread();
				if (list.size() != 0) {
					// 现将原来的对象从队列中移除
					list.removeAll(list);
					UI.creatBall(20, 1);
				}

			}
			if (command.equals("中等")) {
				AgainThread();
				if (list.size() != 0) {
					list.removeAll(list);
					UI.creatBall(50, 2);
				}

			}

			if (command.equals("困难")) {
				AgainThread();
				if (list.size() != 0) {
					list.removeAll(list);
					UI.creatBall(40, 2);
				}
			}
		}

		// 如果点击关闭,则将线程对象从队列中移除
		if (response == -1 || response == 1) {
			list.removeAll(list);
		}

	}

	/**
	 * 停止线程的方法
	 */
	public void stopThread() {
		isFinish = false;
		isPause = false;

	}

	/**
	 * 暂停线程的方法
	 */
	public void PauseThread() {
		isPause = false;

	}

	/**
	 * 继续线程的方法
	 */
	public void ContinueThread() {

		isPause = true;

	}

	/**
	 * 是否重来的方法
	 */
	public void AgainThread() {
		isFinish = true;
		isPause = true;

	}

	public void getColors() {

		if (x % 2 == 0 && y % 2 == 0) {
			color = java.awt.Color.green;
		}
		if (x % 2 == 0 && y % 2 != 0) {
			color = java.awt.Color.red;
		}
		if (x % 2 != 0 && y % 2 != 0) {

			color = java.awt.Color.orange;

		}
		if (x % 2 != 0 && y % 2 != 0) {
			color = java.awt.Color.yellow;
		}
	}

	public void showDialog() {

		javax.swing.JOptionPane
				.showInputDialog("好样的,你是真的高手,\n恭喜你坚持了100s\n请输入您的大名");
	}

}
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;

/**
 * 鼠标监听器的类
 * 
 * @author Administrator
 * 
 */
public class MyListener extends java.awt.event.MouseAdapter {
	private java.awt.Graphics g;
	private int x = 5, y = 620;
	private int width = 100, height = 10;

	public MyListener(java.awt.Graphics g) {
		this.g = g;
	}

	public void mouseMoved(MouseEvent e) {
		// 设置画布对象颜色
		synchronized (this.g) {
			g.setColor(java.awt.Color.black);
			g.fillRect(x, y, width, height);
			x = e.getX();
			g.setColor(java.awt.Color.green);
			g.fillRect(x, y, width, height);
		}
	}

	/**
	 * 得到x的方法
	 * 
	 * @return:x
	 */
	public int getX() {
		return x;
	}

}

界面效果图:

 


 
好了,大家看到了,线程的作用就是在一个程序中可以同时做不、同的事,就像上面的 弹球游戏,它可以在画矩形的同时画圆,两个可以同时发生,当选择难度时可以看都,可以同时画多个球。 

以打砖块游戏来理解多线程 以打砖块游戏来理解多线程 前几天学习了多线程,现在总结自己做的一个打砖块的游戏,以此来加深对多线程的理解(如有不正确的地方欢迎指正!)。 立即下载

相关推荐

java多线程小游戏

java多线程小游戏

Java小项目——多线程弹球

一、需求分析 版本V1:多线程绘制小球 版本V2:开启一个线程,绘制队列listBall内多个小球 版本V3:使用启动和暂停按钮,控制线程小球的运动 二、版本V1:多线程绘制小球 点击绘制区域,获取x和y的坐标; 创建和开始一个线程,线程中run()函数中内容为绘制小球; 小球绘制卸载for循环内,每次加上速度v,更新坐标。 UI页面类: package com.java8...

「谁定义我是我」 2516

JAVA多线程游戏之简易飞机大战

本人利用JAVA的swing和多线程实现的一个简易飞机大战游戏,功能比较简单,不过可拓展性较高。分享给大家!

Java线程游戏:多个小球在界面移动

Java线程游戏:多个小球在界面移动

weixin_58879477的博客 1149

Informer复现 -- 完整模型

有了数据和核心的ProbAttention,接下来就可以复现完整的Informer(图1)了。图1:Informer模型结构[1]如果对图1还不太熟悉的同学,可以参考图2。由图2可知,informer与Transformer之间的差异并不大。主要区别是ProbAttention和可能的encoder最后一层的conv(源代码中用来distil)。图2:参考Transformer画的Informer模型结构。

AI_daily的博客 3494

解决linux 2.5G网卡驱动问题

解决linux 2.5G网卡驱动问题 关键词:2.5G网卡驱动,ubuntu,安装,2.5G Ethernet LINUX driver,Realtek网卡驱动 由于2.5G网卡较新,各linux发行版的通用驱动已不适用,新装的系统会出现无法上网问题,由于国内网络环境去Realtek官网很难下载到驱动文件,故本文提供github上的2.5G Ethernet LINUX driver r8125 for kernel up to 5.6的版本驱动文件r8125-9.003.05.tar.bz2各位可以自

poorguy_aos的博客 1万+

Java线程游戏-v1.0

Java线程游戏-v1.0

weixin_63136968的博客 253

LVGL配置文件lv_conf.h详解

lv_conf.h是一个用户级别的文件,它不属于内核的部分,因此,在不同的工程中,该文件有可能存在差异。lv_conf.h文件具有两大功能:(1)配置功能:内存、屏幕刷新周期、输入设备的读取周期,等等;(2)裁剪功能:使能失能某些功能,有效地优化Flash的分配。

qq_28576837的博客 5561

一个java写的弹球小游戏

import java.awt.*; import java.applet.*; import javax.swing.*; import java.awt.event.*; import java.util.*; import java.lang.Integer; /*障碍1 *×××2 *小车3 *定义三个向量存储下落的字符 */ publi...

weixin_33832340的博客 230

VSCode上搭建C/C++开发环境(vscode配置c/c++环境)Windows系统---保姆级教程

关于VSCode上搭建C/C++开发环境的内容,到这里就结束了,这里博主感叹一下,VSCode真的挺强大的,作为一个编辑器,可以通过和编译器链接成为开发环境,将环境配置好的话,在这上面写代码似乎也是个不错的选择。大家有任何疑问,欢迎在评论区中提出,本篇博客有任何问题和错误也欢迎来和博主讨论,真心希望能和大家一起进步。最后,如果本篇博客对你有帮助的话,能不能给博主一个三连啊!

2303_79329831的博客 8万+

保姆级教程:不用看古早代码,5分钟搞懂泛微ecology9附件存储与接口调用

本文详细解析了泛微ecology9附件存储与接口调用的核心原理,提供从基础概念到实战操作的完整指南。通过拆解文档化附件设计理念、解析RESTful接口参数,并给出Python代码示例,帮助开发者快速掌握附件上传与业务集成的关键技巧,提升二次开发效率。

weixin_28688385的博客 352

动态弹球(Java多线程实现+swing)

根据老师上课讲的内容,完成了一个小作业,发到这里,希望可以帮助到需要的人,也希望大家来指点。 效果图: 点击"创建小球",在窗体底部任意位置弹出颜色随机小球,小球碰到四边或与其他小球相撞就会反弹,随着时间增加,小球运动速度加快并变大: 首先我们创建两个按钮对象以及一个画布对象(绘制小球),设置窗体参数: private Button startButton; private Button exitButton; private Canvas canvas; public static int

qq_44832011的博客 2053

Ubuntu\linux,加载mcp2515的驱动,链接mcp2515,mcp2515的这个驱动默认在linux内核中。jetson nao、香橙派、树莓派

3. 其他文章,还要进行驱动编译就比较复杂了(不推荐)1.树莓派+MCP2515+

pvmsmfchcs的博客 1570

弹力弹珠java_Java多线程的运用-弹球一波

在前面我们已经讲过了多线程的概念和具体的用法,那么接下来我们就用多线程来做一个具体的小项目吧——弹球小游戏关于弹球,我们还是一样,先想清楚我们的弹球要有什么功能?1.创立一个窗口2.在窗口内任意点击位置会出现随机方向,随机速度的弹球3.弹球碰到窗口边框反弹,任意两弹球碰撞反弹(交换速度那么我们就开始吧先要搞一个窗口吧,我们就直接上代码了这个还是很容易看懂的mport javax.swing.*;i...

weixin_32001071的博客 517

052、联发科Imagiq HyperEngine架构适配:天玑9000/9200的ISP多核并行调度与Tuning Toolkit调优案例

摘要: 项目组在适配联发科天玑9200的Imagiq 890 ISP架构时,遇到多摄预览功耗过高、帧率不稳等问题。通过分析多核调度机制,调整辅核QoS通道、优化AI-ISP协同模式(采用FREERUN+运动补偿),并利用Tuning Toolkit的Pipeline Viewer动态分配负载,最终降低功耗30mA、提升画质。关键经验包括:避免多核带宽冲突、合理配置动态时钟策略,以及统一校准参数版本管理。天玑9000/9200的HyperEngine架构需优先理解多核协同逻辑,再针对性调优,否则易引发场景兼容

zzfmlxs的博客 38

第三天:Python基础语法详解

Python代码规范与注释最佳实践 摘要: 本文深度解析Python缩进规则与代码结构的技术规范,包括缩进的底层原理、语法规则和错误处理。详细阐述Python注释系统,涵盖行内注释、文档字符串和类型注释等多种形式,并提供工业级代码组织方案。研究显示,良好的缩进可提升40%的代码识别速度,降低50%的认知负荷。文章还对比了Sphinx、pdoc等主流文档生成工具,给出企业级项目中的注释编写原则和模板建议,帮助开发者构建更可维护的Python代码。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1014

java小游戏实训目的_Java弹球小游戏实验报告.doc

Java弹球小游戏实验报告滨江学院Java程序设计实验报告题 目 弹球小游戏姓 名 许浩学 号 20112346064学 院 滨江学院专 业 网络工程年 级 2011级指导教师 张舒2013年 6 月 25 日一、实验目的熟练掌握j...

weixin_39850787的博客 1341

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【汇智学堂】JAVA多线程实现的小游戏-弹球-2

显示球板 Ui类 /**\ * 定义界面 * 显示球板 */ package com.huizhi; import javax.swing.*; import java.awt.*; public class Ui extends JFrame { static int PositionA=50,RecWidth=50,RecHeight=20; public Ui...

weixin_39593940的博客 625

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

javaEE小游戏开发(雪花飘落以及弹球小游戏)

学习目标: 上一周学校一直在实训,所以一直没有更新博客(虽然也没有人看),但作为一个坚持更新半年多的UP主习惯还是要保持住的。 学习内容: 利用javaSE开发了两个小游戏 雪花飘落和弹弹球 由于博主以及学习了javaEE的知识,对程序做了一个简单的迁移,最终目标本来是部署到云端服务器的,但能力有限,老师也都撤了,最后还是失败了,不过起码努力过了。 学习时间: 提示:这里可以添加计划学习的时间 例如: 7.15-7.20 上午9:00-12:00 下午14:00-18:00 学习产出: 雪花飘落(

weixin_50835854的博客 729

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【汇智学堂】JAVA多线程实现的小游戏-弹球-5

最终实现不同角度,小球开始落下。与墙体碰撞后反弹,落在球板上加分。落地结束。 项目结构: Ui类 /** * 定义界面 * 显示球板 * 球板动画 * 球板对键盘的响应 * 键盘事件响球拍的左右移动 * 球直线下落 * 实现小球上下来回运动 * 实现直线碰撞的检测 * 随机位置生成球 *游戏结束的判断 * 积分 * 角度落球 */ package com.huizhi...

weixin_39593940的博客 1568

【汇智学堂】JAVA多线程实现的小游戏-弹球-1

/** * 定义界面 */ package com.huizhi; import javax.swing.*; import java.awt.*; public class Ui extends JFrame { public Ui() { setTitle("弹球游戏"); setBackground(Color.WHITE); ...

weixin_39593940的博客 653

【汇智学堂】JAVA多线程实现的小游戏-弹球-4

修改ThreadBall类: package com.huizhi; public class ThreadBall extends Thread { public void run(){ while(true){ Ui.PositionY+=50; try { sleep(1000); ...

weixin_39593940的博客 632

java弹弹球实验报告_Java程序设计实验报告2(弹球游戏)1

Java程序设计实验报告2(弹球游戏)1 《Java语言程序设计》课程设计 实习报告 题目: 班级: 学号: 姓名: 同组人员: 指导老师:张彬 一、实验目的 1、 掌握Swing图形用户界面编程以及事件处理等,掌握java绘图技术。 2、 掌握多线程编程的基本原理,能使用Runnable、cutorService等接口进行线程的创建、启动等工作。 3、 培养独立查找资料,并解决问题的能力。 二、...

weixin_39898733的博客 744

Java实现简易弹球小游戏

BallGameJPanelTimerkeyPressed此代码实现了一个小球在窗口内移动,并通过键盘控制其方向。

2301_80396669的博客 291

JAVA面向对象小游戏

JAVA小游戏雪花飘落弹弹球 雪花飘落 分析项目中有哪些内容 有窗体, 有画布, 有雪花, 有标题 创建一个窗体类JFDemo,继承JFrame类 //1.JFDemo找一个父亲 JFrame 提供窗体对象的创建,大小的设置,别的一些属性 public class JFDemo extends JFrame{ public JFDemo() { //设置窗体的大小 this.setSize(600, 500); //设置窗体位置居中

Rouer_jia的博客 426

【汇智学堂】JAVA多线程实现的小游戏-弹球-3

修改Ui /** * 定义界面 * 显示球板 * 球板动画 * 球板对键盘的响应 */ package com.huizhi; import javax.swing.*; import java.awt.*; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; public class Ui extend...

weixin_39593940的博客 550
上一篇: java前一个月小结
下一篇: Java小结
Champion_netjava
博客等级 码龄16年 10粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值