线程--猜数字

猜数字游戏

题目:用两个线程玩猜数字游戏,第一个线程负责随机给出1~100之间的一个整数,第二个线程负责猜出这个数。要求每当第二个线程给出自己的猜测后,第一个线程都会提示“猜小了”、“猜大了”或“猜对了”。猜数之前,要求第二个线程要等待第一个线程设置好要猜测的数。第一个线程设置好猜测数之后,两个线程还要相互等待,其原则是:第二个线程给出自己的猜测后,等待第一个线程给出的提示;第一个线程给出提示后,等待给第二个线程给出猜测,如此进行,直到第二个线程给出正确的猜测后,两个线程进入死亡状态。

(1)代码实现

[java]  view plain  copy
  1. import java.util.Random;  
  2.   
  3. public class GuessNumber {  
  4.   
  5.     public static void main(String[] args) {  
  6.         number num=new number("线程一");  
  7.         num.start();  
  8.         guess gue=new guess("线程二");  
  9.         gue.start();  
  10.     }  
  11.   
  12. }  
  13. //给出整数的线程  
  14. class number extends Thread{  
  15.     String name1;  
  16.     private static int n;  
  17.     number(String name){  
  18.         name1=name;  
  19.     }  
  20.     public void run() {  
  21.         //获取1~100的随机数  
  22.         Random random=new Random();  
  23.         n=random.nextInt(100);  
  24.         System.out.println(name1+"给出的数字为:"+n);  
  25.     }  
  26.     //猜数字(静态方法,可通过类名调用)  
  27.     public static String guessnum(int m) {  
  28.         if(m<n) {  
  29.             return "猜小了";  
  30.         }else if(m>n){  
  31.             return "猜大了";  
  32.         }else return "猜对了";  
  33.     }  
  34. }  
  35. //猜数线程  
  36. class guess extends  Thread{  
  37.     String name2;  
  38.     //最大值和最小值  
  39.     private int min=0,max=100,nownum;  
  40.     //比较结果  
  41.     String Result;  
  42.     guess(String name){  
  43.         name2=name;  
  44.     }  
  45.     //获取比较结果  
  46.     public String getGuess() {  
  47.         return Result;  
  48.     }  
  49.     public void run() {  
  50.         while(true) {  
  51.             try{  
  52.                 Thread.sleep(2000);  
  53.             }catch(InterruptedException e){  
  54.                 e.printStackTrace();  
  55.             }  
  56.         Random ran=new Random();  
  57.         //当前猜的数字(最大值和最小值之间的数)  
  58.         nownum=min+ran.nextInt(max-min);  
  59.         //调用给出整数的线程 的猜数字方法guessnum,  
  60.         Result=number.guessnum(nownum);  
  61.         if(Result.equals("猜小了")) {  
  62.             min=nownum;  
  63.             System.out.println("线程二猜的数字是:"+nownum+"---猜小了");  
  64.         }else if(Result.equals("猜大了")) {  
  65.             max=nownum;  
  66.             System.out.println("线程二猜的数字是:"+nownum+"---猜大了");  
  67.         }else {  
  68.             System.out.println("线程二猜的数字是:"+nownum+"---猜对了,结果是"+nownum);  
  69.             System.exit(0);  
  70.         }  
  71.           
  72.         }  
  73.     }  
  74. }  
(2)运行结果

线程一给出的数字为:79
线程二猜的数字是:42---猜小了
线程二猜的数字是:50---猜小了
线程二猜的数字是:93---猜大了
线程二猜的数字是:54---猜小了
线程二猜的数字是:81---猜大了
线程二猜的数字是:80---猜大了
线程二猜的数字是:60---猜小了
线程二猜的数字是:65---猜小了
线程二猜的数字是:79---猜对了,结果是79

在Java中实现猜数字的多线程游戏可以通过以下步骤完成: 1. 创建一个主线程类,用于控制游戏的开始和结束。 2. 创建一个猜数字的类,用于生成随机数字并接受玩家的猜测。 3. 创建一个猜测线程类,用于处理玩家的猜测并给出相应的提示。 4. 在主线程中创建一个猜数字对象和若干个猜测线程对象,并启动它们。 下面是一个示例代码,演示了如何在Java中实现猜数字的多线程游戏: ```java import java.util.Random; import java.util.Scanner; public class GuessNumberGame { private int targetNumber; private boolean isGameOver; public GuessNumberGame() { Random random = new Random(); targetNumber = random.nextInt(100) + 1; isGameOver = false; } public synchronized void guess(int number) { if (isGameOver) { return; } if (number == targetNumber) { System.out.println("Congratulations! You guessed the correct number."); isGameOver = true; } else if (number < targetNumber) { System.out.println("Too low. Try again."); } else { System.out.println("Too high. Try again."); } } public static void main(String[] args) { GuessNumberGame game = new GuessNumberGame(); int numThreads = 3; // 设置猜测线程的数量 for (int i = 0; i < numThreads; i++) { Thread thread = new Thread(new GuessingThread(game)); thread.start(); } } } class GuessingThread implements Runnable { private GuessNumberGame game; public GuessingThread(GuessNumberGame game) { this.game = game; } @Override public void run() { Scanner scanner = new Scanner(System.in); while (!game.isGameOver) { System.out.print("Enter your guess: "); int guess = scanner.nextInt(); game.guess(guess); } scanner.close(); } } ``` 在上面的代码中,GuessNumberGame类表示猜数字游戏,GuessingThread类表示猜测线程。主线程中创建了一个GuessNumberGame对象和若干个GuessingThread对象,并启动它们。每个GuessingThread对象会不断地接受玩家的猜测并调用GuessNumberGame对象的guess方法进行处理。当玩家猜中正确的数字时,游戏结束。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值