任务描述:实现了动态弹球的功能,对于有弹球功能的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 balls = new ArrayList();

//定义了一个集合 这个集合是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()方法

}

}

iOS开发之多线程技术

本篇争取一篇讲清讲透,依然将通过四大方面清晰的对iOS开发中多线程的用法进行详尽的讲解: 一.什么是多线程 1)多线程执行原理 2)线程与进程 3)多线程的优缺点 二.我们为什么要用多线程编程技术 三 ...

iOS多线程技术方案

iOS多线程技术方案 目录 一.多线程简介 1.多线程的由来 2.耗时操作的模拟试验 3.进程和线程 4.多线程的概念及原理 5.多线程的优缺点和一个Tip 6.主线程 7.技术方案 二.Pthrea ...

C&num;多线程技术总结(异步)

我这里针对现有的C#多线程技术进行一个汇总,一是复习,二是方便索引,文章部份知识点来源于网络,非本人原创. 一.并行(异步): 1.System.Threading.Tasks命名空间下的(TPL): ...

iOS多线程技术

iOS多线程技术主要分配NSThread.NSOperation和GCD.下边来简单的介绍一下吧. 随性一点,就不按照顺序来了.所以先介绍一下NSOperation. ---------------- ...

多线程技术 NSThread &amp&semi; NSOperation &amp&semi; GCD

多线程:在iOS开发中,用到多线程的处理问题的时候有很多,比如异步下载数据时刷新界面等等. 引入多线程来处理问题的关键就是,基于多线程可以使界面更加流畅,防止界面假死. 界面假死:比如你单击一个按钮来 ...

iOS的三种多线程技术NSThread&sol;NSOperation&sol;GCD

1.iOS的三种多线程技术 1.NSThread 每个NSThread对象对应一个线程,量级较轻(真正的多线程) 2.以下两点是苹果专门开发的"并发"技术,使得程序员可以不再去关心 ...

多线程技术在iOS开发中的使用

进程和线程 要使用多线程,首先需要理解进程和线程这2个概念.这里我简单的说一下. 所谓进程对应的是一个应用程序,负责开辟内存空间供应用程序使用,但是进程不能执行任务(指令).一个进程至少包含一条线程, ...

Java多线程技术学习笔记(二)

目录: 线程间的通信示例 等待唤醒机制 等待唤醒机制的优化 线程间通信经典问题:多生产者多消费者问题 多生产多消费问题的解决 JDK1.5之后的新加锁方式 多生产多消费问题的新解决办法 sleep和w ...

C&plus;&plus;多线程技术windows常用方法

随着计算机CPU计算能力快速提高,计算机的处理性能和并行性能力也大大提升.那么,一味使用运行时标准库的C++语言也应该开始支持多线程技术.今天,我为大家带来了C++在windows平台下的常用多线程方 ...

随机推荐

移动端用js与jquery实时监听输入框值的改动

背景: 在一次移动端H5开发中,需要监听输入框值的实时变动. onchange事件肯定抛弃,因为只能失去焦点才触发. 而keyPress在Android可以触发,iOS不可以. 又不想用Android ...

Linux服务器之间的目录共享

1.在Redhat Linux中查看是否已安装NFS及portmap的命令如下:rpm -qa |grep portmaprpm -qa |grep nfs2.如果没有安装这两个软件包,安装命令如下: ...

Lua 自定义函数string&period;split

function string.split(str, delimiter)    if str==nil or str=='' or delimiter==nil then        return ...

命令行一键清除IE记录

清除Internet临时文件 RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8 清除Cookies RunDll32.exe InetCpl.cpl, ...

CV牛人牛事简介之一

CV牛人牛事简介之一 [论坛按] 发帖人转载自:http://doctorimage.cn/2013/01/01/cv-intro-niubility/#6481970-qzone-1-83120-8 ...

uniq linux下去除重复行命令

一,uniq干什么用的 文本中的重复行,基本上不是我们所要的,所以就要去除掉.linux下有其他命令可以去除重复行,但是我觉得uniq还是比较方便的一个.使用uniq的时候要注意以下二点 1,对文本操 ...

如何让MFC程序关闭按钮失效,也无法右击任务栏关闭窗口来关闭?

如何让MFC程序关闭按钮失效,也无法右击任务栏关闭窗口来关闭,即右键任务栏的关闭窗口失效呢?很简单,有一个小窍门就是:响应IDCANCEL消息,具体实现如下: 首先定义消息映射:ON_BN_CLICK ...

【转】adb&period;exe&comma;start-server&&num;39&semi; failed -- run manually if necessary

[转]Android adb.exe程序启动不起来,如何处理 解决问题: 百度google大家多说的是任务管理器 kill掉adb 或者重启adb server,但我任务管理器就没有adb ,猜测是某 ...

JavaScript null和undefined的区别

前言 1995年javascript诞生时,最初像Java一样,只设置了null作为表示"无"的值.根据C语言的传统,null被设计成可以自动转为0 但是,javascript的设 ...

python之xml 文件的读取方法

''' xml 文件的读取方法 ''' #!/usr/bin/env python # -*- coding: utf- -*- import xml.etree.ElementTree as ET ...

java游戏 动态录入弹球_动态弹球的实现 加入了多线程技术--javaSE游戏准备工作...相关推荐

  1. java弹球轨迹运动解说,动态弹球的实现 加入了多线程技术-javaSE游戏准备工作

    动态弹球的实现 加入了多线程技术--javaSE游戏准备工作 任务描述:实现了动态弹球的功能,对于有弹球功能的SE游戏奠定了基础. package 运用线程技术的小球; import java.awt ...

  2. 【源码+图片素材+详细教程】Java游戏开发_Java开发经典游戏飞翔的小鸟_飞扬的小鸟_Java游戏项目Flappy Bird像素鸟游戏_Java课程设计项目

    课程目标: 1.通过本课程的学习巩固Java的相关基础知识,例如循环判断,数组和集合的使用,对象的继承,接口的实现,窗口的创建,事件监听,图形绘制. 2.完成小鸟的移动,管道自动生成.碰撞死亡,计分系 ...

  3. 动态壁纸安卓_动态壁纸吧(精美壁纸)V1.0.6 安卓免费版

    动态壁纸吧(精美壁纸)是一个非常实用的桌面美化工具.用户可以在该软件上选择精美的壁纸更换,该平台拥有大量的壁纸资源,还可以设置动态精美的壁纸,使您的手机更加独特,彰显您的个性.有需要的用户欢迎来绿色先 ...

  4. 动态时间规整_动态时间规整下时间序列子序列的搜索与挖掘

    一.DTW的背景 对于时间序列数据挖掘算法的相似性搜索来说最大的瓶颈就是所花费的时间,所以大多数关于时间序列数据挖掘的学术研究都在考虑数百万个时间序列对象时停滞不前,而许多工业和科学都在数十亿个等待探 ...

  5. 怎么用java做全民飞机大战_基于VC++和OpenCV实现的全民飞机大战游戏

    摘要 功能:利用C++语言完成了一个小游戏项目-全民飞机大战,该游戏首先能够给用户提供注册,登录功能:提供了菜单栏及两种游戏模式,一种是无尽模式,另一种是一般模式:一般模式中用户通过控制玩家飞机攻击敌 ...

  6. java动态执行逻辑_动态执行代码逻辑

    动态执行逻辑的方法据我所知有一下两种方式 QLExpress Groovy QLExpress QLExpress是阿里开源的动态脚本执行的项目. 由阿里的电商业务规则.表达式(布尔组合).特殊数学公 ...

  7. java代码防止sql注入_动态Java代码注入

    java代码防止sql注入 在本文中,我们将研究如何将Java代码动态加载到正在运行的jvm中. 该代码可能是全新的,或者我们可能想更改程序中某些现有代码的功能. (在开始之前,您可能想知道为什么到底 ...

  8. java数组设计的原理_动态图-Java常用数据结构及其设计原理

    > 转载 - [图解Java常用数据结构(一) - 大道方圆 - 博客园 ](https://www.cnblogs.com/xdecode/p/9321848.html) > https ...

  9. python动态排名可视化_动态排名可视化 | 带你领略编程语言20年风云变化

    原标题:动态排名可视化 | 带你领略编程语言20年风云变化 作者 | 周萝卜 来源 | 萝卜大杂烩 2019已经过去,回看编程语言20年真是风云变化! 从 TIOBE 榜(热门榜)上来看,Java.C ...

最新文章

  1. 自创设计模式-----答题卡模式
  2. AgileGAN130毫秒生成动漫肖像!LeCun点赞:超越梵高
  3. 技术人员如何摆脱移生万物时代的焦虑
  4. Python-EEG工具库MNE中文教程(12)-注释连续数据
  5. linux中没有semanagea安装包,如何使用semanage管理SELinux安全策略
  6. asp.net 获得域名,端口,虚拟目录[转]
  7. 活跃用户数怎么计算_留存率计算
  8. 学习笔记-------Seate解决分布式事务
  9. 话里话外: 信息化与高层参与度的关系
  10. 2021企业直播新观察——市场升温蕴藏机会,消费场景左右未来
  11. sklearn中SVM的可视化
  12. cout不明确什么意思_年轻人不讲武德是什么梗和意思 年轻人不讲武德梗出处
  13. 深入理解css之float
  14. js语法、关键保留字、变量、数据类型
  15. IEEE-access 模板LaTeX Error: Something's wrong--perhaps a missing \item.
  16. JFlash添加芯片
  17. 红linux系统,红帽linux系统官方下载-红帽linux系统32位v9.0 完整版 - 极光下载站
  18. 如何利用迅捷PDF编辑器在PDF文档上修改文字大小和颜色
  19. ble HCI 数据格式
  20. VScode 用socks5代理连接远程服务器

热门文章

  1. php 留言板 前后端分离
  2. 基于SSM的助学贷款管理系统
  3. 总账会计、明细账会计和出纳是分工和协作的关系(转)
  4. 您身边专业的会议会展服务专家——大连世博会展服务公司!
  5. 100个常用大数据词汇中英文对照表
  6. MATLAB中eps使用
  7. 毕业学java_大学毕业我该何去何从,想学Java,但?
  8. AutoCAD常用技巧(字体、颜色、线条、导出JPG图片)
  9. adb安装和卸载apk
  10. 计算机知识竞赛赛制,【计算机·活动】校规校纪知识竞赛