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

动态弹球的实现 加入了多线程技术--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 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()方法

}

}

092756203.jpg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/526666.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java语言矩形与立方体的继承,沈阳师范大学大一下册C++语言PTA题目集以及答案(编程题篇)...

沈阳师范大学大一下册C语言PTA题目集以及答案(编程题篇)7-1 测试c (20分)倒序输出从控制台输入的n个整数输入格式:第一行输入一个数n&#xff0c;代表行数依次输入n个整数输出格式:将n个整数倒序输出输入样例:31 2 3输出样例:321#includeint main(){int n,i;std::cin>>i;…

php启动 大量sess文件,关于PHP中Session文件过多的问题

PHP的默认机制&#xff1a;每一次php请求&#xff0c;会有1/100的概率(默认值)触发“session回收”。如果“session回收”发生&#xff0c;那就会检查/tmp/sess_*的文件&#xff0c;如果最后的修改时间到现在超过了1440秒(gc_maxlifetime的值)&#xff0c;就将其删除&#xff0…

MATLAB求图片两圆圆心,求助:如何求此图中两圆的圆心距?

对于你给出的图片&#xff0c;我根据之前提到的思路编写了以下程序。感觉还蛮准的。这个程序只能用于两圆相交的情况。当小圆在大圆内部时&#xff0c;需要在其中加以判定。仅供参考。clear;clcc imread(1.jpg);cc c;tic[m n] size(c);for i1:mindex find(~c(i,:));if leng…

php-fpm 启动拥有者,php-fpm 的各种启动方式

启动 php-fpm 最简单的操作&#xff1a;/usr/local/php/sbin/php-fpmphp 5.3.3 以后的php-fpm 不再支持 php-fpm 以前具有的 /usr/local/php/sbin/php-fpm (start|stop|reload)等命令&#xff0c;所以不要再看这种老掉牙的命令了&#xff0c;需要使用信号控制&#xff1a;maste…

java比较时间的先后utc时间,日期、时间与UTC

传统日期的局限人类在对时间的测定上存在一个进化的过程&#xff0c;最早通过观察天体的自转与公转来确定时间&#xff0c;比如地球自转一周为一天&#xff0c;月球公转一周为一月&#xff0c;地球公转一周为一年。我们先考虑天和年&#xff0c;他们之间就像数学一样存在一个粗…

php主题怎么增加导航页,教你如何给wordpress主题添加导航栏

烈火建站学院转载 不是所有的wordpress主题都自带导航栏的&#xff0c;我早就想自行添加一个。昨天的标题前有“GOOGLE是个好老师”这个句子&#xff0c;今早赶紧删了&#xff0c;倒不是不认同&#xff0c;而是觉得在添加导航栏这个事情上还真不是那么回事情。以前我就说过&…

python 画线条进行到指定区域更改颜色,使用Colormaps在matplotlib中设置线条的颜色...

线条样式&#xff0c;标记和定性颜色的组合&#xff0c;来自matplotlib&#xff1a;import itertoolsimport matplotlib as mplimport matplotlib.pyplot as pltN 8*410l_styles [-,--,-.,:]m_styles [,.,o,^,*]colormap mpl.cm.Dark2.colors # Qualitative colormapfor …

asp php 用户登录,一个简单的asp.net 单点登录实现

以下是实现的效果图&#xff1a;首先上图的点击火车订票链接&#xff0c;就会打开http://学生信息平台网站/LoginToTrainSite.asa页面。LoginToTrainSite.asa页面的大致代码如下&#xff1a;Response.Buffer TrueResponse.ExpiresAbsolute Now() - 1Response.Expires 0Respo…

ajax怎么发送数据给php,ajax怎么发送数据给php

在网上看了很久&#xff0c;发现数据的利用ajax提交数据到后台其实很简单&#xff0c;但是很多讲解的并不清楚&#xff0c;对于初学者来说&#xff0c;很多真的是看着有点糊涂&#xff0c;拿来直接用&#xff0c;又想去了解怎么回事&#xff0c;其实利用ajax提交数据到后台是非…

oracle10无法安装打开,64位win10添加oracle odbc驱动时提示无法加载oracle怎么办

对于win10 64位系统添加oracle odbc驱动时提示无法加载oracle的问题相信部分用户都应该有所了解了&#xff0c;但是对于如何解决这个问题的实际操作的用户来说可能不多&#xff0c;因此&#xff0c;为了帮助出现这种问题的用户&#xff0c;小编在这里就来教大家64位win10添加or…

Oracle 11g ora 15018,oracle 11gR2 RAC root.sh 错误 ORA-15072 ORA-15018

Oracle 11gR2 RAC安装Clusterware结束&#xff0c; 在第二个节点执行root.sh脚本的是报如下错误&#xff1a;DiskGroup DATA1 creation failed with the following message:ORA-15018: diskgroup cannot be createdORA-15072: command requires at least 1 regular failure gro…

oracle kepserve,Kepware.KEPServer\KEPServerEX_V5操作简介含opc quick client 连接测试

【实例简介】Kepware.KEPServer\KEPServerEX_V5操作简介含opc quick client 连接测试3.開魯 KEPServereX的管理視窗請從「開始」->「所有程式」->「 Kcpwarc」->「 KEPScrvcrEX5」->「 KEPScrvcrEX5Configuration I來動或在電腦桌面右下方的 System Tray圖示画( KE…

oracle 批量导出sequence,如何单独导出导入sequence?

可以用工具导出或者自己写个procedure直接把sequence的sql 存到1个文件中&#xff0c;然后执行文件即可procedure dump_all_sequences isl_file_handle UTL_FILE.file_type;beginl_file_handle : UTL_FILE.fopen(PLSQL_OUTPUT,all_sequences.sql,W,32000);for c in (select seq…

linux命令fdisk,Linux fdisk 命令使用详解

一、fdisk 的介绍fdisk - Partition table manipulator for Linux &#xff0c;译成中文的意思是磁盘分区表操作工具;本人译的不太好&#xff0c;也没有看中文文档;其实就是分区工具fdsik 能划分磁盘成为若干个区&#xff0c;同时也能为每个分区指定分区的文件系统&#xff0c;…

linux获取文件的md5,linux shell 获取文件md5的命令linux操作系统 -电脑资料

下面我给各位朋友总结一下在linux中利用shell命令来获取文件md5及遍历目录下所有文件的md5的例子&#xff0c;希望此例子对各位同学会有所帮助&#xff0c;获取文件的MD5值&#xff1a;$ md5sum linuxmint-12-gnome-dvd-32bit.iso|cut -d -f1得到的MD5值&#xff1a;ee3d6e2c…

Linux用户登录自动拷贝文件,linux下ssh远程登录/scp远程复制文件/rsync远程同步命令的自动登录...

原文出处&#xff1a; http://blog.csdn.net/five3/article/details/8648484最近需要写一个脚本备份各个服务器上的程序到一个指定服务器上&#xff0c;本来以为查查rsync命令的使用321就能搞定&#xff0c;结果rsync命令要支持自动登录还是要配置服务和参数&#xff0c;又不确…

linux postgresql默认安装目录,postgresql - 三种安装方式(示例代码)

最近接触了postgresql的安装&#xff0c;和大家分享一下。一、简 介PostgreSQL 是一种非常复杂的对象-关系型数据库管理系统(ORDBMS)&#xff0c;也是目前功能最强大&#xff0c;特性最丰富和最复杂的自由软件数据库系统。有些特性甚至连商业数据库都不具备。这个起源于伯克利(…

linux不显示无线网卡驱动安装失败,Linux_Ubuntu无线网卡驱动安装方法,安装了Ubuntu后发现没有无线网 - phpStudy...

Ubuntu无线网卡驱动安装方法安装了Ubuntu后发现没有无线网络&#xff0c;搜索不到WiFi&#xff0c;但是正常情况下安装Ubuntu后&#xff0c;系统会自动安装无线网卡驱动&#xff0c;并且开机自动连接无线网。查了一下&#xff0c;原来我的网卡是非主流网卡&#xff0c;Ubuntu不…

linux消息总线日志,linux – 解密继续mpt2sas系统日志消息

摘要我在syslog中收到这些神秘的消息,因为我安装了一些新的硬件,我无法弄清楚问题是什么,如果它是严重的,或者该怎么做.它们来自新的SATA HBA,它们遵循一种模式.我会得到几条第一条消息,然后是5-30秒之后的第二条消息.它们都是以相同的秒数记录的blob,每个的确切数量在大约2到3…

linux中央服务器,如何在Linux上搭建一个Git中央仓库

前言&#xff1a;本教程只面向那些个人开发者&#xff0c;想要自己在linux上搭建一个git中央仓库用来上传发布自己的项目。但是对于团队来说可能有更高的要求&#xff0c;可以使用gitlab搭建一个可视化的类似github的版本管理系统测试环境我使用的linux版本是Centos7&#xff0…