动态弹球的实现 加入了多线程技术--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 ...
随机推荐
- java 写文件解析
import java.io.File; import java.io.FileOutputStream; import java.io.*; public class FileTest { publ ...
- java ee环境搭建
1.安装java(tm)2 platform 2.下载安装Java EE SDK 版本:Java Platform,Enterprise Edition 7 SDK (with JDK 7u45) 下 ...
- java集合分析(转载)
参考文章:浅谈Java中的Set.List.Map的区别 Java 7 Collections详解 java中集合分为三类: Set(集) List(列表) Map(映射) Set和List继承自Co ...
- C# Regex ignoring non-capturing group
E.g I want match the keword "3398" after "red" from the string "This is red ...
- (Problem 49)Prime permutations
The arithmetic sequence, 1487, 4817, 8147, in which each of the terms increases by 3330, is unusual ...
- 为什么Lisp没有流行起来
很久以前,这种语言站在计算机科学研究的前沿,特别是人工智能的研究方面.现在,它很少被用到,这一切并不是因为古老,类似古老的语言却被广泛应用.其他类似的古老的语言有??FORTRAN. COBOL. L ...
- discuz默认模板文件结构详解-模板文件夹介绍
| — template — default 系统内置风格模板(默认风格)| — template — default – discuz_style_default.xml 风格安装文件,可用 ...
- 让Apache支持中文Directory的最简方法
解决方法很简单,一句话,将httpd.conf配置文件的字符编码转换成UTF-8即可. 转换方法也很简单,在记事本中选择 文件->另存为,弹出的窗口中选择编码为UTF-8即可. 重新启动下apa ...
- ThinkPHP 3.1.2 查询方式的一般使用2
//select id1> and id2< 默认是and $data['id']=array(array('gt',$id1),array('lt',$id2)); // $data[' ...
- C++模板:qsort
void qsort(int l,int r){ int i,j,t,mid; mid=b[(l+r)>>1]; i=l; j=r; do{ while (b[i]<mid) i++ ...