Java课程设计报告石头剪子布猜拳人机对战
更新时间:2023-07-21 12:06:01 阅读量: 实用文档 文档下载
- Java课程设计报告推荐度:
- 相关推荐
测试可运行
大 连 科 技 学 院
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); }}
正在阅读:
大专生申请国家助学贷款流程图08-05
报表审核公式说明09-09
神奇的趵突泉作文400字06-21
怎样看懂强电施工图 王晓锋03-07
第六章财产损失保险09-06
一张照片作文450字07-06
建设工程合同(含FIDIC)条款03-14
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 剪子
- 猜拳
- 人机
- 石头
- 课程
- 报告
- 设计
- Java
- 高中生物学整体性教学的课堂初探()
- 新人教版九年级上学期数学第一次月考试卷(1)
- 单位集资房指标转让合同
- 第九章 UG NX6.0注塑模具设计
- 高级密码学数论初步
- 2009届高考英语二轮复习完形填空试题库
- 企业培训计划(非常经典)
- 职务犯罪逮捕决定权上提一级的调查报告——厦门市检察机关执行情况调研分析
- 小学体育田径课优秀教案课程
- 2011年山东济宁中考英语试题
- 建筑施工安全检查标准复习题(JGJ59-2011)-含答案_看图王
- 排球正面双手垫球公开课教案
- 基于MC51单片机的直流电机PWM调速系统
- 西南财经大学金融学院考研导师缪名杨
- 回交自交系群体4对主基因加多基因混合遗传模型分离分析方法的建立
- 麦积区水务局效能风暴
- 首都经济贸易大学金融硕士考研就业方向情况介绍
- 经济补偿金核算表
- 企业研究开发费用专帐操作指南
- 四川民族地区经济社会可持续发展的路径选择与政策支持