Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

java-a/project2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

5 Commits

Repository files navigation

Project 2: 斗兽棋

项目目标

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

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

基本要求

重构代码

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

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

  1. 单个方法的长度不应超过 300 行(如有特殊情况可向助教提出)。
  2. 方法名和变量名命名得当。
  3. 方法和类的作用与意义清晰明确。
  4. 逻辑和界面分开设计,不要把他们混着写在一个很大的类里

面向对象设计

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

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

  1. 类名、类的意义和作用。
  2. 类的父类、子类和接口,以及这么设计的理由。(如果有)
  3. 类的构造函数、可见域和可见方法以及它们的作用。(最主要的一点,体现封装的概念)
  4. 类的私有域及其作用。(可以只列出关键的几个)
  5. 类的私有方法。(不一定需要)
  6. 其他有必要提及的内容,比如和其他某个类之间的联系。

第三次视频 中的 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.pngMap2.pngMap3.png。同学们根据自己的界面需要选取其中一张,或在其基础上修改,或自己设计一张。

动物图片

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

动物移动

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

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

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

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

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

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

游戏胜利

胜利条件判断与 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 界面

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

使用游戏引擎

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

评分标准

  1. 代码风格:10 分
  2. 面向对象设计:20 分
  3. 图形化界面:40 分
  4. 拓展功能:15 分
  5. 设计文档:7 分
  6. 用户手册:4 分
  7. 面试情况: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,请确保你的程序能正常运行。

抄袭惩罚

严禁任何形式的抄袭。

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

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

About

基于图形化的进阶版斗兽棋

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

AltStyle によって変換されたページ (->オリジナル) /