자바 다 중 스 레 드 와 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();
}
}
}
}
이로써 기본 적 인 가위바위보 게임 프로그램 이 완성 되 었 다.관심 있 는 동료 들 은 가위바위보 승패 횟수 통계 등 기능 도 넣 을 수 있다.위의 프로그램 을 실행 할 때 서버 측은 클 라 이언 트 의 연결 을 기다 리 는 상태 에서 계속 실 행 됩 니 다.클 라 이언 트 가 종료 되면 서버 쪽 콘 솔 에'클 라 이언 트 종료'를 인쇄 합 니 다.클 라 이언 트 의 운행 효 과 는 다음 과 같다.
만약 잘못 이 있 으 면 여러분 께 서 지적 해 주 십시오.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.