动态弹球的实现 加入了多线程技术--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 ...
随机推荐
- asp.net发布网站(转)
1. 在Web项目中点击发布网站,如图1所示 图1 2. 选择要发布的路径——>“确定”,如果项目显示发布成功就可以了.如图2所示 图2 3. 打 ...
- ADO.NET详解----核心对象的使用
一.Connection对象 指定某个具体数据源以及提供登陆方式及用户名与密码. Connection对象的主要成员: 1.ConnectionString属性:连接字符串,指定要操作的数据库以及登录 ...
- gcc 的编译过程
通常我们都是使用下面的命令来直接生成可执行文件 gcc demo.c -o demo 对于我们来说十分简单,但是对编译器来说却完成了一系列复杂的工作,概括起来有如下几步: 1. 预处理 gcc -E ...
- java代理课程测试 spring AOP代理简单测试
jjava加强课程测试代码 反射. 代理 .泛型.beanUtils等 项目源码下载:http://download.csdn.net/detail/liangrui1988/6568169 热身运动 ...
- 0603 python 基础02
作业1:ANSI和utf8的区别? ASCII是用来表示英文字符的一种编码规范,每个ASCII字符占用1个字节(8bits). 可以表示的最大字符数是256,一般只用前128个(最高位为0),其中包括 ...
- C winpcap 网络抓包 并获取IP TCP 协议的相关信息
以太网协议分析函数: void ethernet_protocol_packet_handle (u_char *argument, const struct pcap_pkthdr *packet_ ...
- RFID电子标签制造封装工艺和可靠性研究
一.目的和意义 电子标签已经成为RFID工业的主要焦点 实现低成本.大批量.高可靠性地制造电子标签是推广RFID产品应用的关键技术之一 针对RFID标签制造中核心的封装工艺开展研究,以各向异性导 ...
- Java学习之DBUtils工具的学习
简介 commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影 ...
- 概率图模型(PGM)学习笔记(四)-贝叶斯网络-伯努利贝叶斯-多项式贝叶斯
之前忘记强调了一个重要差别:条件概率链式法则和贝叶斯网络链式法则的差别 条件概率链式法则 贝叶斯网络链式法则,如图1 图1 乍一看非常easy认为贝叶斯网络链式法则不就是大家曾经学的链式法则么,事实上 ...
- JavaScript 高级程序设计(第3版)笔记——chapter5:引用类型(基本包装类型部分)
一.介绍 为了方便操作基本类型值,ECMAScript还提供了3个特殊的引用类型:Boolean, Number, String. 实际上,每当读取一个基本类型值得时候,后台就会创建一个对应的基本包装 ...