做个课设做的我人间失格,写了一晚上没保存,真是哭死
一、目的与要求
(一)、实验目的
掌握Java语言与系统设计的基本思路和方法。
利用所学的基本知识和技能,解决简单的Java语言与系统设计问题。
(二)、实验要求
学习Java界面开发基础知识。利用所学到的Java编程知识和编程技巧,设 计一个实际的应用软件,初步认识软件设计的基本方法,提高进行工程设计 的基本技能及分析、解决实际问题的能力,为后续课程和以后的工程实践打 下良好的基础。
(三)、实验题目
题:用Java编程开发“六级单词强化记忆”游戏
(0)在网上下载英语六级词汇表,中英文对应。保存在服务器端,服 务器 可以让1个客户端连入。客户端初始分数为10分。
(1)功能2:根据英文选择中文。服务器随机选出一个英文单词,发给客户端显示。该英文单词,从界面顶端落下。界面底端出现ABCD四个中文选项,其中一个正确;客户端输入选项,提交。规则:在英文单词描述掉到底端之前,提交正确,该客户端增加1分,进入下一局;提交错误的,该客户端扣2分,进入下一局;在掉到底端前不回答,扣1分,进入下一局。进入下一局之前,若回答正确,客户端显示“恭喜回答正确”;回答错误,客户端显示“回答错误,答案是XXX”;没回答,客户端显示“您没有回答,正确答案是XXX”。用户分数扣到0分,则游戏输掉,退出。注:此项考察多线程、界面开发、网络编程、字符串处理。
(2)功能3:错词保存。如果一个单词,在功能1或2中,被用户答对,将其保存在“已掌握单词.txt”中;如果一个单词,在功能1或2中,答错或没有答,则保存在“未掌握单词.txt”中(标注是答错还是没答),用户可以打开复习。对于客户端,“已掌握单词.txt”和“未掌握单词.txt”,保存在本地。注:此项考察多线程、界面开发、IO处理。
二、操作环境
硬件: 华硕天选2
软件:eclipse22-09和jdk17
三、实验内容
(一)、服务端的Server类
(1)Server的构造函数
设置“服务器端”为窗口标题,设置好界面,具体见源码。
(2)run函数
接收客户端发来的消息,判断:如果读入的数据为“start”便启动readwordFile函数;如果读入的数据不为“0”,也启动readwordFile函数;当读入的数据为“0”,向客户端发送“0”;如果读入的数据为“end”,则让静态函数CanDo变为flase,跳出读入数据的循环,并关闭服务器。
(3)readwordFile函数
读取存取六级单词文档中的单词,随机抽取一个单词及其配套的解释和随机另外三个单词的解释,并将其以空格分开后发送到客户端。
(二)、客户端的MainFrame类
(1)MainFrame的构造函数
设置界面,放置“进入游戏”、“未掌握单词”、“已掌握单词”和“退出”四个按钮,另放置“六级单词强化记忆”这个标签,具体见源码。
(2)actionPerfromed函数
按钮跳转功能:如果得到Start_Game,就开始GamePrepare类并关闭当前页面;如果得到Leave_Out,就退出游戏;如果得到Unlearn_Word,就开始新的未掌握单词这个页面并关闭当前界面;如果得到Learn_Word,就开始新的已掌握单词这个页面并关闭当前界面。
(三)、客户端的GamePrepare类
(1)GamePrepare的构造函数
设置界面,放置“开始游戏”、“设置”和“返回”这三个按钮在界面的左边,另放置一段我很喜欢的话在界面的右边,具体见源码。
(2)actionPerfromed函数
按钮跳转功能:如果得到start,就开始GameFrame类并关闭当前页面;如果得到Back,就关闭当前页面并新开一个MainFrame类;如果得到Setting,就开始新的设置页面并关闭当前界面。
(四)客户端的Setting类
Setting类的构造函数
设置页面,页面上方出现“自定义设置”标题,中间有“每局单词个数”和“单词下落秒数”这两个文本框,最下面设置“返回”和“应用”这两个按钮。
按钮判断:当点击“返回”时,重新开启GamePrepare类并关闭当前页面;当点击“应用”时,重新开启GamePrepare类,关闭当前页面,读取文本框里面输入的内容,并将读取的内容存入静态变量WordNums和DownTime中。
(五)、客户端的GameFrame类
(1)GameFrame的构造函数
设置面板,将面板上的“当前生命值”、“请操作键盘按钮答题”、掉下来的单词,跳出的提示和四个选项的初始位置及样式确定好,并向服务端输入“start,最后开始timer线程。
(2)checkFail函数
更改当前生命值和提示,判断如果生命值小于0,就停止timer线程,同时将静态变量re变为1,向服务端输入“end”,跳出弹窗“生命值耗尽,游戏结束”,点击确认后开启Review类并将当前关闭当前页面。
(3)init函数
更改当前生命值和提示,将接收服务端的信息根据空格分割成单词、正确答案和三个选项。随机抽取一个数,当数为0时,设置A为正确答案;当数为1,设置B为正确答案;当数为2时,设置C为正确答案;当数为3时,设置D为正确答案。同时将单词赋值给静态变量word,将解释赋值给静态变量ans,将正确选项赋值给Opt。
(4)actionPerformed函数
判断如果掉下来的单词的Y轴的值大于页面的Y值,像未掌握单词.txt中存入这个单词及其意思和一个数“0”。同时,静态函数life生命值减一,掉落的单词wordnum,也就是Setting.WordNums的值减少一,调用checkFail函数判断是否已经失败。最后,将掉落单词的Y值加10。
(5)run函数
不停接收服务端发来的消息,将消息赋值给静态变量getword。判断接收到消息,如果消息不为“0”,表示没结束程序,,启动init函数,同时判断静态变量wordnum和生命值life是否是为0,当wordnum为0且life大于0的时候,启动checkfile函数,同时停止timer线程,这时候游戏已经成功,弹出“恭喜你游戏赢了”,同时静态变量re为1给服务端发送“0”,启动复习Review界面。
(6)keyPressed函数
得到键盘上的按钮消息,并与Opt相比较,判断是否正确:如果正确,wordnum减一,同时生命值life加2,改变提示的信息为“恭喜回答正确”,再将这个单词写入“已掌握单词.txt”中,给服务端发送life的值;如果错误,wordnum减一,生命值life减2,改变提示信息为“回答错误,正确答案是”+这个单词,向“未掌握单词.txt”中写入,判断是否失败,并向服务端发送生命值。
(7)writeGottonFile函数
向“已掌握单词”中写入单词,具体实现见代码。
(8)WriteUnGottonFile函数
向“未掌握单词”中写入单词,如果参数为1,就是没答对的单词,如果参数为0,就是未答的单词。
(六)、Review类
(1)Review类的构造函数
设置页面和页面上的“退出”、“已掌握单词”和“未掌握单词”这三个按钮和一句我喜欢的话,具体实现见代码。
(2)actionPerformed函数
按钮判断:当点击退出时,设置程序退出;当点击“未掌握单词”,设置当前页面消失同时新开UnGottonWord类;当点击“已掌握单词”,设置当前页面消失同时新开GottonWord类。
(七)GottonWord类
(1)GottonWord类的构造函数
设置页面上的标题“已掌握单词”,同时在中间放一个可滚动的文本框来放置单词和其意思,最下面放置一个返回按钮,具体见代码。
(2)actionPerform函数
判断静态变量re如果为1,就证明已经结束了游戏,返回的时候仍然进入这个复习页面;如果静态变量为0,则返回主页面。
(八)UnGottonWord类
(1)UnGottonWord类的构造函数
设置页面上的标题“未掌握单词”,同时在中间放一个可滚动的文本框来放置单词、对应的意思和答错的原因,最下面放置一个返回按钮,具体见代码。
(2)actionPerform函数
判断静态变量re如果为1,就证明已经结束了游戏,返回的时候仍然进入这个复习页面;如果静态变量为0,则返回主页面。
四、实验结果
(1)开启服务端
(2)开启客户端
1、点击“未掌握单词”
2、点击返回
3、点击“已掌握单词”
4、点击返回
5、点击“进入游戏”
6、点击设置
7、点击应用
8、点击开始游戏
9、失败,点击确认
10、点击“未掌握单词”
11、点击“返回”
12、点击“已掌握单词”
13、点击返回
14、点击“退出”结束游戏
(三)、思维导图
五、源代码
源代码可以在这里获取