基于JAVA的剪刀石头布游戏设计——Java课程设计报告_

基于JAVA的剪刀石头布游戏设计——Java课程设计报告_
基于JAVA的剪刀石头布游戏设计——Java课程设计报告_

目录

前言 (2)

1剪刀石头布游戏设计思路阐述 (3)

2程序概要设计 (3)

2.1功能需求分析 (3)

2.2性能需求分析 (3)

2.3程序框图 (3)

2.4 Java类及自定义类相互继承的层次关系 (4)

2.4.1 Java类及自定义类的说明 (4)

2.4.2类中成员及作用 (5)

2.5 程序运行效果及存在的问题 (5)

2.5.1运行效果图 (5)

2.5.2存在的问题 (6)

3程序详细设计 (6)

3.1 包的加载 (6)

3.2自定义类创建服务器端和客户端 (6)

3.3创建程序线程 (7)

4测试运行 (9)

5源代码清单 (10)

6总结 (13)

7致谢 (13)

参考文献 (13)

基于JAVA的剪刀石头布游戏设计

摘要:本课程设计使用Java语言,运用 java.io包和https://www.360docs.net/doc/024445939.html,包及getInputStream()、getOutputStream()等方法,编写出一个能在dos环境中显示出剪刀石头布游戏界面,启动服务器端线程,运行客户端线程,提示玩家出拳,然后,程序把玩家输入的数据传入到服务器端,通过服务器端线程的函数得出结果,然后再把结果传输到界面上。

关键字:方法;网络编程;多线程;输入输出流

前言

Java,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet【1】。

在面向对象程序设计中,通过继承可以简化类的定义。继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承【2】。新类继承了原始类的特性,新类称为原始类的派生类,而原始类称为新类的超类。派生类可以从它的基类那里继承方法和变量,并且类可以修改或增加新的方法使之更适合特殊的需要。

在一个程序中,这些独立运行的程序片断叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理”【3】。多线程处理一个常见的例子就是用户界面。利用线程,用户可按下一个按钮,然后程序会立即作出响应,而不是让用户等待程序完成了当前任务以后才开始响应。在Java语言中,线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创建。通常有两种方法来创建线程:其一,使用型构为Thread(Runnable) 的构造子将一个实现了Runnable接口的对象包装成一个线程,其二,从Thread类派生出子类并重写run方法,使用该子类创建的对象即为线程。值得注意的是Thread类已经实现了Runnable接口,因此,任何一个线程均有它的run方法,而run方法中包含了线程所要运行的代码。线程的活动由一组方法来控制。 Java语言支持多个线程的同时执行,并提供多线程之间的同步机制【4】。

通过一个学期的学习,对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;//输出数据

2.5 程序运行效果及存在的问题

2.5.1运行效果图

剪刀石头布游戏效果如图3所示:

图3时钟效果图

2.5.2存在的问题

此游戏界面简洁明了,但还是有许多问题的,比如说这个界面不是GUI 的,所以操作性不强,也不美观,而且处理数据的random函数也有问题,它可能出现相同的结果,不能成为真正意义上的随机,所以这个小游戏还是有许多问题的,我会进一步的改进它。

3程序详细设计

3.1类获包的加载

加载剪刀石头布游戏设计中用到的类和包,用于运行主程序:import java.io.*;

import https://www.360docs.net/doc/024445939.html,.*;

3.2自定义类创建服务器端

使用自定义类ServerSocket继承父类Thread使用run等方法,构造函数创建一个服务器端【5】。

程序代码如下:

public class SocketServer extends Thread {

ServerSocket server;

public SocketServer() {

try {

server = new ServerSocket(6000);

}

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("localhost",6000);

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测试运行

程序编写好后,用JCreator软件运行,检测程序设计结果,执行目标程序后得到如图4所示的窗体:

图4 程序测试图

经检测程序运行正常。

5源代码清单

import java.io.*;

import https://www.360docs.net/doc/024445939.html,.*;

public class SocketServer extends Thread {

ServerSocket server;

public SocketServer() {

try {

server = new ServerSocket(6000);

}

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",6000);

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的基础知识。从课程设计中我学会了Java中类的作用及其方法的调用,知道了类的父类和子类的的继承关系及自定义类的作用,还使我了解到服务器和客户端的特点和作用,我需要学习的东西还很多。

通过此次的课程设计,让我了解到自己以往学习中的不足之处,认识到自己还有哪一些知识没有掌握,让我有了学习的重点和方向,更有利于今后的学习。在实践中发现问题,分析问题,解决问题,在每一个问题中,吸取知识和经验,最终掌握知识和技巧。通过课程剪刀石头布游戏,让我体会到了付出劳动才能有所收获的喜悦感,让我明白了只有真正通过实践才能更好的融汇和掌握所学的理论知识。这次课程设计,让我今后有了更好的学习方向,给了我更多的学习动力,对我的帮助很大。

7致谢

在本次课程设计的过程中,得到了@@老师的细心指导和一学期的辛苦教授,同时也得到了一些同学好的建议,在此我表示最衷心的感谢,我不会辜负大家对我的期望的,我一定会更加努力学习的。

参考文献

[1] 张岚,张志伟. 浅谈面向对象的程序设计[J].内蒙古科技与经济, 2009,(05)

[2] 危锋.论JAVA继承机制中父类与子类的关系[J].福建电脑, 2010,(06):59-60

[3] 清华大学计算机与信息管理中心主编. Java 语言程序设计[M].中国铁道出版社,2010:(8):211-215

[4]时雷;虎晓红;席磊;张浩.Java程序设计课程教学分析[J]. 计算机教育.2010:(12)19-22

[5] https://www.360docs.net/doc/024445939.html,/ JAVA开发的官方网站

相关主题
相关文档
最新文档