java龟兔赛跑 游戏游戏

豆丁微信公众号
君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
基于Java多线程机制的龟兔赛跑程序
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='http://www.docin.com/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口我爱学习,学习使我快乐~
Java多线程——龟兔赛跑(加强版)
昨天写的龟兔赛跑中存在一些问题,今天听老师讲解后清楚了许多,但是个人感觉老师的逻辑比较复杂(可能是我想的太简单-_-),所以把老师和自己昨天的思路整合一下,重新写了一下~
一、题目:
实现龟兔赛跑
提示:可以采用Math.random()取得0~1之间的随机数模拟比赛进程, 如总距离为100米,在随机数0~0.3之间代表兔子跑,每次跑2米,在0.3~1之间代表乌龟跑,每次跑1 米,先跑完100米者为胜利者
Race类:产生RabbitAndTurtle的两个实例,分别代表兔子和乌龟
RabbitAndTurtle类:继承Thread类,实现赛跑的逻辑
Race类:这个和昨天的一样,直接调用方法就可以了
public class Race {
public static void main(String[] args) {
RabbitAndTurtle rabbit = new RabbitAndTurtle("小白兔子");
RabbitAndTurtle turtle = new RabbitAndTurtle("乌龟");
rabbit.start();
turtle.start();
RabbitAndTurtle类
public class RabbitAndTurtle extends Thread {
public RabbitAndTurtle(String name) {
super(name);
public int distance = 100;
static boolean flag = true;
public int predistance = 0;
public void run() {
double ran = Math.random();
String name = Thread.currentThread().getName();
while (flag) {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
if (name.equals("乌龟")) {
if (Math.random() & 1) {
predistance += 1;
System.out.println(name + "我跑了:" + predistance + "米");
if (predistance == 100) {
System.out.println("=================乌龟赢了=================");
flag = false;
sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
if (name.equals("小白兔子")) {
if (Math.random() & 0.3) {
predistance += 2;
System.out.println(name + "我跑了:" + predistance + "米");
if (predistance == 100) {
System.out.println("=================小白兔子赢了=================");
flag = false;
sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
其实变化不大 主要是加了Math.random()和sleep()两个方法
下面说一下这两个方法的具体作用
if (name.equals("小白兔子")) {
if (Math.random() & 0.3) {
predistance += 2;
System.out.println(name + "我跑了:" + predistance + "米");
if (predistance == 100) {
System.out.println("=================小白兔子赢了=================");
flag = false;
因为小兔子跑的比较快,为了使结果更加的公平,让赢者更随机所以使用Math.random()方法,当产生的随机数在[0,0.3]时兔子才可以移动,当产生的随机数在(0.3,1)的时候乌龟向前移动,使乌龟向前的概率变大(当老师说到这一点的时候我简直翻白眼-_-,怪不得我昨天百思不得其解这个随机数要怎么用)sleep()方法同理,在兔子移动后可以使用sleep()让其进入阻塞状态从而使乌龟线程有更大的概率获得cpu资源
运行结果:
昨天的运行结果:
对比两张图可以看到今天的结果随机性更强而且一个跑完线程就停止了另一个也不会继续进行
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!  话说这个世界上有各种各样的兔子和乌龟,但是研究发现,所有的兔子和乌龟都有一个共同的特点——喜欢赛跑。于是世界上各个角落都不断在发生着乌龟和兔子的比赛,小华对此很感兴趣,于是决定研究不同兔子和乌龟的赛跑。他发现,兔子虽然跑比乌龟快,但它们有众所周知的毛病——骄傲且懒惰,于是在与乌龟的比赛中,一旦任一秒结束后兔子发现自己领先t米或以上,它们就会停下来休息s秒。对于不同的兔子,t,s的数值是不同的,但是所有的乌龟却是一致——它们不到终点决不停止。  然而有些比赛相当漫长,全程观看会耗费大量时间,而小华发现只要在每场比赛开始后记录下兔子和乌龟的数据——兔子的速度v1(表示每秒兔子能跑v1米),乌龟的速度v2,以及兔子对应的t,s值,以及赛道的长度l——就能预测出比赛的结果。但是小华很懒,不想通过手工计算推测出比赛的结果,于是他找到了你——清华大学计算机系的高才生——请求帮助,请你写一个程序,对于输入的一场比赛的数据v1,v2,t,s,l,预测该场比赛的结果。
  输入只有一行,包含用空格隔开的五个正整数v1,v2,t,s,l,其中(v1,v2&=100;t&=300;s&=10;l&=10000且为v1,v2的公倍数)
  输出包含两行,第一行输出比赛结果——一个大写字母“T”或“R”或“D”,分别表示乌龟获胜,兔子获胜,或者两者同时到达终点。  第二行输出一个正整数,表示获胜者(或者双方同时)到达终点所耗费的时间(秒数)。
10 5 5 2 20
10 5 5 1 20
10 5 5 3 20
1 import java.util.S
3 public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int v1 = sc.nextInt();
int v2 = sc.nextInt();
<span style="color: #
int t = sc.nextInt();
<span style="color: #
int s = sc.nextInt();
<span style="color: #
int l = sc.nextInt();
<span style="color: #
<span style="color: #
int s1 = 0;
<span style="color: #
int s2 = 0;
<span style="color: #
int time = 0;
<span style="color: #
while (s1 & l && s2 & l) {
<span style="color: #
if (s1 - s2 &= t) {// 兔子停
<span style="color: #
if ((l - s2) / v2 & s) {// 乌龟先到达终点
<span style="color: #
time += (l - s2) / v2;
<span style="color: #
<span style="color: #
} else {// 乌龟不能到达终点
<span style="color: #
<span style="color: #
s2 += v2 *
<span style="color: #
<span style="color: #
<span style="color: #
} else {// 兔子不停
<span style="color: #
<span style="color: #
s1 += v1 * 1;
<span style="color: #
s2 += v2 * 1;
<span style="color: #
<span style="color: #
<span style="color: #
if (s1 & s2) {
<span style="color: #
System.out.println("R");
<span style="color: #
System.out.println(time);
<span style="color: #
} else if (s1 & s2) {
<span style="color: #
System.out.println("T");
<span style="color: #
System.out.println(time);
<span style="color: #
<span style="color: #
System.out.println("D");
<span style="color: #
System.out.println(time);
<span style="color: #
<span style="color: #
<span style="color: #
<span style="color: #
<span style="color: #
<span style="color: #
<span style="color: # }
阅读(...) 评论()Java 多线程—龟兔赛跑问题
什么是多线程?在回答这个问题之前先要明白什么是线程,线程是能独立运行的基本单位,要完成程序的运行,最先执行的就是线程,装线程的“容器”叫做进程,如原子构成分子,分子构成元素,程序就是元素,进程相当于分子,而线程就相当于原子。随着计算机的发展,程序需要的运行速度需要越来越快,这时单条线程的完成速度远远跟不上人们的需求,所以多线程应运而生,多线程就是多个线程同时执行完成一个进程,这样大大加快了程序的运行速度,Java的多线程是通过继承接Thread类或者实现Runnable接口来实现。回到文章题目—龟兔赛跑问题。下面是Animal类(只有和赛跑的相关的变量及方法),这个类定义了动物的名字,所跑的路程及实时的里程。public Animal{
String name;
//动物的种类
//赛跑的总路程
//每个动物的速度,假设为匀速
int predistance = 0;
//当前里程,用于输出
public Animal(String name,int speed,int distance){
this.name =
this.speed =
this.distance =
*比赛规则:当前里程=时间(用Math下的random方法随机一个时间)X 速度
*当跑总路程输出“我跑完了”
public void race{
while(predistance&distance){
Thread.sleep((int)(Math.random()*));
}catch(InterruptedException e){
e.printStackTrace();
predistance += Math.random()*
System.out.println(name + ":我跑了:" + predistance + "米");
System.out,println("我跑完了");
}将这个类以多线程的方式实现,将类放入继承了Thread类并重写了其run方法的Race类中public class Race extends Thread{
public Race(Animal animal){
this.animal =
public void run(){
animal.run();
对多线程进行操作,通过start方法运行多线程public class Test{
public static void main(String[] args){
Animal rabbit = new Animal("兔子",15,50);
Animal turtle = new Animal("乌龟",12,50);
Race thread1 = new Race(rabbit);
Race threas2 = new Race(turtle);
thread1.start();
thread2.start();
运行结果:乌龟 : 我跑了:3米兔子 : 我跑了:0米乌龟 : 我跑了:13米兔子 : 我跑了:1米乌龟 : 我跑了:16米兔子 : 我跑了:6米乌龟 : 我跑了:25米兔子 : 我跑了:14米乌龟 : 我跑了:33米兔子 : 我跑了:14米乌龟 : 我跑了:44米兔子 : 我跑了:18米乌龟 : 我跑了:45米兔子 : 我跑了:22米兔子 : 我跑了:24米乌龟 : 我跑了:52米我跑完了!兔子 : 我跑了:34米兔子 : 我跑了:45米兔子 : 我跑了:54米我跑完了!
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!有关JAVA编写龟兔赛跑的游戏的问题。求助……【java吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:714,919贴子:
有关JAVA编写龟兔赛跑的游戏的问题。求助……收藏
快试试吧,可以对自己使用挽尊卡咯~◆◆
我这个程序龟兔是在直行跑道上,老师要求龟兔在环形跑道上赛跑,哪位高手可以帮忙改一改啊,只要改成在环形跑道上赛跑就可以、THANKS.import java.awt.Cimport java.awt.Gimport java.awt.Iimport javax.swing.JApublic class RabTor1 extends JApplet implements Runnable{ Image backpic,rabbit, int x1=0,y1=0; int x2=0,y2=100;//图片的位移! int rab_road=0,tor_road=0;//图片跑的路程! int rab_time=0,tor_time=0;//图片移动用的时间 String str1="rabbit",str2="tortoise";//给字符串付初值! //boolean stop= public void init()//Applet中的初始化函数有类中构造函数的作用!最先调用! {&& backpic = getImage(getCodeBase(), "back.gif");//将图片对象与图片 绑定! && rabbit = getImage(getCodeBase(), "rabbit.jpg");&& tortoise = getImage(getCodeBase(), "tortoise.jpg");&& //System.out.println("intintintitnitn!"); } public void paint(Graphics g)//此函数第四个调用! {&& g.setColor(Color.green);&& g.fillRect(0, 0, 800, 800);&& //g.drawImage(backpic, 0, 0,800, 600,this);&& g.setColor(Color.black);&& g.drawImage(rabbit, x1, y1, 60, 60, this);&& g.drawString(str1, x1, y1+80);&& g.drawImage(tortoise, x2, y2, 60, 60, this);&& g.drawString(str2, x2, y2+80); // System.out.println("jjjjjjjj"); } public void start()//此函数第二个调用! {&& Thread rab = new Thread(this, "rabbit");//创建一个兔子线程,this表示在这个类中找.rabbit是线程的名子.&& Thread tor = new Thread(this, "tortoise");&& rab.start();//线程对象调用start()方法!然后调用对应的run()方法!&& tor.start();&& } public void run()//此函数第三个调用! { && boolean stop=//标志,此函数的精典之处.控制兔子,龟什么时候停!&& while(!stop)&& {&&& try &&& {&&&& Thread.currentThread().sleep(1000);//当前线程调用sleep()函数.&&& } &&& catch (InterruptedException ex) {}&&& String threadName=Thread.currentThread().getName();//取得当前线程的名子.&&& if(threadName.equals("rabbit"))//兔子动的实现方法!&&& {&&&& str1="rabbit";&&&& x1=x1+30;&&&& rab_time++;&&&& rab_road+=3;&&&& if(rab_road%24==0)&&&& {&&&&& str1="兔子睡眠";&&&&& try &&&&& {&&&&&& Thread.currentThread().sleep(24000);&&&&& } &&&&& catch (InterruptedException ex) {}&&&&& rab_time+=24;&&&& }&&&& if(rab_road==60)&&&& {&&&&& stop=&&&&& str1="兔子总用时(秒):"+rab_&&&& }&&&&&&&& }&&& else if(threadName.equals("tortoise"))//乌龟移动实现的方法!&&& {&&&& x2+=10;&&&& tor_road+=1;&&&& tor_time++;&&&& if(tor_road==60)&&&& {&&&&& stop=&&&&& str2="乌龟总用时(秒):"+tor_&&&& }&&& }&&&&&& repaint();&&&&& }&& }}
登录百度帐号

我要回帖

更多关于 java龟兔赛跑 的文章

 

随机推荐