基于Java的猜拳小游戏设计文档格式.docx

上传人:b****7 文档编号:22093210 上传时间:2023-02-02 格式:DOCX 页数:21 大小:211.59KB
下载 相关 举报
基于Java的猜拳小游戏设计文档格式.docx_第1页
第1页 / 共21页
基于Java的猜拳小游戏设计文档格式.docx_第2页
第2页 / 共21页
基于Java的猜拳小游戏设计文档格式.docx_第3页
第3页 / 共21页
基于Java的猜拳小游戏设计文档格式.docx_第4页
第4页 / 共21页
基于Java的猜拳小游戏设计文档格式.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

基于Java的猜拳小游戏设计文档格式.docx

《基于Java的猜拳小游戏设计文档格式.docx》由会员分享,可在线阅读,更多相关《基于Java的猜拳小游戏设计文档格式.docx(21页珍藏版)》请在冰豆网上搜索。

基于Java的猜拳小游戏设计文档格式.docx

1)界面的左侧是电脑或者玩家的名字,让界面看起来一目了然。

2)系统界面的中间是电脑或者玩家出拳的图片。

图片可以生动形象得表示出电脑或者玩家出的拳,显示的图片在对话框中也相得益彰。

在图片的下方会显示,人机猜拳以后的输赢。

3)界面的右侧是三个剪刀石头布的按钮。

玩家通过按钮出拳,电脑随机出拳,猜拳的输赢结果在下方显示。

二)设计思路:

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

⑴构造创建服务器端和客户端

⑵创建输入输出流

⑶编写服务器端处理数据的线程方法

⑷绘制游戏界面

⑸绘制界面上的提示

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

如java中得到输入输出流的方法:

//调用客户端的getInputStream()方法

Inputs=newBufferedReader(newInputStreamReader(client.getInputStream()));

通过调用此方法获取从服务器得到的数据

调用客户端的getOutputStream()方法,通过此方法把客户端的数据传输给服务器。

三)系统分析

Java程序编辑器是:

图形界面、线程、流与文件等技术的综合应用。

图形界面的实现:

考虑到简单、实用、高效等特点,就选择了AWT来完成实现,在选择组件上,文本编辑区就选用了TaxtArea作为主要的部件。

线程实现文件自动保存:

在相关的参考书上查阅到在Time类中有一个schedule方法可以在后台自动完成一定的功能,而且调用起来相当简单,于是就用了Time类中的schedule方法来实现文件自动保存及备份功能。

文件操作的实现:

利用了字符文件流FileReader和FileWriter类来实现。

由于Java的特性,可能用任何一个编辑器来编辑,于是就将Windows中的记事本作为模仿对象,根据实现情况删减了其中的一些功能,如自动换行,设置字体,打印等功能。

在设计类的时候,考虑到简单明了,就用了两个类,一个主类和一个默认属性类作为程序的整体框架,所有的对象和方法都是在默认属性类中创建和实现的,以及为各组件注册事件监听程序也是在默认属性类中实现的。

主类完成对象的实例化及显示。

这们设计的优点是:

条理清晰,容易理解,容易修改。

这样设计的缺点是:

不利于共享类中的方法。

四)程序概要设计

1)功能需求分析

一个剪刀石头布游戏,根据一般的常识,首先要有两个人,两个人同时出,然后,根据双方的出拳,决定谁是赢者,虽然想起来这个游戏很简单,但如何实现,还是有一定难度的。

实现这个时针时涉及到几个技术问题:

1.双方如何出拳

2.如何同时出拳

3.如何判断哪方赢了

4.如何显示结果

剪刀石头布游戏,都是通过两个人同时出拳,然后根据双方出的拳,判定哪方是赢家。

2)性能需求分析

准确性:

在实现此的过程中,我们要考虑到,双方是否能同时地出拳,还要就是如何去判断,准确地知道哪方是赢家.

简洁性:

在实现此的过程中,我们要考虑到,怎样使游戏界面更简单,让人更容易明白它怎样去玩。

五)工作流程图:

图1工作流程图

六)程序框图

游戏程序框图如图2所示

图2游戏程序框图

七)程序中所用类说明:

(1)用户自定义类

类名:

SmallGame

作用:

实例化对象

主要成员变量:

FramemyFrm//定义主窗体

TextAreamyText//定义文本编辑区

ButtonBfontOK,Bfind,Breplace,Bnext,Bcancel//定义和创建各按钮

LabelLfLr,Ls//定义和创建各标签

MenuBarMbbar//定义和创建主菜单

MenuMfile,Medit,Mformation,Mhelp//定义和创建主菜单中的选项

ToolkittoolKit

ClipboardmyCB//剪切板对象

FileDialogmyFDlg//定义文件对话框

主要成员方法:

publicvoidinit()//初始化各部件菜单的定义和事件的监听

publicvoiddisplayEdit()//显示窗体及调用Time中的schedule方法

publicvoidwindowClosing()//关闭窗体

publicvoidsave//保存文件方法

.内部类类名:

KeyEvents

实现菜单的事件的响应功能

继承的父类:

KeyAdapter

成员方法:

actionPerformed()、keyPressed()

(2)用户自定义类与Java类的继承关系图如下:

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

(3)类中成员及作用

Service类成员:

Stringdata;

//接收数据

BufferedReaderinputs;

//读取数据

PrintStreamoutputs;

//输出数据

Socketclient;

//定义套接字

Client类成员:

//接收数据

Socketclient=null;

//定义套接字

BufferedReaderinputs=null;

BufferedReaderkey=null;

//缓冲数据

PrintStreamoutputs=null;

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

(1)运行效果图

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

图4游戏效果图

(2)存在的问题

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

三、项目实现

一) 

程序用到的类库简介

(1)Java的抽象窗口工具集AWT(AbstractWindowToolkit)中包含了很多的类来支持GUI的设计,使得用户和程序可以非常方便地进行交互。

java.awt包中包含Component、Panel、Frame、Applet、Container、Button等许多常用的类。

(2)Swing类库提供一组“轻量级”(全部是Java语言)组件,尽量让这些组件在所有平台上的工作方式都相同。

而javax.swing.event则供Swing组件触发的事件使用。

(3)此外,程序还用到了部分applet、net、io、util类。

二)游戏主程序设计

主程序PigPanel用到两个类:

Die和PairOfDice,均为已设计类。

Die类主要实现出招过程,PairOfDice过程主要返回游戏规定的得分情况,PigPanel使用这两个类,并产生用户交互界面,由用户操作实现出招、得分、等步骤。

三)主界面PigPanel类

1. 

成员变量

restart

 

Jbutton

对本次游戏数据进行清零

get

JButton

 

模拟出招

pause

获得当前得分的点数

pod

PairOfDice

声明类以获得分点数

2.成员变量

info

String

储存读取的信息

ta

JTextArea

显示文字

四)具体实现

首先建立一个Test类,如下:

importjava.awt.Color;

importjava.awt.Image;

importjava.awt.event.ActionEvent;

importjava.awt.event.ActionListener;

importjavax.swing.AbstractButton;

importjavax.swing.ImageIcon;

importjavax.swing.JButton;

importjavax.swing.JFrame;

importjavax.swing.JLabel;

importjavax.swing.JOptionPane;

importjavax.swing.JPanel;

publicclassTestextendsJFrame{

JLabeljl,jl1;

finalJLabeljl2,jl3;

JLabeljl4;

publicStringperson;

publicStringm;

intj;

inti;

finalString[]arr=newString[3];

publicvoidWin(Stringperson){

arr[0]="

石头"

;

arr[1]="

剪刀"

arr[2]="

布"

person=arr[j];

i=(int)(Math.random()*3);

Stringc=arr[i];

//判断输赢

if(c.equals(person)){

jl4.setText("

平手"

);

}elseif(c.equals("

)&

&

person.equals("

)||c.equals("

)&

)){

jl4.setText("

你赢了"

}else{

你输了"

}

}

publicTest(){

JFramejf=newJFrame();

this.setSize(400,300);

this.setTitle("

猜拳游戏"

this.setLayout(null);

jl=newJLabel("

电脑出的是:

"

jl.setBounds(50,50,100,50);

this.add(jl);

jl1=newJLabel("

你出的是:

jl1.setBounds(50,120,100,50);

this.add(jl1);

//电脑的出的拳标签

jl2=newJLabel();

jl2.setBounds(150,50,100,50);

this.add(jl2);

//我出的拳的标签

jl3=newJLabel();

jl3.setBounds(150,120,100,60);

this.add(jl3);

jl4=newJLabel("

jl4.setBounds(150,200,100,50);

this.add(jl4);

//按钮

finalJButtonbtn=newJButton("

btn.setBounds(280,50,60,40);

this.add(btn);

finalJButtonbtn1=newJButton("

btn1.setBounds(280,105,60,40);

this.add(btn1);

finalJButtonbtn2=newJButton("

btn2.setBounds(280,160,60,40);

this.add(btn2);

//按钮事件监听

btn.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEventarg0){

//如果你鼠标点击的是石头按钮

j=0;

Stringb=btn.getActionCommand();

jl3.setText(b);

jl3.setIcon(newImageIcon(MyImg.class.getResource(j+"

.jpg"

)));

Win(person);

Test.this.jl2.setIcon(newImageIcon(MyImg.class.getResource(i+"

Test.this.jl2.setText(arr[i]);

System.out.println(arr[i]);

}

});

btn1.addActionListener(newActionListener(){

j=1;

Stringb1=btn1.getActionCommand();

jl3.setText(b1);

//System.out.println(b);

btn2.addActionListener(newActionListener(){

j=2;

Stringb2=btn2.getActionCommand();

jl3.setText(b2);

this.setVisible(true);

this.setDefaultCloseOperation(EXIT_ON_CLOSE);

this.setLocationRelativeTo(null);

this.setResizable(false);

publicstaticvoidmain(String[]args){

Testt=newTest();

}

再建立一个名为MyImg的类,把下面几张图片放到该类下

图片名称自左向右依次为布、石头、剪刀。

4、运行结果

1)结果截图

图5开始界面

图6游戏过程

图7游戏过程

图8游戏过程

2)系统在调度中经常出现的问题

(1)数据库的连接容易出错

(2)各种数据写入数据库时容易出错

(3)在调度中经常出现数词不匹配

五、心得

个人分析:

程序从最初的黑盒子运行到后来的可视化,经过了一段“设计的思考”:

如何把游戏表现出来、如何让用户最快上手、如何完善游戏。

这属于需求分析的范畴。

在设计中不断体会系统的需求分析需求满足的重要,才会做出好的程序。

在程序实现的过程中,遇到的困难也不少。

不提编写的小错误,有所学的知识不够用的尴尬,有用户界面的多媒体实现的难处,不一而足。

于是我通过不断的学习和纠正错误,得到了最后的源程序。

后来是课程设计,并且要做好各个环节的分析,用语言表达出来。

这相当有难度。

也许在此之前已经把程序脱个精光,但是要把各个环节拆开并且详细描述就仿佛要把程序继续脱。

当然最终是“脱”出来了,也许还不尽如人意,但已能大致表达程序设计的思想了。

虽然提交时间推延到了最后,但是我仍然感觉时间相对紧张(思想紧张?

),所以难免出现不足之处,有可完善的,也有个人能力之外的。

已知的列举如下:

1.出招过程未能表现;

2.没有开始菜单以及结束菜单;

3.不能由键盘控制;

4.在最大化窗口后出现部分界面不能显示;

5.界面还可更加完善;

6.应更多学习成熟游戏的优点,改善游戏环境;

7.编程还未能做到完全模块化,这是在课程设计中发现的;

六、总结语:

作为率先推广面向对象思想的语言,java却不是革命性的东西,所有现有的java的思想都是继承自其他的语言和技术,没有什么革命的地方。

但是java在真正推动面向对象编程思想方面是功不可没的。

使用java编程,你无需考虑到向后兼容什么语言的问题,它是重新建立的语言,你在掌握这门语言之前,你必须将自己的编程思想由过程编程彻底转向面向对象编程,因为每个java程序,本身就是一个类,你编写任何java程序,你都不自觉的在构造一个对象模板,没有第二条道路,只能是面向对象编程。

相对于另一门面向对象的语言C++而言,java在面向对象的贯彻方面要比C++彻底。

有人说“C++是打着面向对象的幌子,干着过程编程的勾当”或许不是言过其辞,C++继承了C的面向过程的一些特性,而java几乎都用了面向对象的思想来实现程序。

但是无论是c++还是java都有可能走过程编程的老路,java降低的过程编写的可能性,但是如果你没有具备面向对象的编程思想,你还是可能走面向过程的老路的。

程序中生成了几个对象,均为较简单的对象,而却难免会步入面向过程的老路,但这看似是却是难免的:

实现游戏规则,就要把过程写出来。

理解课程设计如果想要做好,绝不是一朝一夕的事。

本次毕业设计的每一个阶段:

系统分析、总体设计、编码实现、调试与测试,都是我在不断学习的情况下完成的。

而在这些过程中不断体会软件设计的各个步骤、各个环节,又转到不断学习中去。

java的学习是要不断把所学和所用结合的,一次课程设计可以体会到知识的不足,而后补充所需的知识,再进行实践,再发现不足,如此不断,才能慢慢体会这门语言的精髓。

是故,本次课程设计带给我的不仅仅是为未来打基础这么简单的收获,更多的是一种认识。

小至一门课程、一门语言,大至一门专业、一段人生,若不是热情主动刻苦地学习,将一无所获。

七、参考文献

JAVA开发实战宝典--------编著:

李钟蔚出版社:

清华大学出版社

JAVA面向对象编程--------编著:

孙卫琴出版社:

电子工业出版社

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1