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();
}
}
}
}
至此,基本的猜拳游戏程序就编程完成了。有兴趣的小伙伴还可以在其中加入猜拳输赢的次数统计等功能。在运行上面的程序时,服务器端会一直处于运行的状态,等待客户端的连接。当有客户端退出时,会在服务器端的控制台上打印“客户端退出”。
客户端的运行效果如下。
如有错误,请各位给予指正。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持云海天教程。
原文链接:https://blog.csdn.net/julac/article/details/108094329
java多线程 游戏_java利用多线程和Socket实现猜拳游戏相关推荐
- java游戏输赢统计_java利用多线程和Socket实现猜拳游戏
本文实例为大家分享了利用多线程和Socket实现猜拳游戏的具体代码,供大家参考,具体内容如下 实例:猜拳游戏 猜拳游戏是指小时候玩的石头.剪刀.布的游戏.客户端与服务器的"较量", ...
- [.net 面向对象程序设计进阶] (18) 多线程(Multithreading)(三) 利用多线程提高程序性能(下)...
[.net 面向对象程序设计进阶] (18) 多线程(Multithreading)(二) 利用多线程提高程序性能(下) 本节导读: 上节说了线程同步中使用线程锁和线程通知的方式来处理资源共享问题,这 ...
- python 多线程同步_Python利用多线程同步锁实现多窗口订票系统(推荐)
利用Python实现多窗口订票系统,利用 threading.Lock() 避免出现一票多卖,无票也卖的情况,并规范化输出情况. 代码: import threading import time ti ...
- python猜拳游戏三局两胜制_猜拳游戏三局两胜------java实现代码
package com.javasm.exerices02; import java.util.ArrayList; import java.util.List; import java.util.R ...
- python连连看小游戏_利用Python制作一个连连看小游戏,边学边玩!
导语 今天我们将制作一个连连看小游戏,让我们愉快地开始吧~ 开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Python自带的模块 环境搭建 安装Python并添加到环 ...
- python猜拳游戏编程代码_用python实现“猜拳游戏
原标题:用python实现"猜拳"游戏 用python实现"猜拳"游戏 先来练习一道用python编写的小程序 这道题是用for in 循环实现输入10个数并求 ...
- c语言猜拳游戏中出现的关键词,C语言猜拳游戏代码及分析
赋值操作符.比较操作符.算术操作符.逻辑操作符.位域操作符,如"="."+="">="."<="." ...
- java多线程机制_Java的多线程机制
1.利用Thread的子类创建线程 例1.用Thread子类创建多线程程序. 先定义一个Thread的子类,该类的run方法只用来输出一些信息. packagethread;public class ...
- java 手动线程调度_Java Thread 多线程 操作线程
5.线程的创建和启动 A.继承Thread类或实现Runnable接口,重写或实现run方法,run方法代表线程要完成的任务 B.创建Thread子类或是Runnable的实现类,即创建的线程对象:不 ...
最新文章
- springcloud学之前需要掌握什么_学国画之前我们需要准备什么?
- 奇瑞a3中控按键图解_纷纷亮相,奇瑞众多黑科技悄然现身,焦点全在星途VX智能座舱上...
- invalid argument 0: Sizes of tensors must match except in dimension 0. Got 1
- 用c#开发微信 系列汇总
- LeetCode 374. 猜数字大小(二分查找)
- C++对单向链表进行排序
- oracle中没有修改权限,oracle 修改listener.ora 没有权限怎么办
- ORACLE有EXCEL中trend函数,借助Excel TREND 函数来解决线性插值的计算
- 【软件后门】qq足迹 - qq应用授权管理
- CyanogenMOD移植教程]
- 空想科学教程 (爆笑)1
- Java线程中的静态方法_Java多线程3:Thread中的静态方法
- 如何制作动态拼图?教你如何在线拼接动图
- 怪盗基德的滑翔翼 线性DP 最长上升子序列
- 字形码是计算机内部编码吗,汉字编码字形码
- 手机品牌中英文对照-最常用
- 在Euroc MH_05数据集上调试orbslam3并测试的过程
- 《我编程,我快乐(3~5章)》读书笔记
- android 转场动画 共享元素,关于android:四步通过Glide实现共享元素无缝转场效果...
- Android实现-心知天气API接口开发(天气预报app)
热门文章
- 微信内测新功能:公众号们脖子一凉...
- 硬刚华为?小米在芬兰成立相机研究公司
- 美团王兴有意向理想汽车投资3亿美元? 回应:不予置评
- 支付宝回应老年版相互宝质疑:5万、10万互助金额度是合理区间
- 早买早享受 晚买有折扣 !特斯拉大降价致消费者拉横幅抗议
- syslog-ng配置说明
- win7 32位php安装包下载地址,appserv官方下载|AppServ(php环境安装包)下载v8.6 64位/32位 支持win7/win8/win10_ IT猫扑网...
- Android 源码分析 Activity的启动模式
- 什么是利用计算机化的知识进行自动推理,基于实例模型的知识推理及其在自动阅卷系统中的应用...
- Tomcat配置可以访问外部资源路径