思路:先创建一个动物类,创建龟兔线程,共用一个run,用currentThread()判断当前线程为何人
,Thing()为事件库,把所有事件写在里面,以后想加的话也可以加的。
所有结果都是随机产生的,每次运行都是不同的结果。
图片只弄了两个,开头和结尾
package test;
import java.util.Scanner;
//线程
class animals implements Runnable{
Thread Turtle,Rabbit;//龟兔
int WinT=1;//判断龟赢
int WinR=1;//判断兔赢
int random;//随机数字
int distance[]= {1,1};//distance[0]是乌龟的路程,distance[1]是兔子的路程
long sleep[]= {1000,1000};//sleep[0]是乌龟的睡眠时间,sleep[1]是兔子的睡眠时间
/*int i;
int WhoWin() {
if(WinT>WinR)
return 1;
//System.out.println("乌龟赢了");
else return 2;
//System.out.println("乌龟输了");
}*/
public animals() {
Turtle=new Thread(this);
Rabbit=new Thread(this);
Turtle.setName("乌龟");
Rabbit.setName("兔子");
}
public void run() {
//当线程是龟时
if(Thread.currentThread()==Turtle) {
for(;distance[0]<100;) {
if(WinR>WinT) {//判断兔子是否已经赢了
Turtle.interrupt();
break;
}//if
if(distance[0]%10==0&&distance[0]!=50) {
Thing(Turtle, "乌龟", distance, sleep);
}//IF
else if(distance[0]==50){
sleep[0]=1000;
System.out.println(Thread.currentThread().getName()+"过河了,速度变成1m/s");
}
try {
Thread.sleep(sleep[0]);
} catch (InterruptedException e) {
//e.printStackTrace();
}//try-catch
System.out.println(Thread.currentThread().getName()+" "+distance[0]);
distance[0]++;
}//for
WinT++;//龟赢时+1
if(WinT>WinR) {
System.out.println("乌龟赢了");
}
else System.out.println("乌龟输了");
}//Turtle
//当线程是兔子的时候
else if(Thread.currentThread()==Rabbit) {
for(;distance[1]<100;) {
if(WinT>WinR) {//判断龟是否已近赢了
Rabbit.interrupt();
break;
}//if
if(distance[1]%10==0&&distance[1]!=50) {
Thing(Rabbit, "兔子", distance, sleep);
}
else if(distance[1]==50){
sleep[1]=1000;
System.out.println(Thread.currentThread().getName()+"过河了,速度变成1m/s");
}
try {
Thread.sleep(sleep[1]);
} catch (InterruptedException e) {
//e.printStackTrace();
}//try-catch
System.out.println(Thread.currentThread().getName()+" "+distance[1]);
distance[1]++;
}//for
WinR++;//当兔子赢时+1
if(WinR>WinT) {
System.out.println("兔子赢了");
}
else System.out.println("兔子输了");
}//Turtle
System.out.println("end");
}//run()
//求速度
double speech(long sleep) {
return 1.0/(sleep/1000.0);
}
//判断下标返回自己的值的函数,t是下标,0为乌龟,1为兔子
int TorR(Runnable target) {
int me = 0;//t是下标,0为乌龟,1为兔子
if(Thread.currentThread()==Turtle) me=0;
else if(Thread.currentThread()==Rabbit) me=1;
return me;
}
//判断下标,返回他人的值,,1为乌龟,0为兔子
int harmful(Runnable target) {
int h=0;
if(Thread.currentThread()==Turtle) h=1;
else if(Thread.currentThread()==Rabbit) h=0;
return h;
}
//事件
public void Thing(Runnable target,String name,int distance[],long sleep[]) {
int rannum=(int) (Math.random()*10);//随机产生数字
switch(rannum) {
case 0:stomach(target,name,distance,sleep);break;
case 1:car(target,name,distance,sleep);break;
case 2:food(target,name,distance,sleep);break;
case 3:rod(target,name,distance,sleep);break;
case 4:portal(target,name,distance,sleep);break;
case 5:System.out.println("无事发生");
case 6:mushroom(target,name,distance,sleep);break;
case 7:banana(target,name,distance,sleep);break;
case 8:DengChao(target,name,distance,sleep);break;
case 9:HK(target,name,distance,sleep);break;
default:System.out.println("开发中");
}
}
//肚子痛
void stomach (Runnable target,String name,int distance[],long sleep[]) {
int me=TorR(target);//返回自己的值
System.out.println(Thread.currentThread().getName()+"肚子痛了(当前速度为:"+speech(sleep[me])+"m/s)");
random=(int) (Math.random()*2);
if(random==1){
sleep[me]=sleep[me]+500;
System.out.println(Thread.currentThread().getName()+"强忍屎意(速度减少,当前速度为:"+speech(sleep[me])+"m/s)");
}//b==1
else if(random==0) {
System.out.println(Thread.currentThread().getName()+"吃整肠丸(无事发生)");
}//b==0
}//stomach函数
//有车出现
void car(Runnable target,String name,int distance[],long sleep[]) {
int me=TorR(target);
random=(int) (Math.random()*2);
System.out.println(Thread.currentThread().getName()+"遇到了一辆车(当前速度为:"+speech(sleep[me])+"m/s)");
if(random==1){
distance[me]=distance[me]+3;
System.out.println(Thread.currentThread().getName()+"坐上汽车,路径移动了3米");
}//b==1
else if(random==0) {
sleep[me]=sleep[me]/2;
System.out.println(Thread.currentThread().getName()+"无视汽车(坚强意志力导致速度增加,当前速度为:"+speech(sleep[me])+"m/s)");
}//b==0
}
//出现食物.
void food(Runnable target,String name,int distance[],long sleep[]) {
int me=TorR(target);//自己的值
int h=harmful(target);//别人的值
random=(int) (Math.random()*2);
System.out.println(Thread.currentThread().getName()+"看见了麻辣烫(当前速度为:"+speech(sleep[me])+"m/s)");
if(random==0) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
sleep[me]=sleep[me]/2;
System.out.println(Thread.currentThread().getName()+"停了两秒来吃麻辣烫(速度增加,当前速度为:"+speech(sleep[me])+"m/s)");
}//ramdom==0
else if(random==1) {
sleep[h]=sleep[h]+1000;
System.out.println(Thread.currentThread().getName()+"向另一位选手进行“麻辣烫投毒”(另一位选手速度减少到"+speech(sleep[h])+"m/s)");
}//random==1
}//foor()
//换位法杖
void rod(Runnable target,String name,int distance[],long sleep[]) {
int me=TorR(target);
int h=harmful(target);
random=(int) (Math.random()*2);
System.out.println(Thread.currentThread().getName()+"捡到一个换位法杖(当前距离为:"+distance[me]+"m)");
switch(random) {
case 0:
int i=distance[me];
distance[me]=distance[h];
distance[h]=i;
System.out.println(Thread.currentThread().getName()+"换位成功,与另一位选手互换位置(自己距离:"+distance[me]+"m,另一人距离:"+distance[h]+"m)");break;
case 1:System.out.println(Thread.currentThread().getName()+"使用失败,无事发生");break;
}//switch
}//rob
//传送门
void portal(Runnable target,String name,int distance[],long sleep[]) {
int me=TorR(target);
random=(int) (Math.random()*2);
int chuansong=(int) (Math.random()*21);
System.out.println(Thread.currentThread().getName()+"遇到了传送门(当前距离为:"+distance[me]+"m)");
switch(random) {
case 0:
distance[me]=distance[me]+chuansong;
System.out.println(Thread.currentThread().getName()+"传送前进了"+chuansong+"m(当前位置:"+distance[me]+"m)");break;
case 1:
distance[me]=distance[me]-chuansong;
if(distance[me]<=0) {
distance[me]=1;
System.out.println("倒退到尽头啦,从起点开始");
}
System.out.println(Thread.currentThread().getName()+"传送后退了"+chuansong+"m(当前位置:"+distance[me]+"m)");break;
}//switch
}//portal
//蘑菇
void mushroom(Runnable target,String name,int distance[],long sleep[]) {
int me=TorR(target);
random=(int) (Math.random()*3);
System.out.println(Thread.currentThread().getName()+"看到地上有个蘑菇(当前速度为:"+speech(sleep[me])+"m/s)");
switch(random) {
case 0:
sleep[me]=sleep[me]/2;
System.out.println(Thread.currentThread().getName()+"吃了“加速蘑菇”(速度增加,当前速度为:"+speech(sleep[me])+"m/s)");break;
case 1:
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"吃了“眩晕蘑菇”(眩晕两秒)");break;
case 2:
sleep[me]=sleep[me]*2;
System.out.println(Thread.currentThread().getName()+"吃了“减速蘑菇”(速度减少,当前速度为:"+speech(sleep[me])+"m/s)");break;
}//switch
}//mushroom
//banana!!!!!
void banana(Runnable target,String name,int distance[],long sleep[]) {
int h=harmful(target);//别人的值
random=(int) (Math.random()*2);
System.out.println(Thread.currentThread().getName()+"丢香蕉皮");
switch(random) {
case 0:
distance[h]=distance[h]+5;
System.out.println("另一位选手踩香蕉皮向前划了5m(另一个选手距离为:"+distance[h]+"m/s)");break;
case 1:
sleep[h]=(long) (sleep[h]*1.5);
System.out.println("另一位选手踩香蕉皮(另一个选手减速了,它的速度为:"+speech(sleep[h])+"m/s)");break;
}//switch
}//banana
//遇到邓超
void DengChao(Runnable target,String name,int distance[],long sleep[]) {
System.out.println(Thread.currentThread().getName()+"遇到了邓超,停下来3s与其拍照");
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}//邓超
//变态假面
void HK(Runnable target,String name,int distance[],long sleep[]) {
int me=TorR(target);
int h=harmful(target);
random=(int) (Math.random()*2);
System.out.println(Thread.currentThread().getName()+"遇到变态假面(当前速度为:"+speech(sleep[me])+"m/s)");
switch(random) {
case 0:
sleep[me]=sleep[me]/2;
System.out.println(Thread.currentThread().getName()+"被吓跑了(速度增加,当前速度为:"+speech(sleep[me])+"m/s)");break;
case 1:
sleep[h]=sleep[h]/2;
System.out.println(Thread.currentThread().getName()+"打到了变态假面并获得了假面能力,吓到另一位选手了(另一选手速度增加,速度为:"+speech(sleep[h])+"m/s)");
break;
}//switch
}//变态假面
}//animal
//main
public class TurtleAndRabbit {
public static void main(String[] args) {
System.out.println("开始");
/*Scanner sc=new Scanner(System.in);
System.out.println("请输入数字");
double a=sc.nextDouble();*/
animals d=new animals();
d.Turtle.start();
d.Rabbit.start();
}
}