动态弹球的实现 加入了多线程技术--javaSE游戏准备工作
任务描述:实现了动态弹球的功能,对于有弹球功能的SE游戏奠定了基础。
package 运用线程技术的小球; import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;//不清楚这个有什么用
import java.util.*;
import javax.swing.*; public class Bounces { public static void main(String[] args) {
// TODO Auto-generated method stub JFrame j = new BounceFrame(); j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); j.setVisible(true); } } class BallRunnable implements Runnable//线程是Thread(Runnable target) 要使用线程 你必须要实现Runnable接口 { private Ball ball; private Component component ; private static final int step = 300000; private static final int delay = 1; public BallRunnable(Ball aball,Component acomponent)
{
ball = aball; component = acomponent; } public void run() { try{ for(int i = 0 ; i <= step ; i++) {
ball.move(component.getBounds()); component.repaint();//面板不断刷新 Thread.sleep(delay); }
}catch(InterruptedException e){} }
} class Ball
{//实现一个小球类 这个小球包含的方法 包括move() private double x = 0; private double y = 0 ; private double dx = 1; private double dy = 1; private static final int XSIZE =15; private static final int YSIZE =15; public void move(Rectangle2D bounds) { x = x + dx; y = y + dy; if(x < bounds.getMinX()) {
x = bounds.getMinX(); dx = -dx; } if(x+XSIZE>=bounds.getMaxX())
{
x = bounds.getMaxX()-XSIZE; dx = - dx; } if(y < bounds.getMinY()) {
y = bounds.getMinY(); dy = -dy; } if(y+YSIZE>=bounds.getMaxY())
{
y = bounds.getMaxY()-YSIZE; dy = - dy; } }//关于小球如何移动 public Ellipse2D getShape() {
return new Ellipse2D.Double(x,y,XSIZE,YSIZE);
}//返回此时的小球的绘画位置
} class BallPanel extends JPanel
{
private ArrayList<Ball> balls = new ArrayList<Ball>(); //定义了一个集合 这个集合是Ball类型的存储 这个知识点很关键 管存储的作用 public void add(Ball b) {
balls.add(b);//将Ball的对象加载进去 }//这就是重写JPanel中的add方法 实现集合加入要更新的小球的重要一步 public void paint(Graphics g)
{ super.paintComponent(g); Graphics2D g2 = (Graphics2D) g;//转换成2D的绘图模式了 for(Ball b :balls) { g2.fill(b.getShape());//这时的g2重新绘制小球的全部信息 fill是 专门绘制图形的方法
} } } class BounceFrame extends JFrame
{ private BallPanel panel; public BounceFrame() { setTitle("小球"); panel = new BallPanel(); panel.setBackground(Color.BLUE); add(panel,BorderLayout.CENTER); JPanel buttonPane = new JPanel(); setBounds(200,200,700,500); addButton(buttonPane,"start",new ActionListener(){ public void actionPerformed(ActionEvent event) { addBall();
}
}); addButton(buttonPane,"Close",new ActionListener(){ public void actionPerformed(ActionEvent event)
{ System.exit(0);
}
}); add(buttonPane,BorderLayout.SOUTH);
} public void addButton(Container c,String title,ActionListener listener)
{
JButton b = new JButton(title); c.add(b); b.addActionListener(listener); }//这个算是变形吧 学习思想 public void addBall()
{ Ball ball = new Ball(); panel.add(ball); Runnable r = new BallRunnable(ball,panel); Thread t = new Thread(r);//Thread(Runnable target) t.start();//启动线程 实质上是启动的run()方法
}
}
动态弹球的实现 加入了多线程技术--javaSE游戏准备工作的更多相关文章
- iOS开发之多线程技术
本篇争取一篇讲清讲透,依然将通过四大方面清晰的对iOS开发中多线程的用法进行详尽的讲解: 一.什么是多线程 1)多线程执行原理 2)线程与进程 3)多线程的优缺点 二.我们为什么要用多线程编程技术 三 ...
- Java多线程技术:实现多用户服务端Socket通信
目录 前言回顾 一.多用户服务器 二.使用线程池实现服务端多线程 1.单线程版本 2.多线程版本 三.多用户与服务端通信演示 四.多用户服务器完整代码 最后 前言回顾 在上一篇<Java多线程实 ...
- iOS多线程技术方案
iOS多线程技术方案 目录 一.多线程简介 1.多线程的由来 2.耗时操作的模拟试验 3.进程和线程 4.多线程的概念及原理 5.多线程的优缺点和一个Tip 6.主线程 7.技术方案 二.Pthrea ...
- C#多线程技术总结(异步)
我这里针对现有的C#多线程技术进行一个汇总,一是复习,二是方便索引,文章部份知识点来源于网络,非本人原创. 一.并行(异步): 1.System.Threading.Tasks命名空间下的(TPL): ...
- iOS多线程技术
iOS多线程技术主要分配NSThread.NSOperation和GCD.下边来简单的介绍一下吧. 随性一点,就不按照顺序来了.所以先介绍一下NSOperation. ---------------- ...
- 多线程技术 NSThread & NSOperation & GCD
多线程:在iOS开发中,用到多线程的处理问题的时候有很多,比如异步下载数据时刷新界面等等. 引入多线程来处理问题的关键就是,基于多线程可以使界面更加流畅,防止界面假死. 界面假死:比如你单击一个按钮来 ...
- iOS的三种多线程技术NSThread/NSOperation/GCD
1.iOS的三种多线程技术 1.NSThread 每个NSThread对象对应一个线程,量级较轻(真正的多线程) 2.以下两点是苹果专门开发的"并发"技术,使得程序员可以不再去关心 ...
- 多线程技术在iOS开发中的使用
进程和线程 要使用多线程,首先需要理解进程和线程这2个概念.这里我简单的说一下. 所谓进程对应的是一个应用程序,负责开辟内存空间供应用程序使用,但是进程不能执行任务(指令).一个进程至少包含一条线程, ...
- Java多线程技术学习笔记(二)
目录: 线程间的通信示例 等待唤醒机制 等待唤醒机制的优化 线程间通信经典问题:多生产者多消费者问题 多生产多消费问题的解决 JDK1.5之后的新加锁方式 多生产多消费问题的新解决办法 sleep和w ...
随机推荐
- SQL(Oracle)日常使用与不常使用函数的汇总
--日常使用的sql语句和oracle语句,有些相对使用的频率比较高,收藏起来还是比较值得的 -- 绝对值 SQL:) value Oracle:) value from dual -- 2.取整(大 ...
- ExtJS003单击按钮弹出window
html部分 <input type="button" id="btn" name="name" value="点击&quo ...
- HDU 4497 GCD and LCM(分解质因子+排列组合)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4497 题意:已知GCD(x, y, z) = G,LCM(x, y, z) = L.告诉你G.L,求满 ...
- 我用过的Linux命令--修改主机名
下面的所有设置都是在CentOS中实验的,其他的Linux系统的玩法是一样的,只是配置文件的目录可能不一样. 局域网中的主机名类似于广域网中的域名,修改主机名有两种方式: (1)在当前会话中修改主机名 ...
- Java判断字符串是中文还是英文
在做开发的时候我们经常需要用到根据某个字符或者字符串来判断其是中文还是英文,从而做相应的处理,其实不难,大多数人们都是用到正则来判断的,下面小贝就给大家分享一下Java判断字符串是中文还是英文 推荐文 ...
- MysqlHelp
using System.Configuration;using MySql.Data: public class MySqlHelp { //链接字符串 private static string ...
- 使得fiddler来抓包查看微信浏览器的网页源码
需要工具:http://www.telerik.com/fiddler 下载安装后 第二步: 打开这个选项: 设置代理:allow remote computer to connect 端口为888 ...
- python函数any()与all()
any(iterable) all(iterable) any()与all()函数的区别,any是任意,而all是全部. 版本:该函数适用于2.5以上版本,兼容python3版本. any(itera ...
- SubLime2 乱码解决
参考 http://www.fuzhaopeng.com/2012/sublime-text-2-with-gb2312-gbk-support/ 使用其中提到的方法二安装 首先下载http://su ...
- (图文教程)帝国cms7.0列表页模板调用多说评论次数
多说是站长朋友们常用的一款社会化评论插件.这里为大家介绍一下帝国列表页调用多说评论次数的方法. 文章由谢寒执笔.博客地址:www.cnblogs.com/officexie/: 1.首先在内容页模板中 ...