软件编程
位置:首页>> 软件编程>> java编程>> java利用多线程和Socket实现猜拳游戏

java利用多线程和Socket实现猜拳游戏

作者:一只楚楚猫  发布时间:2022-10-03 08:03:30 

标签:java,猜拳

本文实例为大家分享了利用多线程和Socket实现猜拳游戏的具体代码,供大家参考,具体内容如下

实例:猜拳游戏

猜拳游戏是指小时候玩的石头、剪刀、布的游戏。客户端与服务器的“较量”,服务器会自动随机产生出石头、剪刀或者布,客户端则由用户输入石头、剪刀、布之一,然后服务器通过比较告知比较结果。比如,客户端出石头,而服务器出的是剪刀,那么,服务器就会告知客户端,用户赢了。猜拳游戏也要制作一个多线程的程序,让多个客户端能够共同参与游戏。在该程序中,要包括猜拳的业务逻辑的线程类、客户端类、服务器类。

根据实例的要求,猜拳游戏的业务逻辑线程类的代码如下。


import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Random;

/**
* @author MNH
* @version 1.0
* @project Name: JavaSenior
* @file Name: PlayThread
* @desc 功能描述
* @date 2020/8/19
* @time 8:53
* @by IDE: IntelliJ IDEA
*/
public class PlayThread implements Runnable{
Socket s;
InputStream is=null;
OutputStream os=null;
public PlayThread(Socket s){
 this.s=s;
}

@Override
public void run() {
 try {
  is = s.getInputStream();
  os = s.getOutputStream();

DataOutputStream dos = new DataOutputStream(os);
  DataInputStream dis = new DataInputStream(is);
  Random rd = new Random(3);//0代表石头,1代表剪刀,2代表布
  while (true) {
   int random = rd.nextInt();
   int number = dis.readInt();
   if (number == 3) {
    System.out.println("客户端退出");
    break;
   }
   int rs = -1;//1代表获胜,2代表失败,3代表平局
   if (random == 0) {
    if (number == 1) {
     rs = 2;
    } else if (number == 2) {
     rs = 1;
    } else {
     rs = 3;
    }
   } else if (random == 1) {
    if (number == 0) {
     rs = 1;
    } else if (number == 2) {
     rs = 2;
    } else {
     rs = 3;
    }
   } else {
    if (number == 0) {
     rs = 2;
    } else if (number == 1) {
     rs = 1;
    } else {
     rs = 3;
    }
   }
   dos.writeInt(rs);
   dos.flush();
  }
 }catch(Exception e){
  e.printStackTrace();
 }
}
public void close(){
 try{
  is.close();
  os.close();
 }catch (Exception e){
  e.printStackTrace();
 }
}
}

上面的代码实现了客户端的输入,并将判断结果反馈给服务器的操作。服务器端直接调用该线程即可,实现代码如下。


import java.net.ServerSocket;
import java.net.Socket;

/**
* @author MNH
* @version 1.0
* @project Name: JavaSenior
* @file Name: PlayServer
* @desc 功能描述
* @date 2020/8/19
* @time 9:30
* @by IDE: IntelliJ IDEA
*/

public class PlayServer {
public static void main(String[] args) {
 ServerSocket ss=null;
 System.out.println("服务器启动......");
 try{
  ss=new ServerSocket(4567);
  while(true){
   Socket s=ss.accept();
   new Thread(new PlayThread(s)).start();//启动线程
  }
 }catch (Exception e){
  e.printStackTrace();
 }finally {
  try{
   ss.close();
  }catch (Exception e){
   e.printStackTrace();
  }
 }
}
}

最后,客户端的作用就是从控制台获取用户输入的选择,然后,将用户输入的值传递给服务器,再从服务器中获取反馈的结果输出到控制台上即可。客户端的代码如下。


import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;

public class PlayClient {
public static void main(String[] args) {
 InputStream is=null;
 OutputStream os=null;
 Socket s=null;
 try{
  s=new Socket("127.0.0.1",4567);
  is=s.getInputStream();
  os=s.getOutputStream();
  while(true) {
   DataInputStream dis = new DataInputStream(is);
   DataOutputStream dos = new DataOutputStream(os);
   System.out.println("欢迎来到猜拳游戏");
   System.out.println("请选择:");
   System.out.println("0:石头");
   System.out.println("1:剪刀");
   System.out.println("2:布");
   System.out.println("3:退出");
   Scanner sc=new Scanner(System.in);
   int choose=sc.nextInt();
   if(choose>=0&&choose<=2){
    dos.writeInt(choose);
    dos.flush();
   }else if(choose==3){
    dos.writeInt(choose);
    dos.flush();
    System.out.println("游戏结束!");
    break;
   }else{
    System.out.println("输入错误,请重新输入");
   }
   int rs=dis.readInt();//获取判断结果 1代表获胜,2代表失败,3代表平局
   if(rs==1){
    System.out.println("本局比赛获胜");
   }else if(rs==2){
    System.out.println("本局比赛失败");
   }else{
    System.out.println("本局比赛平局");
   }
  }

}catch(Exception e){
  e.printStackTrace();
 }finally {
  try{
   is.close();
   os.close();
   s.close();
  }catch (Exception e){
   e.printStackTrace();
  }
 }
}
}

至此,基本的猜拳游戏程序就编程完成了。有兴趣的小伙伴还可以在其中加入猜拳输赢的次数统计等功能。在运行上面的程序时,服务器端会一直处于运行的状态,等待客户端的连接。当有客户端退出时,会在服务器端的控制台上打印“客户端退出”。

java利用多线程和Socket实现猜拳游戏

客户端的运行效果如下。

java利用多线程和Socket实现猜拳游戏

如有错误,请各位给予指正。

来源:https://blog.csdn.net/julac/article/details/108094329

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com