자바 다 중 스 레 드 와 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();
   }
  }
 }
}
이로써 기본 적 인 가위바위보 게임 프로그램 이 완성 되 었 다.관심 있 는 동료 들 은 가위바위보 승패 횟수 통계 등 기능 도 넣 을 수 있다.위의 프로그램 을 실행 할 때 서버 측은 클 라 이언 트 의 연결 을 기다 리 는 상태 에서 계속 실 행 됩 니 다.클 라 이언 트 가 종료 되면 서버 쪽 콘 솔 에'클 라 이언 트 종료'를 인쇄 합 니 다.

클 라 이언 트 의 운행 효 과 는 다음 과 같다.

만약 잘못 이 있 으 면 여러분 께 서 지적 해 주 십시오.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기