Java课程设计报告石头剪子布猜拳人机对战

更新时间:2023-07-21 12:06:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

测试可运行

大 连 科 技 学 院

Java课程设计报告

题 目 剪刀石头布人机对战系统的设计与实现

计算机10-1

指导教师 李孝贵 史原 职 称 讲师

所在单位 信息科学系软件工程教研室

教学部主任 王立娟

完成日期 2013年9月13日

测试可运行

课程设计报告单

综 合 评 定:

(优、良、中、及格、不及格)

2013年9月16日

指导教师签字:

测试可运行

《Java课程设计》任务书

任务及要求:

一、设计(研究)内容和要求

内容:编写一个管理软件,使用GUI界面,实现信息管理功能。包括对信息的查询,添加,删除等操作。采用数据库存储数据。

要求: 1、软件要求

(1)实现界面。进行系统需求分析和系统设计,写出系统分析和设计报告。 (2)实现数据库的连接和应用功能。

(3)实现对数据的查询,添加,删除等功能。 2、文档要求

(1) 设计程序结构、画出模块图。

(2) 按照指导教师给出的项目文档的模板进行书写。 (3) 参考文献数量不得低于4个。

二、工作量

2周(10个工作日)时间 三、计划安排

第1个工作日-第2个工作日:查找相关资料、书籍,阅读示例文档;

设计程序结构、模块图、完成类的设计。

第3个工作日-第8个工作日:完成程序的编码,并且自己调试、测试。穿插进行项

目文档的撰写。

第9个工作日:撰写和整理项目文档。

第10个工作日:由教师检查软件测试效果、项目文档,给出学生本课程成绩。

指导教师签字:

2013年9月2日

测试可运行

目录

题目: ........................................................................................................................................ 1

1.需求分析 ......................................................................................................................... 1 2.概要设计 ......................................................................................................................... 1 3.详细设计 ......................................................................................................................... 1 4.编码 ................................................................................................................................. 3 5.调试分析 ......................................................................................................................... 5 6.测试结果及运行效果 ..................................................................................................... 6 7.系统开发所用到的技术 ................................................................................................. 8 参考文献 .................................................................................................................................... 9 附录 全部代码 ........................................................................................................................ 10

测试可运行

题目:

石头剪刀布人机对战系统的设计与实现

1.需求分析

这是一个古老耐玩的游戏,根据一般的常识,首先要有两个人,两个人同时出,然后,根据双方的出拳,决定谁是赢者,虽然想起来这个游戏很简单,但如何实现 ,还是有一定难度的。实现这个时针时涉及到几个技术问题:

1. 双方如何出拳 2. 如何同时出拳 3. 如何判断哪方赢了 4. 如何显示结果

剪刀石头布游戏,都是通过两个人同时出拳,然后根据双方出的拳,判定哪方是赢家。准确性:在实现此的过程中,我们要考虑到,双方是否能同时地出拳,还要就是如何去判断,准确地知道哪方是赢家.简洁性:在实现此的过程中,我们要考虑到,怎样使游戏界面更简单,让人更容易明白它怎样去玩。

2.概要设计

在设计游戏时,我们要充分考虑到剪刀石头布游戏的特性,以及多种技术的实现:

⑴构造创建服务器端和客户端 ⑵创建输入输出流

⑶编写服务器端处理数据的线程方法 ⑷绘制游戏界面 ⑸绘制界面上的提示

采用此方法设计使程序简洁明了,使绘制游戏界面时简单化,更加易于游戏的实现,程序也更易于读懂。

3.详细设计

3.1自定义类中子类和其父类的继承关系如图

图3.1子类及其父类继承关系图

测试可运行

3.2 Java类及自定义类的说明

自定义类:

类名:SocketServer 作用:服务器类 继承的父类:Thread类

实现的接口:无

类名:Service

作用: 服务器类,它是判定胜负的类 继承的父类:Thread类 类中成员: String data;

BufferedReader inputs; PrintStream outputs; Socket client; 实现的接口:无

类名:Client 作用:客户端类

类中的成员: getInputStream(); getOutputStream(); InputStreamReader (); readLine(); 实现的接口:无

3.3类中成员及作用

Service类成员: String data; //接收数据

BufferedReader inputs;// 读取数据 PrintStream outputs;//输出数据 Socket client;//定义套接字 Client类成员:

测试可运行

String data;//接收数据

Socket client = null;//定义套接字 BufferedReader inputs = null;// 读取数据 BufferedReader key = null;// 缓冲数据 PrintStream outputs = null;//输出数据

4.编码

4.1类获包的加载

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

4.2自定义类创建服务器端

使用自定义类ServerSocket继承父类Thread使用run等方法,构造函数创建一个服务器端。 程序代码如下:

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(); } }

4.3创建数据处理类

创建一个用于数据处理类使服务器能准确处理数据,获取数据,并使用方法run()实现数据处理。实现代码如下: //创建数据储存变量

inputs = new BufferedReader(new InputStreamReader(client.getInputStream())); outputs = new PrintStream(client.getOutputStream()); //创建一个Run方法 public void run() { }

4.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"); } } }

5.调试分析

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

而且由于本游戏画面简陋,可玩性不强,我针对这一特点在游戏中适当加入一些文字,大大增加了游戏的趣味性与耐玩度。

测试可运行

6.测试结果及运行效果 6.1首先运行代码

图6.1运行环境

6.2游戏界面

代码运行后直接进入游戏界面,可以看到我加入的个性鲜明的文字,让人看完之后热血沸腾,迫不及待想开始游戏。

图6.2游戏开始界面

测试可运行

6.3游戏运行界面

游戏运行正常,想要的功能全部得到实现。下图为在游戏的过程中玩家被电脑击败。

图6.3游戏运行界面

下图为在游戏中玩家击败了电脑,取得了本局游戏的胜利。我们可以清楚的看到,每一局比赛的记录。

图6.4游戏画面

测试可运行

7.系统开发所用到的技术

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

测试可运行

参考文献

[1] 刘彬编著,java高级教程,清华大学出版社

[2] 张阳《java Web开发实践教程----从设计到实现》,清华大学出版社 [3] 危锋《论JAVA继承机制中父类与子类的关系》福建电脑出版社

测试可运行

附录 全部代码

import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.util.Random;

public class abcc implements ActionListener{ JFrame frame; JTextArea Jta; JTextField tf;

JButton b1,b2,b3,b4; Random random;

String[] result={"石头","剪刀","布"}; private static int cupguess=0,myguess=0;

public static void main(String[] args){ abcc shitou=new abcc(); shitou.go(); }

void go(){

frame=new JFrame("不服就用拳头来解决问题");

tf=new JTextField("世界级拳王争霸,是男人就来决斗吧,计算机李易霖制作");

Jta=new JTextArea(); Jta.setLineWrap(true); b1=new JButton("石头"); b2=new JButton("剪刀"); b3=new JButton("布"); b4=new JButton("退出"); //b5=new JButton("重开");

//random=new Random().nextInt(3);

Container cp=frame.getContentPane();

JPanel p1=new JPanel(new GridLayout(2,1)); p1.add(tf); p1.add(Jta);

JPanel p2=new JPanel(new GridLayout()); p2.add(b1); p2.add(b2);

测试可运行

p2.add(b3); p2.add(b4); //p2.add(b5);

b1.addActionListener(this); b2.addActionListener(this); b3.addActionListener(this); b4.addActionListener(this); //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); }

public void actionPerformed(ActionEvent e){ random=new Random(); int i=random.nextInt(3);

if(e.getActionCommand()=="石头"){ if(result[i].equals(result[0])){ Jta.setText("");

String s1=String.valueOf(myguess); String s2=String.valueOf(cupguess);

Jta.append("您: 石头 VS 世界级拳皇: 石头 本局平手"); Jta.append("\n\n现在比分是:您: "+s1+"世界级拳王: "+s2); }

if(result[i].equals(result[1])){ Jta.setText(""); ++myguess;

String s1=String.valueOf(myguess); String s2=String.valueOf(cupguess);

Jta.append("您: 石头 VS 世界级拳王: 剪刀 本局您胜出"); Jta.append("\n\n现在比分是:您: "+s1+"世界级拳王: "+s2); }

if(result[i].equals(result[2])){ Jta.setText(""); ++cupguess;

String s1=String.valueOf(myguess);

测试可运行

String s2=String.valueOf(cupguess);

Jta.append("您: 石头 VS 世界级拳王: 布 本局您败北"); Jta.append("\n\n现在比分是: 您: "+s1+"世界级拳王: "+s2); } }

if(e.getActionCommand()=="剪刀"){ if(result[i].equals(result[0])){ Jta.setText(""); ++cupguess;

String s1=String.valueOf(myguess); String s2=String.valueOf(cupguess);

Jta.append("您: 剪刀 VS 世界级拳王: 石头 本局您惨败"); Jta.append("\n\n现在比分是:您: "+s1+"世界级拳王: "+s2); }

if(result[i].equals(result[1])){ Jta.setText("");

String s1=String.valueOf(myguess); String s2=String.valueOf(cupguess);

Jta.append("您: 剪刀 VS 世界级拳王: 剪刀 本局平局"); Jta.append("\n\n现在比分是: 您: "+s1+"世界级拳王: "+s2); }

if(result[i].equals(result[2])){ Jta.setText(""); ++myguess;

String s1=String.valueOf(myguess); String s2=String.valueOf(cupguess);

Jta.append("您: 剪刀 VS 世界级拳王: 布 本局您侥幸胜出"); Jta.append("\n\n现在比分是:您: "+s1+"世界级拳王: "+s2); } }

if(e.getActionCommand()=="布"){ if(result[i].equals("石头")){ Jta.setText(""); ++myguess;

String s1=String.valueOf(myguess); String s2=String.valueOf(cupguess);

Jta.append("您: 布 VS 世界级拳王: 石头 本局您偶然赢了"); Jta.append("\n\n现在比分是:您: "+s1+"世界级拳王: "+s2);

测试可运行

}

if(result[i].equals("剪刀")){ Jta.setText(""); ++cupguess;

String s1=String.valueOf(myguess); String s2=String.valueOf(cupguess);

Jta.append("您: 布 VS 世界级拳王: 剪刀 本局您给输了许先生"); Jta.append("\n\n现在比分是: 您: "+s1+"世界级拳王: "+s2); }

if(result[i].equals("布")){ Jta.setText("");

String s1=String.valueOf(myguess); String s2=String.valueOf(cupguess);

Jta.append("您: 布 VS 世界级拳王: 布 本局是平局"); Jta.append("\n\n现在比分是:您: "+s1+"世界级拳王: "+s2); } }

if(e.getSource()==b4)System.exit(0); }}

本文来源:https://www.bwwdw.com/article/5fym.html

Top