基于JAVA的剪刀石头布游戏设计
JAVA小游戏代码(剪刀石头布)

JAVA⼩游戏代码(剪⼑⽯头布) /** 创建⼀个类Game,⽯头,剪⼑,布的游戏。
*/public class Game {/*** @param args*/String[] s ={"⽯头","剪⼑","布"};//获取电脑出拳String getComputer(int i){String computerGuess = s[i];return computerGuess;}//判断⼈出拳是否为⽯头,剪⼑,布boolean isOrder(String guess){boolean b = false;for(int x = 0;x < s.length; x++){if(guess.equals(s[x])){b = true;break;}}return b;}//⽐较void winOrLose(String guess1,String guess2){if(guess1.equals(guess2)){System.out.println("你出:" + guess1 + ",电脑出:" + guess2 + "。
平了");}else if(guess1.equals("⽯头")){if(guess2.equals("剪⼑"))System.out.println("你出:" + guess1 + ",电脑出:" + guess2 + "。
You Win!");}else{System.out.println("你出:" + guess1 + ",电脑出:" + guess2 + "。
You Lose!");}}else if(guess1.equals("剪⼑")){if(guess2.equals("布")){System.out.println("你出:" + guess1 + ",电脑出:" + guess2 + "。
java面向对象编程--猜拳小游戏

java⾯向对象编程--猜拳⼩游戏java⾯向对象编程实现--猜拳⼩游戏⽬标⽬标:玩家在控制台和电脑猜拳,电脑每次都会随机出⽯头/剪⼑/布,直到玩家选择退出游戏。
记录并显⽰玩家和电脑猜拳的成绩。
设计思路分析电脑的随机猜拳可以使⽤随机数⽣成,这⾥规定 0表⽰⽯头,1 表⽰剪⼑,2 表⽰布。
为了显⽰清晰,可以设置⼀个⽅法将⽣成的随机数转换为对应⽯头/剪⼑/布。
玩家在控制台输⼊(⽯头/剪⼑/布),但玩家也可能输⼊别的数,所以这⾥需要做⼀个玩家的输⼊校验 ,并考虑给玩家退出游戏的选择。
记录的结果有玩家猜拳选择,电脑猜拳选择和胜负。
为了⽅便管理和显⽰,这⾥设计⼀个结果类。
⽤于记录猜拳的结果,因为猜拳次数可能不⽌⼀次,所以考虑将结果保存到集合中,这⾥使⽤ ArrayList集合。
具体代码实现如下:import java.util.ArrayList;import java.util.Scanner;public class FingerGuessingGame {//测试实现类public static void main(String[] args) {Tom tom = new Tom();tom.guess();}}//玩家类class Tom {Scanner sc = new Scanner(System.in);//猜拳public void guess() {System.out.println("----------猜拳游戏开始(-1退出)---------");//使⽤ArrayList保存结果ArrayList<GuessResult> results = new ArrayList<>();while (true) {//玩家输⼊String tomGuess = checkInput();//如果输⼊-1退出游戏if (tomGuess.equals("-1"))break;//⽣成0-2的随机数int num = (int) (Math.random() * 3);//将获取到的数字按照之前的规定转换为字符串String comGuess = convertComputerGuess(num);System.out.println("电脑出 " + comGuess);//判断输赢String isWin = winORLoose(tomGuess, comGuess);System.out.println(isWin);//将结果添加到集合中results.add(new GuessResult(tomGuess, comGuess, isWin));}//输出结果System.out.println("-------本次猜拳的结果------");System.out.println("玩家\t\t\t电脑\t\t\t胜负");for (GuessResult result : results) {System.out.println(result);}}//获取电脑猜拳结果public String convertComputerGuess(int num) {//0代表⽯头,1剪⼑,2布if (num == 0)return "⽯头";if (num == 1)return "剪⼑";if (num == 2)return "布";return "";}//玩家输⼊校验public String checkInput() {while (true) {System.out.println("你出(⽯头/剪⼑/布)-1退出:");String choice = sc.next();if (choice.equals("⽯头") || choice.equals("剪⼑") ||choice.equals("布") || choice.equals("-1")) {return choice;} elseSystem.out.println("你的输⼊有误! 请检查并重新输⼊:");}}//判断输赢public String winORLoose(String tomGuess, String comGuess) {if (tomGuess.equals("⽯头") && comGuess.equals("剪⼑"))return "赢";else if (tomGuess.equals("剪⼑") && comGuess.equals("布"))return "赢";else if (tomGuess.equals("布") && comGuess.equals("⽯头"))return "赢";else if (tomGuess.equals(comGuess))return "平⼿";elsereturn "输";}}//结果类⽤于记录猜拳的结果class GuessResult {private String tomGuess;private String ComGuess;private String isWin;public GuessResult(String tomGuess, String comGuess, String isWin) { this.tomGuess = tomGuess;ComGuess = comGuess;this.isWin = isWin;}@Overridepublic String toString() {returntomGuess +"\t\t\t"+ComGuess + "\t\t\t" +isWin ;}}。
石头、剪子、布——将游戏引入程序设计

2014-02百花园地初二信息技术教学中,我市采用的是江苏省初中信息技术(选修)课本,主要是进行VB程序设计的教学,让学生通过学习能够掌握VB这门编程语言,学会编写简单的程序,培养一定的编程思想,由于课程时间安排紧凑,在教学中就更要把握好每一节课的时间,充分提高课堂的效率。
在初中信息技术(选修)课本2.2.2中,要通过一个课时的时间,让学生了解、掌握条件语句,这在整个教学过程中都是一个重、难点。
条件语句是VB程序设计中的基本语句之一,其反映的是程序三大基本结构(顺序结构、循环结构和选择结构)中的选择结构,主要用于在程序执行过程中设置给定的条件,并根据给定的条件进行判断,再根据判断的结果来控制程序的流程。
在条件语句设置给定条件时,通常将条件表达式分为关系表达式和逻辑表达式,前者以<、<=、>、>=、=、<>等符号表示条件对象之间的关系,后者以and、or、not来表示条件与条件之间的逻辑关系。
作为一名初二的学生,在数学课堂上已经学习过部分逻辑关系,但由于本身逻辑思维能力的欠缺,以及对程序设计的兴趣不足,结合程序设计语句教学,结果大部分学生在条件设置、程序判断上还存在很多问题。
江苏省初中信息技术课本(选修)第八章第3节中,要求讲授条件语句中的IF语句,该节课程要求让学生在掌握顺序结构的基础上,学习了解选择结构,课本上的概念较多,实践较少,为了让学生更好地掌握IF语句,对程序选择结构能有一个更具体的了解,我将课外游戏的内容引入课堂,尝试调动学生的学习兴趣,提高课堂的效率。
在我以前的条件语句课程设计时,一般先进行情境的创设,如,以“明天爸爸妈妈带一家人前往尚湖公园,只要不下雨(条件)”为例,用“不下雨”这个条件进行判断,明天爸爸妈妈是不是带一家人去公园玩,让学生了解,这个就是条件、这个就是判断,再以“在尚湖公园入口要买票,学生半票,成人全票,老人免票(条件)”为例,重申条件和判断,并提出条件并不一定是2选1,还可以多选1。
Java 石头剪子布游戏

package meng;import java.awt.Color;import java.awt.Font;import java.awt.Rectangle;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JTextArea;public class abc extends JFrame implements ActionListener {JPanel panel; //panel面板JButton toneButton; //石头按钮JButton jianButton; //剪刀按钮JButton buButton; //布按钮JButton clearButton; //清除按钮JLabel label; //显示分数标签JTextArea textArea; //显示结果文本区int win=0; //赢了int fail=0; //输了int ping=0; //平了int grade=0; //分数计数int i=1; //1表示剪刀,2标示石头,3表示布String[] set=new String[]{null,"剪刀","石头","布"}; //存放剪刀石头布String result=" "; //显示分数的字符串public abc() //构造函数{//实例化各个控件和设置各个控件的在面板里的位置panel=new JPanel();panel.setLayout(null);panel.setBackground(Color.yellow);textArea=new JTextArea();textArea.setBounds(new Rectangle(0,50,400,100));textArea.setEditable(false);textArea.setBackground(Color.yellow);textArea.setFont(new Font("宋体",Font.BOLD,30));toneButton=new JButton("石头");toneButton.setBounds(new Rectangle(0,0,100,50)); jianButton=new JButton("剪刀");jianButton.setBounds(new Rectangle(100,0,100,50)); buButton=new JButton("布");buButton.setBounds(new Rectangle(200,0,100,50)); clearButton=new JButton("清空");clearButton.setBounds(new Rectangle(300,0,100,50));buButton.setBackground(Color.green); jianButton.setBackground(Color.green); toneButton.setBackground(Color.green); clearButton.setBackground(Color.green);label=new JLabel(result);label.setBounds(new Rectangle(0,150,300,60));//实现按钮监听toneButton.addActionListener(this);jianButton.addActionListener(this);buButton.addActionListener(this);clearButton.addActionListener(this);//向panel面板添加各个控件panel.add(textArea);panel.add(toneButton);panel.add(jianButton);panel.add(buButton);panel.add(clearButton);panel.add(label);//将面板panel添加到JFrame里add(panel);setBounds(490,280,400,250);setVisible(true);setTitle("张三");setDefaultCloseOperation(3);}public static void main(String[] args) //主方法{abc p=new abc();}public void actionPerformed(ActionEvent e) //实现按钮的单击事件{if(e.getSource()==toneButton) //单击石头按钮{i=2;computeResult();}if(e.getSource()==jianButton){i=1;computeResult();}if(e.getSource()==buButton){i=3;computeResult();}if(e.getSource()==clearButton){win=0;fail=0;ping=0;grade=0;textArea.setText("");label.setText("");// setResult();}}public void computeResult() //计算你出拳和电脑出拳的结果{int j=(int)(Math.random()*3+1); //电脑随机产生数字1,2,3 String comStr=null; //保存计算机出的拳String playStr=null; //保存玩家出的拳for(int a=1;a<set.length;a++){if(a==j){comStr=set[a];}if(a==i){playStr=set[a];}}if(i-j==-2||i-j==1) //玩家赢得时候{win++;grade++;textArea.setText("你出:"+playStr+"\n电脑出:"+comStr+"\n结果:你赢了");setResult();}else if(i-j==0) //电脑和玩家打平的时候{ping++;textArea.setText("你出:"+playStr+"\n电脑出:"+comStr+"\n结果:平局");setResult();}else //电脑获胜或你输了的时候{fail++;textArea.setText("你出:"+playStr+"\n电脑出:"+comStr+"\n结果:你输了");setResult();}}public void setResult() //用与更新分数标签的结果{result=" 分数: 赢: "+ win + " 平: "+ ping + " 输: "+ fail + " 得分: "+grade;label.setText(result);}}。
Java剪刀石头布

Java剪⼑⽯头布package day09_test;import java.util.Random;import java.util.Scanner;import day09.GamePlayer;import day09.GameRobot;public class GameTest {public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.println("请输⼊猜拳⽐赛回合数:");int maxNumber = input.nextInt();//回合计数器int count = 0;//玩家胜利数int countP = 0;//电脑胜利数int countR = 0;while(count<maxNumber) {System.out.println("请输⼊你想出的数字:(1.剪⼑ 2.⽯头 3.布)");int PlayNum = input.nextInt();if (PlayNum>3 || PlayNum<=0) {System.out.println("输⼊有误!请重新输⼊:");PlayNum =input.nextInt();}GamePlayer player = new GamePlayer(PlayNum);player.say();//机器⼈随机输⼊1-3Random r = new Random();int RobotNum = r.nextInt(3)+1;GameRobot robot = new GameRobot(RobotNum);robot.say();//判断输赢if (player.getNumber()==robot.getNumber()) {count++;System.out.println("第"+count+"局:双⽅⼀致,请重新猜拳!");}else if (player.getNumber()==1) {//玩家出剪⼑if (robot.getNumber()==3) {//电脑出布count++;countP++;System.out.println("第"+count+"局:玩家赢,您得⼀分!");}else if (robot.getNumber()==2) {//电脑出⽯头count++;countR++;System.out.println("第"+count+"局:电脑赢,它得⼀分!");}}else if (player.getNumber()==2) {//玩家出⽯头if (robot.getNumber()==3) {//电脑出布count++;countP++;System.out.println("第"+count+"局:电脑赢,它得⼀分!");}else if (robot.getNumber()==1) {//电脑出剪⼑count++;countR++;System.out.println("第"+count+"局:玩家赢,您得⼀分!");}else if (player.getNumber()==3) {//玩家出布if (robot.getNumber()==2) {//电脑出布count++;countP++;System.out.println("第"+count+"局:玩家赢,您得⼀分!");}else if (robot.getNumber()==1) {//电脑出剪⼑count++;countR++;System.out.println("第"+count+"局:电脑赢,它得⼀分!");}}}if (countP==countR) {System.out.println("电脑得分:"+countR+" 玩家得分:"+countP); System.out.println("⽐赛结束,平局!");}else if (countP>countR) {System.out.println("电脑得分:"+countR+" 玩家得分:"+countP); System.out.println("⽐赛结束,玩家胜利!");}else {System.out.println("电脑得分:"+countR+" 玩家得分:"+countP); System.out.println("⽐赛结束,电脑胜利!");}}}package day09;public class GameRobot {private int number;public int getNumber() {return number;}public void setNumber(int number) {this.number = number;}public GameRobot() {super();// TODO Auto-generated constructor stub}public GameRobot(int number) {super();this.number = number;}public void say() {switch(this.number) {case 1:System.out.println("电脑出的是剪⼑");break;case 2:System.out.println("电脑出的是⽯头");break;case 3:System.out.println("电脑出的是布");break;}}package day09;/*** 今天的任务是通过控制台⽅式实现⼀个⼈机对战的猜拳游戏,⽤户通过输⼊(1.剪⼑ 2.⽯头 3.布),机器随机⽣成(1.剪⼑ 2.⽯头 3.布),胜者积分,n 局以后通过积分的多少判定胜负。
java游戏—石头剪刀布

public void actionPerformed(ActionEvent e){
random=new Random();
int i=random.nextInt(3);
if(e.getActionCommand()=="石头"){
if(result[i].equals(result[0])){
Jta.append("\n\n现在比分是: 您: "+s1+"许仕永: "+s2);
}
if(result[i].equals("布")){
Jta.setText("");
String s1=String.valueOf(myguess);
String s2=String.valueOf(cupguess);
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.Random;
public class Shi_T implements ActionListener{
JFrame frame;
//b5.addActionListener(this);
cp.add(p1,BorderLayout.CENTER);
cp.add(p2,BorderLayout.SOUTH);
frame.setVisible(true);
frame.setSize(400,300);
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
Java课程设计-剪刀、石头、布游戏 - 代燕清

2012届课程设计20《剪刀、石头、布小游戏》课程设计说明书学生姓名代燕清学号5042209016所属学院信息工程学院专业计算机网络班级计算机网络专12指导教师李旭教师职称讲师塔里木大学教务处制我做的“剪刀,石头,布”游戏是一个很简单的Java小游戏,这个游戏是进行人机对战的,玩这个游戏时你只需要在对话框中输入自己想的答案就好了,例如你输入的是“石头”然后确认,这是电脑就会随即给出“剪刀,石头,布”中的一个,然后电脑会根据游戏规则判断对错问题。
用户只需要,输入心中想的答案即可。
关键词:Java;猜数字摘要 (1)目录 (2)前言 (2)项目概况 (3)2.1项目所用的时间 (3)2.2项目负责人 (4)2.3项目指导人 (4)正文 (4)3.1设计分析 (4)3.2程序结构(流程图) (4)3.3操作方法 (4)3.4试验结果(包括输入数据和输出结果) (5)总结 (6)致谢 (7)参考文献 (8)附录 (9)前言Java是在网络时代诞生的,因此必须适应网络发展的特殊需要.Java的发展和壮大并且逐渐成为网络变成的主流语言,则充分说明了java适应了网络发展的特殊需要,学习好该门课程是成为一个好的java程序员的前提条件,通过此次课程设计使学生达到提高动手能力的目的.Java语言作为当今 INTERNET上最流行的编程语言,它的产生和WWW密切相关,所以课程中还将对WWW技术进行必要的介绍.同时,对于信息安全专业的学生,掌握Java中的安全包的API和Sandbox也是极其重要的.通过本课程的学习,使学生掌握网络编程的基本方法,能够根据现实生活实践编制出一些实用的客户机/服务器小程序.为进一步学习维护网站信息安全的建设打下基础.为了加深对JAVA语言的掌握及对面向对象程序设计基本思想的理解,提高对面向对象技术的具体应用,进行本次课程设计.此次我做的课程设计项目是要设计一个猜数字游戏。
这个题目都是比较基础的内容,是作为一个学习网络应当具备的能力。
Java猜拳小游戏(剪刀、石头、布)

Java猜拳⼩游戏(剪⼑、⽯头、布)1、第⼀种实现⽅法,调⽤Random数据包,直接根据“1、2、3”输出“剪⼑、⽯头、布”。
主要⽤了9条输出判断语句。
import java.util.Random;import java.util.Scanner;public class caiquan{public static void main(String[] args){Random r=new Random();int diannao=r.nextInt(3)+1;Scanner s=new Scanner(System.in);System.out.println("=========猜拳⼩游戏=========");System.out.println("请输⼊1、2、3,1代表剪⼑,2代表⽯头,3代表布");int fangke=s.nextInt();if(diannao==1&&fangke==1){System.out.println("电脑出的是剪⼑,你出的是剪⼑,平局");}if(diannao==1&&fangke==2){System.out.println("电脑出的是剪⼑,你出的是⽯头,你赢了");}if(diannao==1&&fangke==3){System.out.println("电脑出的是剪⼑,你出的是布,电脑赢了");}if(diannao==2&&fangke==1){System.out.println("电脑出的是⽯头,你出的是剪⼑,电脑赢了");}if(diannao==2&&fangke==2){System.out.println("电脑出的是⽯头,你出的是⽯头,平局");}if(diannao==2&&fangke==3){System.out.println("电脑出的是⽯头,你出的是布,你赢了");}if(diannao==3&&fangke==1){System.out.println("电脑出的是布,你出的是剪⼑,你赢了");}if(diannao==3&&fangke==2){System.out.println("电脑出的是布,你出的是⽯头,电脑赢了");}if(diannao==3&&fangke==3){System.out.println("电脑出的是布,你出的是布,平局");}if(fangke!=1&&fangke!=2&&fangke!=3){System.out.println("只能输⼊1、2、3");}}} 2、第⼆种实现⽅法,不调⽤Random数据包,换成Math.random(),把“1、2、3”换成“剪⼑、⽯头、布”再输出。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录前言 (3)1剪刀石头布游戏设计思路阐述 (3)2程序概要设计 (4)2.1功能需求分析 (4)2.2性能需求分析 (4)2.3程序框图 (4)2.4 Java类及自定义类相互继承的层次关系 (4)2.4.1 Java类及自定义类的说明 (5)2.4.2类中成员及作用 (5)3程序详细设计 (6)3.1 包的加载 (6)3.2自定义类创建服务器端和客户端 (6)3.3创建程序线程 (7)4测试运行 (9)5源代码清单 (10)6总结 (13)7致谢 (13)参考文献 (13)基于JAVA的剪刀石头布游戏设计摘要:本课程设计使用Java语言,运用java.io包和包及getInputStream()、getOutputStream()等方法,编写出一个能在dos环境中显示出剪刀石头布游戏界面,启动服务器端线程,运行客户端线程,提示玩家出拳,然后,程序把玩家输入的数据传入到服务器端,通过服务器端线程的函数得出结果,然后再把结果传输到界面上。
关键字:方法;网络编程;多线程;输入输出流前言Java,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。
用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。
从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。
在面向对象程序设计中,通过继承可以简化类的定义。
继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。
对象的一个新类可以从现有的类中派生,这个过程称为类继承。
新类继承了原始类的特性,新类称为原始类的派生类,而原始类称为新类的超类。
派生类可以从它的基类那里继承方法和变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
在一个程序中,这些独立运行的程序片断叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理”。
多线程处理一个常见的例子就是用户界面。
利用线程,用户可按下一个按钮,然后程序会立即作出响应,而不是让用户等待程序完成了当前任务以后才开始响应。
在Java语言中,线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创建。
通常有两种方法来创建线程:其一,使用型构为Thread(Runnable) 的构造子将一个实现了Runnable接口的对象包装成一个线程,其二,从Thread类派生出子类并重写run方法,使用该子类创建的对象即为线程。
值得注意的是Thread类已经实现了Runnable接口,因此,任何一个线程均有它的run方法,而run方法中包含了线程所要运行的代码。
线程的活动由一组方法来控制。
Java语言支持多个线程的同时执行,并提供多线程之间的同步机制。
通过一个学期的学习,对Java有了一定的了解,为了巩固所学知识,编写一个剪刀石头布游戏。
1剪刀石头布游戏设计思路阐述在设计游戏时,我们要充分考虑到剪刀石头布游戏的特性,以及多种技术的实现:⑴构造创建服务器端和客户端⑵创建输入输出流⑶编写服务器端处理数据的线程方法⑷绘制游戏界面⑸绘制界面上的提示采用此方法设计使程序简洁明了,使绘制游戏界面时简单化,更加易于游戏的实现,程序也更易于读懂。
如java中得到输入输出流的方法://调用客户端的getInputStream()方法Inputs=newBufferedReader(new InputStreamReader(client.getInputStream()));通过调用此方法获取从服务器得到的数据调用客户端的getOutputStream()方法,通过此方法把客户端的数据传输给服务器。
2程序概要设计2.1功能需求分析一个剪刀石头布游戏,根据一般的常识,首先要有两个人,两个人同时出,然后,根据双方的出拳,决定谁是赢者,虽然想起来这个游戏很简单,但如何实现,还是有一定难度的。
实现这个时针时涉及到几个技术问题:1.双方如何出拳2.如何同时出拳3.如何判断哪方赢了4.如何显示结果剪刀石头布游戏,都是通过两个人同时出拳,然后根据双方出的拳,判定哪方是赢家。
2.2性能需求分析准确性:在实现此的过程中,我们要考虑到,双方是否能同时地出拳,还要就是如何去判断,准确地知道哪方是赢家.简洁性:在实现此的过程中,我们要考虑到,怎样使游戏界面更简单,让人更容易明白它怎样去玩。
2.3程序框图游戏程序框图如图1所示:图1 游戏程序框图2.4 JAVA类及自定义类相互继承的层次关系2.4.1 Java类及自定义类的说明自定义类:类名:SocketServer作用:服务器类继承的父类:Thread类实现的接口:无类名:Service作用: 服务器类,它是判定胜负的类继承的父类:Thread类类中成员: String data;BufferedReader inputs;PrintStream outputs;Socket client;实现的接口:无类名:Client作用:客户端类类中的成员: getInputStream();getOutputStream();InputStreamReader ();readLine();实现的接口:无自定义类中子类和其父类的继承关系如图2如所示:图2 子类及其父类继承关系图2.4.2类中成员及作用Service类成员:String data; //接收数据BufferedReader inputs;// 读取数据PrintStream outputs;//输出数据Socket client;//定义套接字Client类成员:String data;//接收数据Socket client = null;//定义套接字BufferedReader inputs = null;// 读取数据BufferedReader key = null;// 缓冲数据PrintStream outputs = null;//输出数据3程序详细设计3.1类获包的加载加载剪刀石头布游戏设计中用到的类和包,用于运行主程序:import java.io.*;import .*;3.2自定义类创建服务器端使用自定义类ServerSocket继承父类Thread使用run等方法,构造函数创建一个服务器端。
程序代码如下:public class SocketServer extends Thread {ServerSocket server;public SocketServer() {try {server = new ServerSocket(8080);}catch(IOException e) {System.exit(0);}this.start();}public void run() {try {while(true) {Socket client = server.accept();Service ss = new Service(client);}}catch(IOException e) {System.exit(1);}}public static void main(String[] args) {new SocketServer();}}3.3创建数据处理类创建一个用于数据处理类使服务器能准确处理数据,获取数据,并使用方法run()实现数据处理。
实现代码如下://创建数据储存变量inputs = new BufferedReader(new InputStreamReader(client.getInputStream())); outputs = new PrintStream(client.getOutputStream());//创建一个Run方法public void run() {}3.4创建客户端类创建一个用于客户端接收玩家输入的数据的类,程序实现代码如下://接收客户端的数据public class Client {public static void main(String[] args) {String data;Socket client = null;BufferedReader inputs = null;BufferedReader key = null;PrintStream outputs = null;try {client = new Socket(InetAddress.getLocalHost(),8080);inputs=new BufferedReader(new InputStreamReader(client.getInputStream()));outputs = new PrintStream(client.getOutputStream());key = new BufferedReader(new InputStreamReader(System.in));}catch(IOException e) {System.out.println("CAN NOT CONN WITH SERVER");}try {while(true) {System.out.println("----------------------------");System.out.print("请出拳:石头/剪刀/布 ");data = key.readLine();outputs.println(data);System.out.println("ECHO: " + inputs.readLine());}}catch(IOException e) {System.out.println("ERROR IO");}try {client.close();}catch(IOException e) {System.out.println("can not close it");}}}4测试运行程序编写好后,用MyEclipse软件运行,检测程序设计结果,执行目标程序后得到如图4所示的窗体:图4 程序测试图“空格+石头、剪刀或布”经检测程序运行正常。
5源代码清单import java.io.*;import .*;public class SocketServer extends Thread {ServerSocket server;public SocketServer() {try {server = new ServerSocket(8080);}catch(IOException e) {System.exit(0);}this.start();}public void run() {try {while(true) {Socket client = server.accept();Service ss = new Service(client);}}catch(IOException e) {System.exit(1);}}public static void main(String[] args) {new SocketServer();}}public class Service extends Thread {String data;BufferedReader inputs;PrintStream outputs;Socket client;public Service(Socket socket) {client = socket;try {inputs=new BufferedReader(new InputStreamReader(client.getInputStream()));outputs = new PrintStream(client.getOutputStream());}catch (IOException e) {e.printStackTrace();}this.start();}public void run() {try {while (true) {data = inputs.readLine();int res = (int) (Math.random() * 3);if (data == null)break;else {if (res == 0 && "石头".equals(data)) {data = "电脑也是石头,打平了!!";} else if (res == 0 && "剪刀".equals(data)) {data = "电脑是石头,电脑赢了!!";} else if (res == 0 && "布".equals(data)) {data = "电脑是石头,恭喜,你赢了!!";} else if (res == 1 && "石头".equals(data)) {data = "电脑是剪刀,恭喜,你赢了!!";} else if (res == 1 && "剪刀".equals(data)) {data = "电脑也是剪刀,打平了!!";} else if (res == 1 && "布".equals(data)) {data = "电脑是剪刀,电脑赢了!!";} else if (res == 2 && "石头".equals(data)) {data = "电脑是布,电脑赢了!!";} else if (res == 2 && "剪刀".equals(data)) {data = "电脑是布,恭喜,你赢了!!";} else if (res == 2 && "布".equals(data)) {data = "电脑也是布,打平了!!";} else {data = "电脑不认识你出的拳"; }outputs.println(data);}}} catch (IOException e) {e.printStackTrace();}try {client.close();} catch (IOException e) {e.printStackTrace();}}}public class Client {public static void main(String[] args) {String data;Socket client = null;BufferedReader inputs = null;BufferedReader key = null;PrintStream outputs = null;try {client = new Socket("localhost",8080);inputs = new BufferedReader(new InputStreamReader(client.getInputStream()));outputs = new PrintStream(client.getOutputStream());key = new BufferedReader(new InputStreamReader(System.in));}catch(IOException e) {System.out.println("CAN NOT CONN WITH SERVER");}try {while(true) {System.out.println("----------------------------");System.out.print("请出拳:石头/剪刀/布 ");data = key.readLine();outputs.println(data);System.out.println("ECHO: " + inputs.readLine());}}catch(IOException e) {System.out.println("ERROR IO");}try {client.close();}catch(IOException e) {System.out.println("can not close it");}}}6总结通过此次的课程设计,让我们了解和学会了许多Java的基础知识。