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,一经查实,立即删除!

相关文章

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…

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

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

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

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

linux桌面发展方向,观点|Linux 桌面的发展之路!

Ken Starks 在 fossforce.com 网站上问 你们是如何优化 Linux 的&#xff1f;&#xff0c;我很高兴他问了这个问题&#xff0c;因为我有话要说&#xff01;对我来说&#xff0c;Linux 桌面就是一连串的承诺&#xff0c;但是这些承诺却总是无法兑现。它在每个版本发布后都会说“…

linux常见基础服务,常用的linux命令的基本使用(一)

序号命令对应英文作用01lslist查看当前文件夹下的内容02pwdprint name of of current/working directory查看当前所在文件夹03cd[目录名]change directory切换文件夹04touch[目录名]touch如果文件不存在&#xff0c;新建文件05mkdir[目录名]make directory创建目录06rm[文件名]…

树莓派怎么学linux,树莓派使用入门用树莓派学 Linux

树莓派使用入门用树莓派学 Linux我们的《树莓派使用入门》的第四篇文章将进入到 Linux 命令行。在本系列的 第三篇文章 中开始了我们的树莓派探索之旅&#xff0c;我分享了如何安装 Raspbian&#xff0c;它是树莓派的官方 Linux 版本。现在&#xff0c;你已经安装好了 Raspbian…

全国计算机二级C语言过关要求,计算机二级考试c语言过关经验

计算机二级考试c语言过关经验考试要求考生在规定的时间内按指定的方式解答精心选定的题目或按主办方的要求完成一定的实际操作的任务&#xff0c;并由主办方评定其结果&#xff0c;从而为主办方提供考生某方面的知识或技能状况的信息。下面是小编整理的关于计算机二级考试c语言…

c语言链表贪吃蛇脚本之家,C++控制台实现贪吃蛇游戏

本文实例为大家分享了C实现贪吃蛇游戏的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下刚学完了C语言&#xff0c;便尝试的写了贪吃蛇的代码&#xff0c;但是效果不佳&#xff0c;很多的bug&#xff0c;所以&#xff0c;这个学了C&#xff0c;便重新的写了这个小游戏…

win8能开发android的sdk么,Win8下Android SDK安装与环境变量配置教程

Win8下Android SDK的安装与环境变量配置&#xff0c;具体内容如下1、下载Android SDK&#xff0c;点击安装&#xff0c;直接默认路径即可&#xff01;进入该网站后往下拉就能找到sdk下载的位置&#xff0c;选择图中红圈的程序进行下载2、安装过程比较简单&#xff0c;按照平时安…

Android公共jar,使用JitPack管理Android项目中公共模块库

随着项目的功能越来越多&#xff0c;代码和模块维护也越来越复杂&#xff0c;为了减少主项目的代码量&#xff0c;一般都会将一些公共使用的类或者功能模块抽离出来&#xff0c;与主项目解耦分离&#xff0c;当主项目中需要使用的时候&#xff0c;直接进行引用即可。现在Androi…

mac android 手机连接打印机,为什么苹果电脑连接打印机打不出来怎么办

1. 为什么苹果笔记本连接打印机打印不了1、您的 Wi-Fi 或本地网络上的 AirPrint 打印机。2、临近的 Wi-Fi 打印机或位于您本地网络且支持 Bonjour 的基于有线网络的打印机。3、连接到家庭网络中 Time Capsule 或 AirPort 基站的 USB 端口的打印机。4、与家庭网络中的其他 Mac 共…

华为正式官宣鸿蒙OS,华为正式官宣,鸿蒙OS 2.0系统即将问世,Mate 40有望首发

由于华为5G技能取得了突破性的领先&#xff0c;美国对其采取了实体清单操持。意图干涉华为的发展速率&#xff0c;但实际上对于华为影响最大的却是软件方面的“断供”。在美国发布实体清单短短数月之后&#xff0c;谷歌公布停止对于华为手机系统的GMS服务授权。间接导致了华为手…

笔记本html连接电视机,详细教您笔记本连接电视

很多时候我们想要通过电视机来在线看电影&#xff0c;而苦于笔记本的屏幕尺寸太小了&#xff0c;心想着要是笔记本能连接上电视该有多好。其实现在的电视提供了很多连接电脑的功能&#xff0c;简单操作一下就可以实现&#xff0c;那笔记本怎么连接电视呢&#xff1f;下面一起来…

计算机网络静态路由大作业 3地互联,计算机网络-静态路由配置

计算机网络综合实习三&#xff1a;路由器基本配置一、实验目的通过实验掌握利用路由器实现网络互联的一般方法&#xff0c;掌握基本的路由器配置命令。二、实验原理不同的计算机网络在技术和工作方式上的差异&#xff0c;是需要进行网络互联的基本原因。在现实的应用中&#xf…

台式机没有显示计算机图标,为什么台式电脑没有喇叭图标

使用电脑的过程中&#xff0c;有时候会遇到电脑的音量图标突然不见的情况&#xff0c;怎么办?下面是学习啦小编为大家整理的关于台式电脑没声音图标的相关资料&#xff0c;希望对您有所帮助!台式电脑没声音图标的解决方法首先点击“开始”按钮&#xff0c;找到“控制面板”选项…

计算机培训开场语,辅导班家长会主持词开场白

【仅供学习参考&#xff0c;切勿通篇使用&#xff01;】等孩子长大了&#xff0c;再想好好教育就没有机会了。这时候前人的方法和经验就显得尤其重要了下面是由76范文网小编为大家整理的“辅导班家长会主持词开场白”&#xff0c;仅供参考&#xff0c;欢迎大家阅读。辅导班家长…

计算机语言由低到高就被分为了什么阶段,2004年4月高等教育自学考试认知心理试题...

第一部分 选择题 (共30分)一、单项选择题(本大题共20小题&#xff0c;每小题1分&#xff0c;共20分)在每小题列出的四个选项中只有一个是符合题目要求的&#xff0c;请将其代码填写在题后的括号内。错选、多选或未选均无分。1.“望梅止渴”从反射论的观点来分析&#xff0c;是(…

ROCKOUT软件测试工程师,具透丨这才是让 iMessage 变得好玩有用的原因:iMessage App Store 详解...

关于栏目苹果、谷歌每年一次大更新的新系统都值得关注&#xff0c;我们始终不建议普通用户提前尝鲜稳定性不佳的测试版&#xff0c;但我们理解想要尝鲜的心情&#xff0c;于是有了「具透」这个栏目。「具透」会挖掘、详解新系统的各个功能细节&#xff0c;并会以长期更新形式&a…