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

本文实例为大家分享了利用多线程和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();

}

}

}

}

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

da6ecc3e89d66c45e7c984620104448b.png

客户端的运行效果如下。

5ac38f5d6fa4081b4d71586be8cc3167.png

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持云海天教程。

原文链接:https://blog.csdn.net/julac/article/details/108094329

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 中进行 Socket 通信时,我们可以使用多线程实现同时与多个客户端进行通信。这种方式可以提高服务器的并发处理能力。 具体实现方法是,服务器端使用一个主线程监听客户端的连接请求,当有新的连接请求时,主线程创建一个新的线程来处理该客户端的请求。这样,每个客户端的请求都会在一个单独的线程中进行处理,互不影响。 以下是一个简单的 Java Socket 多线程服务器端代码示例: ```java import java.net.*; import java.io.*; public class MultiThreadServer implements Runnable { private Socket clientSocket; public MultiThreadServer(Socket clientSocket) { this.clientSocket = clientSocket; } public static void main(String[] args) throws IOException { ServerSocket serverSocket = new ServerSocket(8080); System.out.println("Server started"); while (true) { Socket clientSocket = serverSocket.accept(); System.out.println("Accepted connection from " + clientSocket); new Thread(new MultiThreadServer(clientSocket)).start(); } } public void run() { try { PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); String inputLine; while ((inputLine = in.readLine()) != null) { System.out.println("Received message: " + inputLine); out.println("Message received: " + inputLine); } in.close(); out.close(); clientSocket.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` 在上面的代码中,我们创建了一个 MultiThreadServer 类来处理客户端请求。在 main 方法中,我们首先创建了一个 ServerSocket 并在端口 8080 上监听客户端连接请求。当有新的连接请求时,我们创建一个新的 MultiThreadServer 线程来处理该客户端的请求。 在 MultiThreadServer 类中,我们实现了 Runnable 接口,并重写了 run 方法。在 run 方法中,我们使用 BufferedReader 和 PrintWriter 来读取和发送消息。注意,在处理完一个客户端请求后,我们需要关闭连接。 以上就是一个简单的 Java Socket 多线程服务器端代码示例。通过这种方式,我们可以轻松实现高并发的 Socket 通信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值