电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

java利用多線程和Socket實現猜拳游戲

瀏覽:53日期:2022-08-26 15:10:58

本文實例為大家分享了利用多線程和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實現猜拳游戲

如有錯誤,請各位給予指正。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 阿米巴企业经营-阿米巴咨询管理-阿米巴企业培训-广东键锋企业管理咨询有限公司 | CE认证_产品欧盟ROHS-REACH检测机构-商通检测 | 披萨石_披萨盘_电器家电隔热绵加工定制_佛山市南海区西樵南方综合保温材料厂 | 断桥铝破碎机_发动机破碎机_杂铝破碎机厂家价格-皓星机械 | 上海质量认证办理中心| 雾度仪_雾度计_透光率雾度仪价格-三恩时(3nh)光电雾度仪厂家 | 谷梁科技| 厚壁钢管-厚壁无缝钢管-小口径厚壁钢管-大口径厚壁钢管 - 聊城宽达钢管有限公司 | 塑料熔指仪-塑料熔融指数仪-熔体流动速率试验机-广东宏拓仪器科技有限公司 | 聚合氯化铝_喷雾聚氯化铝_聚合氯化铝铁厂家_郑州亿升化工有限公司 | 废气处理设备-工业除尘器-RTO-RCO-蓄热式焚烧炉厂家-江苏天达环保设备有限公司 | 餐饮加盟网_特色餐饮连锁加盟店-餐饮加盟官网 | 螺旋压榨机-刮泥机-潜水搅拌机-电动泥斗-潜水推流器-南京格林兰环保设备有限公司 | loft装修,上海嘉定酒店式公寓装修公司—曼城装饰 | 飞扬动力官网-广告公司管理软件,广告公司管理系统,喷绘写真条幅制作管理软件,广告公司ERP系统 | 减速机三参数组合探头|TSM803|壁挂式氧化锆分析仪探头-安徽鹏宸电气有限公司 | 考勤系统_考勤管理系统_网络考勤软件_政企|集团|工厂复杂考勤工时统计排班管理系统_天时考勤 | 排烟防火阀-消防排烟风机-正压送风口-厂家-价格-哪家好-德州鑫港旺通风设备有限公司 | 标准光源箱|对色灯箱|色差仪|光泽度仪|涂层测厚仪_HRC大品牌生产厂家 | PVC地板|PVC塑胶地板|PVC地板厂家|地板胶|防静电地板-无锡腾方装饰材料有限公司-咨询热线:4008-798-128 | ?水马注水围挡_塑料注水围挡_防撞桶-常州瑞轩水马注水围挡有限公司 | 智能汉显全自动量热仪_微机全自动胶质层指数测定仪-鹤壁市科达仪器仪表有限公司 | 实验室装修_实验室设计_实验室规划设计- 上海广建净化工程公司 | 海水晶,海水素,海水晶价格-潍坊滨海经济开发区强隆海水晶厂 | 胶原检测试剂盒,弹性蛋白检测试剂盒,类克ELISA试剂盒,阿达木单抗ELISA试剂盒-北京群晓科苑生物技术有限公司 | 雨燕360体育免费直播_雨燕360免费NBA直播_NBA篮球高清直播无插件-雨燕360体育直播 | 电加热导热油炉-空气加热器-导热油加热器-翅片电加热管-科安达机械 | 3A别墅漆/3A环保漆_广东美涂士建材股份有限公司【官网】 | 强效碱性清洗剂-实验室中性清洗剂-食品级高纯氮气发生器-上海润榕科学器材有限公司 | 环氧乙烷灭菌器_压力蒸汽灭菌器_低温等离子过氧化氢灭菌器 _低温蒸汽甲醛灭菌器_清洗工作站_医用干燥柜_灭菌耗材-环氧乙烷灭菌器_脉动真空压力蒸汽灭菌器_低温等离子灭菌设备_河南省三强医疗器械有限责任公司 | 广州办公室设计,办公室装修,写字楼设计,办公室装修公司_德科 | 网站建设-网站制作-网站设计-网站开发定制公司-网站SEO优化推广-咏熠软件 | 环讯传媒,永康网络公司,永康网站建设,永康小程序开发制作,永康网站制作,武义网页设计,金华地区网站SEO优化推广 - 永康市环讯电子商务有限公司 | 杭州公司变更法人-代理记账收费价格-公司注销代办_杭州福道财务管理咨询有限公司 | 全自动包装秤_全自动上袋机_全自动套袋机_高位码垛机_全自动包装码垛系统生产线-三维汉界机器(山东)股份有限公司 | 防勒索软件_数据防泄密_Trellix(原McAfee)核心代理商_Trellix(原Fireeye)售后-广州文智信息科技有限公司 | 液压扳手-高品质液压扳手供应商 - 液压扳手, 液压扳手供应商, 德国进口液压拉马 | 济南宣传册设计-画册设计_济南莫都品牌设计公司 | 股指期货-期货开户-交易手续费佣金加1分-保证金低-期货公司排名靠前-万利信息开户 | 扫地车厂家-山西洗地机-太原电动扫地车「大同朔州吕梁晋中忻州长治晋城洗地机」山西锦力环保科技有限公司 | YAGEO国巨电容|贴片电阻|电容价格|三星代理商-深圳市巨优电子有限公司 |