多线程之赛跑游戏.docx

多线程之赛跑游戏.docx

ID:29010333

大小:487.45 KB

页数:9页

时间:2018-12-15

上传者:U-1075
多线程之赛跑游戏.docx_第1页
多线程之赛跑游戏.docx_第2页
多线程之赛跑游戏.docx_第3页
多线程之赛跑游戏.docx_第4页
多线程之赛跑游戏.docx_第5页
资源描述:

《多线程之赛跑游戏.docx》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

多线程之赛跑游戏在corejava的课程中,有一个重要的知识点,就是线程。那什么是线程呢?线程,是“进程”中某个单一顺序的控制流。而进程和流程的最大区别就在于,每个进程都会独享一块存储区域,多个线程只能共享此进程的这块存储区域。那线程会给我们的java程序带来什么好处呢?好处一,可以实现并行,好处二,可以更有效的利用资源。下面我们就编写一个小小的赛跑游戏来看看线程给我们程序带来的惊喜吧。首先,咱们先看看程序最后完成的效果,及操作流程:游戏一开始将直接进入主题,简洁的界面,无需说明文档,一眼便知如何操作。(见图1)图1:游戏一开始的界面选择好我们要支持的运动员后,点击确定按钮,此时游戏还没有开始,但我们已不可再改变支持的对象了。(见图2)图2:下注后的界面好吧,既然不能更改,那么就让比赛快点开始吧!“蜗牛,加油!加油!”(见 图3)图3:游戏开始后的界面哦也!蜗牛赢了!看到了吗,结果就在图4里,哈哈哈,点击确定后,400分就拿到手了!图4:出结果后的界面真是一场痛快的比赛!现在,咱们来进行一下赛后分析,上面这个小游戏究竟有多少个线程呢?我听到有人说“这个很容易就看出来了,一共就3个吗,每个参赛的跑者,都是一个线程”。真的只是表面看到的这样吗?这个程序一共有5个线程!不信吗?那听我来说说:第1个线程,就是被大家忽略了,却有非常熟悉的 main。这个是我们java程序运行时,必定会运行的,也是我们学习java时最早接触的一个线程。第2、3、4个线程,就是大家说的,那三个赛跑者,每一个都是一个独立的线程。第5个线程,从图上是看不到的,却又是一个非常重要的线程,它甘居幕后,担任着发令,裁决输赢的任务,我们暂且把它叫做“裁判”吧。整个游戏的过程我们了解了,所包含的线程我们也都分析了,下面的时间就是着手实现的阶段了:打着MVC的旗号,项目结构成了下面这个样子:images:中放置着,程序所需要的全部图片vo:里放着我们的一个实体类enter:里存放着程序的入口view:里存放着程序的界面control里存放着“裁判”类和监听器。界面部分的编写我就不细说了,就是要继承JFrame来定义我们自己的窗体。顺便说一句,那个跑道是通过画图绘制的背景。别忘了给按钮添加监听器哦!今天的主题是线程,那么我们就要仔细看看线程的代码了:java中实现线程的有两种途径,一种是继承Thread类,还有一种是实现Runnable接口。下面的关于“运动员”、”裁判”的实现,我都统一使用了第二种方法,就是实现Runnable接口。具体代码如下:packagesaipao.vo;importjava.awt.Image;importjava.awt.Point;importjava.util.Random;importjavax.swing.ImageIcon; publicclassRunnersimplementsRunnable{privateStringname;//名称privatePointweiZhi;//位置x和y的坐标privateImageIconimgBig;//大图片privateImageIconimgSmall;//小图标privatebooleanflag;//是否被下注,初值为falseprivatebooleanwin;//是否到达了终点true为到达,false为没到达privatebooleanisRun;//是否继续跑,true为继续,false为停止/**名称、坐标、图片,小图标是只读的,只有get方法**/publicbooleanisFlag(){returnflag;}publicvoidsetFlag(booleanflag){this.flag=flag;}publicStringgetName(){returnname;}publicPointgetWeiZhi(){returnweiZhi;}publicImageIcongetImgBig(){returnimgBig;}publicImageIcongetImgSmall(){returnimgSmall; }publicvoidsetWin(booleanwin){this.win=win;}publicbooleanisRun(){returnisRun;}publicvoidsetRun(booleanisRun){this.isRun=isRun;}publicRunners(Stringname,intx,inty,StringimageName){super();this.name=name;this.weiZhi=newPoint(x,y);this.imgBig=newImageIcon(this.getClass().getResource("/images/"+imageName+".gif"));this.imgSmall=newImageIcon(this.getClass().getResource("/images/"+imageName+"1.GIF"));this.isRun=true;//默认为继续跑}//退到起点publicvoidfuWei(){this.weiZhi.move(0,(int)this.weiZhi.getY());this.flag=this.win=false;this.isRun=true; }//是否押对了publicbooleanisWiner(){returnthis.flag&this.win;}//重写Runnable接口中的Run方法,实现xy坐标的改变publicvoidrun(){Randomrd=newRandom();//用于控制速度的随机数while(this.isRun){intx=(int)this.weiZhi.getX();x+=rd.nextInt(10)+1;this.weiZhi.move(x,(int)this.weiZhi.getY());try{Thread.sleep(100);}catch(InterruptedExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}}}好了,运动员的代码我们看到了,你发现了Runnable接口中声明了几个方法了吗?答对了,就一个叫做Run的方法。当线程启动后,就将会执行Run方法中的代码。知道执行完毕退出run方法,此线程就死亡了。光有运动员,没有裁判怎么行! packagesaipao.control;importjava.util.Vector;importjavax.swing.JOptionPane;importsaipao.view.MainFrame;importsaipao.vo.Runners;/**裁判类,用来确定是否有到达终点的赛跑者**/publicclassCaiPanimplementsRunnable{Vectorvt;//运动员集合intwidth;//终点线的位置Thread[]thread;MainFramemf;publicCaiPan(MainFramemf){super();this.vt=mf.getRnList();this.width=mf.getZhongDianXian();this.mf=mf;}//运动员开始跑privatevoidstartRun(){thread=newThread[vt.size()];//给三个线程赋值并启动for(inti=0;i=this.width){vt.get(i).setWin(true);//设置当前运动员赢了//并通知所有运动员都不用再跑了for(intj=0;j

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
大家都在看
近期热门
关闭