斗兽棋 java_GitHub - java-a/project2: 基于图形化的进阶版斗兽棋

Project 2: 斗兽棋

项目目标

在 Project 1 中,同学们实现了一个命令行界面的斗兽棋小游戏。Project 2 延续 Project1 的内容,通过 GUI 扩展和部分进阶功能,使我们这个游戏更具娱乐性和可玩性。

我们将 Project2 中需要实现的内容分为逻辑和界面。在 Project 1 中,同学们基本上已经完成了大部分的逻辑操作,这次只需要对一部分原来没有实现和对未完善的部分进行完善,着重重构代码和使用面向对象设计的部分。图形化界面推荐大家仿造 野兽争霸斗兽棋 中的单机对战部分,其素材在 audio 和 pic 文件夹中给出。大家也可以自由发挥,打造属于你自己的斗兽棋,只要展示清晰、明了即可。

基本要求

重构代码

大部分同学的 PJ1 代码可以通过重构来提高代码质量。

PJ2 对代码风格有以下三点具体要求:

单个方法的长度不应超过 300 行(如有特殊情况可向助教提出)。

方法名和变量名命名得当。

方法和类的作用与意义清晰明确。

逻辑和界面分开设计,不要把他们混着写在一个很大的类里

面向对象设计

使用面向对象的思想来设计代码结构是 PJ2 的重点要求。在同学们动手写 PJ2 代码之前,助教建议同学们根据所学知识,设计好 PJ2 基础功能的每个类。

推荐同学们将自己设计的 逻辑部分 中每个类以文档的方式记录下来。内容包括:

类名、类的意义和作用。

类的父类、子类和接口,以及这么设计的理由。(如果有)

类的构造函数、可见域和可见方法以及它们的作用。(最主要的一点,体现封装的概念)

类的私有域及其作用。(可以只列出关键的几个)

类的私有方法。(不一定需要)

其他有必要提及的内容,比如和其他某个类之间的联系。

以 第三次视频 中的 GameHistory 类为例:

类名:GameHistory

意义和作用:记录所有游戏历史,并提供悔棋、取消悔棋功能。

(没有父类和子类,也不实现特定接口)

类的构造方法:

1. public GameHistory();

作用:初始化所有私有域。

类的可见域:无

类的可见方法:

1. public void addRecord(String[][] board);

作用:复制board并添加入历史记录中。

2. public void undo(String[][] board);

作用:悔棋,并将悔棋后的棋盘写入board中。

3. public void redo(String[][] board);

作用:悔棋,并将取消悔棋后的棋盘写入board中。

4. public void restart();

作用:重新开始游戏时调用,清空并重新初始化历史纪录。

类的私有域:

1. private String[][][] boardHistory;

作用:记录所有的游戏历史。

2. private int currentStep;

作用:记录当前游戏地图在boardHistory中的位置。

3. private int lastStep;

作用:记录boardHistory中最后一步的位置。

类的私有方法:

视频中无,但是可以有一个copyBoard方法,即出现过三次的两层for循环可以提取出一个 private void copyBorad(String[][] from, String[][] to); 方法,减少代码重复性。

像这样的一份文档可以在写代码时提供很大帮助,并且其中的文字大多可以作为注释、文档的材料。

初步设计完后,同学们可以将自己的设计与助教和其他同学一起讨论,看看设计是否合理,有什么需要改进的地方。

在实际写代码的过程中,同学们很可能要经常修改自己的设计,希望同学们在修改设计的时候一并修改此文档。

图形化界面

图形化界面是 PJ2 相比 PJ1 最明显的升级,也是 PJ2 中最有趣的部分。

图形化界面部分自由度较高,同学们可以在此充分发挥自己的想象力和创造力。

游戏地图

游戏地图为 pic 目录下的 Map1.png、Map2.png 和 Map3.png。同学们根据自己的界面需要选取其中一张,或在其基础上修改,或自己设计一张。

动物图片

动物图片在 pic 目录下的 animals 目录下,并分为左右两侧。相比我们参考的 Flash 版本,助教没有提供动物图片的“红色”版本,同学们可以自由发挥如何标识动物是否处于可以操作的状态(不标识也可以,但要在明确显示现在轮到哪一方移动)。

动物移动

动物移动使用鼠标控制,与参考程序相同,点击一个动物,再点击移动至某个地块。此处请注意合法性判断。

如果有同学想对动物移动的操作方法进行改变,请联系助教。请不要通过键盘输入 1w、4d 等字符串来进行移动,会被扣分。

基础功能中,不要求点击动物后显示其可以移动的地块,这个功能作为拓展功能的可选项。

帮助、重新开始、退出功能

这三个功能要求实现,具体实现方式由同学们自己定义,合理即可。

同学们可以创建菜单栏,将这些功能放入菜单中,也可以设置几个按钮,放在合适的地方。

游戏胜利

胜利条件判断与 PJ1 相同。

胜利提示或胜利界面由同学们自己定义,合理即可。

悔棋、取消悔棋

考虑到游戏的正常逻辑,取消悔棋功能可以不在图形化界面中提供,但悔棋功能必须实现。

悔棋功能不再要求只能悔棋一步,同学们可以按照自己对游戏悔棋功能的理解提供悔棋功能。可以悔棋一步,可以悔棋两步,可以由一方提出并等待对面同意,合理即可。

拓展功能

PJ2 要求同学们实现两个拓展功能。拓展功能没有硬性要求,同学们可以自由发挥,但注意不要跑偏太远。

拓展功能部分共 15 分。每个拓展功能占 4 分,排名分占 3 分。

助教在评分时,会对每个拓展功能作出 0 - 5 分的评价,获得 4 分及以上,该拓展功能即可获得满分 4 分。

排名分则是同学们需要冲刺的分数,助教会将同学们的三个拓展功能分(5 分制)相加,全班排名前 5 的同学将获得 3 分满分,排名 6 - 20 名的同学将获得 2 分,其余同学获得 1 分。

注:若实现多于 3 个拓展功能,功能部分分数不超过 12 分。

推荐的拓展功能

存档、读档功能

玩家可以将目前的游戏状态存入文件中,并可以通过读取文件来继续之前的游戏。

深度挖掘:读取后的游戏能否支持悔棋?

计时、超时功能

计时、超时功能可以包括:游戏进行的总时长计时、玩家单步操作思考时长限制、玩家思考总时长限制等,并给予恰当的超时惩罚。

智能提示

例如:

当点击一个动物时,显示其可以移动的位置。

当己方一个动物处于危险中(比如对方老鼠走到了己方大象旁边)时给予提示。

好看的界面

自由发挥~ 展现你的设计与创意~

注意:纯粹的美工与设计原则上不能取得大于 4 分的成绩,需要有代码上的难度才能取得最高的分数,比如结合代码和美术素材实现动画效果等。

音效

助教给的资源中包括了音效,尝试将其应用到游戏中吧~

注:这个功能比较难深挖,所以取得高分可能有些困难,但拿到4分会比较容易。

科学的Git使用

Git 的使用远远不止上传 GitHub。在开发过程中,合理使用 Git 进行版本控制,养成良好的开发习惯。

Android版斗兽棋

此项适用于参与三叶草项目的同学。

Android版为拓展功能,JavaFX版本的斗兽棋必须实现。

不推荐的拓展功能

这部分不推荐的原因主要是因为难度过高,同学们容易花太多时间在这些拓展功能上。若完成,该项拓展分给满分。

网络对战功能

较难。如果是通过手动输入ip的方式,还稍简单一些。但如果想实现像 doushouqi.net 这样的网络对战功能,难度过高,非常不推荐。

AI 功能

Artificial Intelligence,难度较高,而且网上基本上没有关于如何写斗兽棋 AI 的文章,所以不推荐做这个功能。

3D 界面

不仅难,而且麻烦,不推荐。

使用游戏引擎

学习成本相当高,有时间且技术水平高的同学谨慎尝试。

评分标准

代码风格:10 分

面向对象设计:20 分

图形化界面:40 分

拓展功能:15 分

设计文档:7 分

用户手册:4 分

面试情况:4 分

提交与面试

提交截止时间

本次课程项目提交截止时间为 2017 年 1 月 3 日 23:59。

建议同学们在截止时间前一周就将项目基本完成,以防来不及完成,或者来不及修正突然发现的 bug 。

提交方式

请提交源代码、文档。源代码应以项目的形式提交。如有必要可以提交其他材料。

在截止时间之前将提交材料压缩并上传到:

ftp://10.142.141.33/classes/16/161 程序设计(戴开宇)/WORK_UPLOAD/PJ2

压缩包请重命名为:学号 + 姓名。 如 16302010001陈雷远.rar,16302010002李云帆.zip。

如果发现之前提交的文件有问题,可以重新上传压缩包。ftp不允许删除或者覆盖文件,需要上传一个新的压缩包,命名格式为:学号 + 姓名 + 次数, 如16302010002李云帆2.zip。

迟交惩罚

每迟交一天,最终得分扣除20%。

注:如果提交多次,以面试时选择的提交文件的提交时间为准。评分亦以此文件为准。

面试注意事项

本次课程项目面试时间为2016年 1月 4日 10:00 - 18:00,地点为机房。如有调整会提前通知。

原则上面试时不允许现场Debug,请确保你的程序能正常运行。

抄袭惩罚

严禁任何形式的抄袭。

助教将检查每个同学的代码、文档等材料,如有发现抄袭现象,将严肃处理。

抄袭同学零分处理。被抄袭同学将视情况作出惩罚。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值