今天学习了多线程,总体来说,先从进程入手。
什么是进程呢? 简单来说就是正在运行的程序,例如打开资源管理器,你将看到里面的进程,有些是你运行的程序创建出来的,有些是后台运行的程序创建的。
什么又是线程呢?就是独立的运行单位。一个进程至少有一个线程。进程是程序的一次执行,那么线程可以理解为进程中执行的一段程序片段。
而我们在学习线程之前,所写的程序都是单线程的,那么编译器便是逐行扫描代码并逐行执行。尽管所学的线程不是那么好控制,在精确度要求极高的行业很难执行,如金融什么的,但是它能够让资源最大化的利用起来,提升应用程序的效果。
这一次的课后练习便是做小球,要求是:
1、小球不能超出边框
2、小球相互碰撞,进行反弹
package 线程; import java.awt.Color; import java.awt.Graphics; import java.util.Random; import javax.swing.JButton; import javax.swing.JFrame; public class BallMove extends JFrame{ private static final Graphics g = null; public static void main(String [] args){ BallMove ball = new BallMove(); ball.initUI(); } private void initUI() { this.setTitle("小球移动"); this.setSize(800,500); this.setLocationRelativeTo(null); this.setDefaultCloseOperation(3); this.setResizable(false); /*这个地方是打算添加一个按钮,并加上监听器,按钮每按一下就增加一个小球, 目前功能还未实现*/ // this.setLayout(null); // JButton but = new JButton("添加"); // but.setBounds(20, 20, 80, 30); // this.add(but); this.setVisible(true); Graphics g = this.getGraphics(); ball1.start(); ball2.start(); // ball3.start(); // ball4.start(); } /* 事实上这里可以不必每添加一个小球就要实例化一个,可以修改为数组*/ Ball ball1 = new Ball(0,20,50,this,g); Ball ball2 = new Ball(100,180,50,this,g); // Ball ball3 = new Ball(Color.pink,300,400,50,50,this,g); // Ball ball4 = new Ball(Color.YELLOW,200,30,70,70,this,g); /*这里实现的是画布的重绘*/ public void paint(Graphics g){ super.paint(g); Random random = new Random();//随机 Color color=new Color(random.nextInt(255), random.nextInt(255),random.nextInt(255));//颜色 g.setColor(color); g.fillOval(ball1.getX(), ball1.getY(), ball1.getR(), ball1.getR()); g.setColor(color.BLACK); g.fillOval(ball2.getX(), ball2.getY(), ball2.getR(), ball2.getR()); if(Math.sqrt((ball1.getX()-ball2.getX())*(ball1.getX()-ball2.getX())+ (ball1.getY()-ball2.getY())*(ball1.getY()-ball2.getY())) <= ball1.getR()){ int tempxdirection = ball2.getXdirection(); // int tempydirection = ball2.getXdirection(); // int tempxspeed = ball2.getXspeed(); // int tempyspeed = ball2.getYspeed(); /*这里发生了很神奇的事情,我本来的想法是当两个小球相撞时,两个小球应该交换运动方向,那么x、y的方向都应该改变,可是都改变后两小球便会平行行走,而只改变小球的x方向,则可以实现我想要达到的效果,这个地方我就没想明白!!!*/ ball2.setXdirection(ball1.getXdirection()); // ball2.setYdirection(ball1.getYdirection()); // ball2.setXspeed(ball1.getXspeed()); // ball2.setYspeed(ball1.getYspeed()); ball1.setXdirection(tempxdirection); // ball1.setYdirection(tempydirection); // ball1.setXspeed(tempxspeed); // ball1.setYspeed(tempyspeed); System.out.println("方向交换了....."); } // g.setColor(ball3.getC()); // g.fillOval(ball3.getX(), ball3.getY(), ball3.getWidth(), ball3.getHeight()); // g.setColor(ball4.getC()); // g.fillOval(ball4.getX(), ball4.getY(), ball4.getWidth(), ball4.getHeight()); } }
package 线程; import java.awt.Graphics; import java.util.Random; import javax.swing.JFrame; public class Ball extends Thread{ private Ball ball;//表示当前小球 private JFrame jf;//声明一个窗体 public Ball getBall() { return ball; } public void setBall(Ball ball) { this.ball = ball; } private Graphics g;//声明一个画板 private int x,y;//小球的初始位置x、y private int r;//小球的半径 //用四个整型数据表示四个方向 int NORTH = 1; int SOURTH = 2; int WEST = 3; int EAST = 4; //创建一个随机数对象 Random random = new Random();//随机 private int xspeed,yspeed;//定义x、y方向上的速度 private int xdirection = WEST,ydirection = NORTH;//定义x、y的方向 public Ball(int x,int y,int r,JFrame jf,Graphics g){ this.x = x; this.y = y; this.jf = jf; this.g = g; this.r = r; this.ball = ball; } public void run(){ while(true){ try { Thread.sleep(30); } catch (InterruptedException e) { e.printStackTrace(); } onHitwall(); move(); jf.repaint(); } } public void move(){ xspeed = 5+random.nextInt(10);//x方向速度 yspeed = 5+random.nextInt(10);//y方向速度 switch(xdirection){//对于x方向 case 3:x = x - xspeed;break;//如果小球的运动方向向西,x值减小 case 4:x = x + xspeed;break;//如果小球的运动方向向东,x值增大 } switch(ydirection){//对于y方向 case 1:y = y - yspeed;break;//如果小球的运动方向向北,y值减小 case 2:y = y + yspeed;break;//如果小球的运动方向向难,y值增大 } } public void onHitwall(){ //如果碰到边界,方向改变 if(x>jf.getWidth()-r){ xdirection = 3; } if(x<0){ xdirection = 4; } if(y>jf.getHeight()-r){ ydirection = 1; } if(y<0+r/2){ ydirection = 2; } } // public void onHitball(){ // if(this-ball.getX()){ // // } // } public int getXspeed() { return xspeed; } public void setXspeed(int xspeed) { this.xspeed = xspeed; } public int getYspeed() { return yspeed; } public void setYspeed(int yspeed) { this.yspeed = yspeed; } public int getXdirection() { return xdirection; } public void setXdirection(int xdirection) { this.xdirection = xdirection; } public int getYdirection() { return ydirection; } public void setYdirection(int ydirection) { this.ydirection = ydirection; } public JFrame getJf() { return jf; } public void setJf(JFrame jf) { this.jf = jf; } public Graphics getG() { return g; } public void setG(Graphics g) { this.g = g; } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } public int getR() { return r; } public void setR(int r) { this.r = r; } }
相关推荐
关于c#数字飞来飞去的代码,用数组做的。对于一些大学生会有用。
动态龙飞来飞去的龙是一款基于SWF格式的源码资源,主要用于创建一个互动的动画效果,展示一条金黄色的龙在屏幕上飞翔。SWF(ShockWave Flash)是Adobe公司开发的一种矢量图形和多媒体内容格式,常用于网页设计、动画...
代码片段: var solveBirdMove = function(bird) { ['x', 'y', 'z'].forEach(function(key) { ... if (Math.abs(bird.move[key]) > 0.003) { ... bird.move.x = speed * (mouse.x - bird.pos.x bird....
"箭头飞来飞去flash动画"这个项目显然涉及到使用Adobe Flash(现已被Animate CC替代)创作的动态图形内容,主要元素是白色的箭头在不断地移动,这样的素材通常用于指示方向或者增强视觉效果。 首先,我们要了解...
飞来飞趣旅行MCN商业计划书.pdf
有小球飞来的链接.rar有小球飞来的链接.rar有小球飞来的链接.rar有小球飞来的链接.rar有小球飞来的链接.rar有小球飞来的链接.rar有小球飞来的链接.rar有小球飞来的链接.rar有小球飞来的链接.rar有小球飞来的链接.rar
【短视频商业BP】飞来飞趣旅行MCN商业计划书.pdf
这是一款关于小球的经典游戏代码,小球由于重力作用在天空中飞来飞去。
《Plane:飞来飞去的飞机》项目是一个利用JavaScript编程语言实现的互动模拟程序,它旨在为用户展示一架飞机在类似太空环境中的飞行状态。在这个项目中,开发者着重于创造一个视觉上的体验,让飞机在无重力的空间里...
### Bmail联系人飞来飞去效果解析 #### 一、引言 “Bmail联系人飞来飞去效果”是一种动态视觉展示效果,常见于邮件客户端或网页应用中,用于增强用户交互体验。该效果通常表现为当用户选择某个联系人时,该联系人的...
在本文中,我们将深入探讨如何在Delphi编程环境中实现一种实用的图片打开飞入特效。Delphi是一款强大的Object Pascal开发工具,广泛用于构建桌面应用程序,它提供了丰富的图形用户界面(GUI)组件和功能,使得开发者...
Atom-linter-pylama是一款为Atom文本编辑器设计的插件,主要功能是集成Python代码检查工具Pylama。在编程过程中,它能实时地帮助开发者发现并修复Python代码中的潜在错误和不符合编码规范的地方,从而提高代码质量和...
《大雁飞来了》是一篇由林清玄撰写的文章,通过其独特的笔触,讲述了大雁因人类喂食行为而改变迁徙习性,不再南飞的生态现象。文章不仅描绘了一幅生动的自然景观,更深入探讨了人类活动对生态环境的影响、移民文化的...
绕当前轴 360 度飞行并... % movieAz360:通过飞来飞去从当前窗口制作电影% % [M] = movieAz360(N,filename,q,el); % N:360/N 步长的帧数% 文件名:如果为'',则不生成文件% q:质量默认值=75; % el:用户指定的海拔
宇飞来F9是一款智能手机,该压缩包"宇飞来F9售后包.rar"是针对这款设备的官方售后原厂刷机救砖包。在IT领域,刷机是指通过安装新的操作系统或者更新固件来刷新设备的功能,而“救砖”则意味着手机因为软件问题无法...
...通过JavaScript的`canvas.getContext('2d')`方法,我们可以获取到2D渲染上下文,从而调用一系列绘图方法,如`fillRect()`、`strokeRect()`、`drawImage()`等,进行图形的绘制。 在这个特效中,我们主要关注的是`...
Birdify.github.io Birdify 是一个 CSS 规则集和 JS 实用程序,用于制作文本翻页。 对于不耐烦的人: 在页面中包含birdify.css、birdify.js 和 jQuery 调用 Birdify(target jQuery selector).fly();...
【德飞来STM32例程】是一套精心编写的示例代码库,专为学习和使用STM32微控制器的开发者设计。STM32是由意法半导体(STMicroelectronics)推出的基于ARM Cortex-M内核的微控制器系列,广泛应用于各种嵌入式系统设计...
可以在网页上飞来飞去的那种。呵呵可以在网页上飞来飞去的那种。呵呵可以在网页上飞来飞去的那种。呵呵