Project 1: 斗兽棋

项目目标

本项目中,同学们需要使用 Java 编程语言,结合课堂知识、lab 内容,实现一个简单的、可以在命令行下玩的斗兽棋游戏,并按要求编写一份开发文档,介绍你的实现方式、开发思路等内容。

项目参考

游戏参考:

斗兽棋是一款小众益智游戏,游戏规则在不同版本中各有差别。

在本项目中,我们使用野兽争霸斗兽棋的游戏规则(链接:www.doushouqi.net )。

对游戏不熟悉的同学可以在网页中进行几盘游戏来熟悉规则。

Project 1 样例:

Project 1 只要求完成命令行版的斗兽棋。

Project 2 将完成图形化界面。

在 Project 1 中,同学们需要完成的项目样例是 example 文件夹下的 Jungle.jar 。

运行方式:

下载至自己电脑中。

在 example 文件夹中打开命令行。

运行命令 java -jar Jungle.jar 。

项目实现

一、地图的读取和输出

斗兽棋的基本要素是地图。我们首先需要完成地图的读取,并在命令行中输出地图。

地图读取

斗兽棋的地图横七列,纵九行。地图分为地形地图和动物地图。

我们通过读取地图文件的方式来载入地图。

地形地图(tile.txt):

000000000

000111000

200111004

320000045

200111004

000111000

000000000

数字

0

1

2

3

4

5

含义

空地

小河

左方陷阱

左方兽穴

右方陷阱

右方兽穴

动物地图(animal.txt):

动物地图记录了动物的初始位置。

608000107

020000040

003000500

000000000

005000300

040000020

701000806

数字

0

1

2

3

4

5

6

7

8

含义

无动物

地图读取方式:

以地形地图为例,我们将 tile.txt 放到项目根目录下(在 IntelliJ IDEA 中,放到与 src 同级的目录下)。

首先,使用 Scanner 类来读取文件:

Scanner scanner = new Scanner(new File("tile.txt"));

然后,使用 Scanner 的 nextLine() 方法获取文件内容:

String firstLine = scanner.nextLine();

执行完这行语句后,firstLine 的值为字符串 "000000000" ,即地形地图的第一行。

然后,我们再次使用 nextLine() 方法:

String secondLine = scanner.nextLine();

这样我们就得到了地形地图的第二行,secondLine 的值是字符串 "000111000" 。

以此类推,我们可以获取到 tile.txt 中的所有数据。使用相同的方法可以再获得 animal.txt 中的数据。

最后,根据得到的数据,我们可以将地图输出到命令行中。

地图输出

地图输出样例:

注:图片截取自 IntelliJ ,推荐同学们在写代码时使用 IntelliJ 编写、运行程序。

地图输出规则:

地形输出:空地输出空格,小河输出"水",陷阱输出"陷",兽穴输出"家"。

动物输出:动物输出名字和数字,左方动物的数字在左侧,右方动物的数字在右侧。

如果一个位置上有动物,输出动物信息,不输出地形信息。

地图对齐:

由于同时使用了中文、数字和空格,地图的对齐并没有那么容易。

如果没有正确对齐,地图会变得奇怪,比如这样:

因此,正确对齐地图是必要的。

地图对齐方式:

每个地图上的格子,无论是动物还是地形,我们的输出都采用相同的格式:

半角字符 + 全角字符 + 半角字符

半角字符:半角字符一般包括英文字母、英文符号、数字和空格。在本项目中,我们的半角字符是空格或者数字。

全角字符:中文字符一般都是全角字符。

举例:

地图最左上角的6虎,是由半角字符6 + 全角字符虎 + 半角字符(空格)组成的。

地图中的水,是由半角空格 + 全角字符水 + 半角空格组成的。

地图中的空地,是由半角空格 + 全角空格 + 半角空格组成的。

我们平时按空格打出的都是半角空格,关于全角空格,参考 全角空格_百度百科 。

二、游戏逻辑

游戏规则

斗兽棋的棋盘

斗兽棋的棋盘横七列,纵九行,棋子放在格子中。双方底在线各有三个陷阱(作品字排)和一个兽穴(于品字中间)。 棋牌中部有两片水域,称之为小河。

斗兽棋的棋子

斗兽棋棋子共十六个,分为红蓝双方,双方各有八只一样的棋子(下称为:兽 或 动物),按照战斗力强弱排列为:象>狮>虎>豹>狗>狼>猫>鼠。

斗兽棋的走法

游戏开始时,红方先走,然后轮流走棋。每次可走动一只兽,每只兽每次走一方格,除己方兽穴和小河以外,前后左右均可。但是,狮、虎、鼠还有不同走法:

狮虎跳河法:狮虎在小河边时,可以纵横对直跳过小河,且能把小河对岸的敌方较小的兽类吃掉,但是如果对方老鼠在河里,把跳的路线阻隔就不能跳,若对岸是对方比自己战斗力前的兽,也不可以跳过小河;

鼠游过河法:鼠是唯一可以走入小河的兽,走法同陆地上一样,每次走一格,上下左右均可,而且,陆地上的其他兽不可以吃小河中的鼠,小河中的鼠也不能吃陆地上的象,鼠类互吃不受小河影响。

斗兽棋的吃法

斗兽棋吃法分普通吃法和特殊此法,普通吃法是按照兽的战斗力强弱,强者可以吃弱者。

特殊吃法如下:

1、鼠吃象法:八兽的吃法除按照战斗力强弱次序外,惟鼠能吃象,象不能吃鼠。

2、互吃法:凡同类相遇,可互相吃。

3、陷阱:棋盘设陷阱,专为限制敌兽的战斗力(自己的兽,不受限制),敌兽走入陷阱,即失去战斗力,本方的任意兽类都可以吃去陷阱里的兽类。

综合普通吃法和特殊吃法,将斗兽棋此法总结如下:

鼠可以吃象、鼠

猫可以吃猫、鼠;

狼可以吃狼、猫、鼠;

狗可以吃狗、狼、猫、鼠;

豹可以吃豹、狗、狼、猫、鼠;

虎可以吃虎、豹、狗、狼、猫、鼠;

狮可以吃狮、虎、豹、狗、狼、猫、鼠;

象可以吃象、狮、虎、豹、狗、狼、猫;

注:

本项目中,斗兽棋胜负判定只要求完成:

任何一方的兽走入敌方的兽穴就算胜利(自己的兽类不可以走入自己的兽穴);

任何一方的兽被吃光就算失败,对方获胜

任何一方所有活着的兽被对方困住,均不可移动时,就算失败,对方获胜;

本项目不要求做无赖长杀、武松长杀、刷分等斗兽棋违例处理

游戏指令

在命令行中,我们无法使用鼠标来控制,需要通过读取键盘输入来控制动物。

我们使用数字1-8来表示动物,wasd代表上下左右。

数字

1

2

3

4

5

6

7

8

含义

字母

w

a

s

d

含义

向上

向左

向下

向右

举例:

指令

含义

1d

鼠向右走一格

3w

狼向上走一格

6a

虎向左走一格(或向左跳过河)

7s

狮向下走一格(或向下跳过河)

9a

错误指令:9不对应任何动物

2b

错误指令:b不对应任何方向

1sd

错误指令:多余字符 'd'

识别指令之后,根据指令移动动物。

有时动物按照规则可能不能执行指令,这时需要打印出不能执行的原因,让玩家重新输入指令。

样例:

三、游戏功能

帮助

玩家可以在游戏中任何时候输入help查看帮助。

样例:

退出

玩家可以输入exit退出游戏。

重新开始

玩家可以输入restart来重新开始游戏。

悔棋

玩家可以输入undo来悔棋。

样例:

取消悔棋

玩家可以输入redo来取消悔棋。

样例 (接上图):

项目评分

本项目满分100分,包括三个部分:基础部分、进阶部分和综合评价部分。其中,基础部分70分,进阶部分10分,综合评价部分20分。

基础部分

基础部分

分数

游戏地图:游戏能够读取地图并输出初始地图

10

游戏地图:地图输出格式始终正确

5

游戏指令:分辨指令格式的对错

2

游戏指令:正确识别动物移动(攻击)指令

3

游戏功能:帮助、退出

2

游戏功能:重新开始

3

游戏规则:动物不能走出地图边界

3

游戏规则:动物能按照规则移动至相邻空地

3

游戏规则:只有鼠能进出小河

3

游戏规则:只有虎、狮可以跳河

3

游戏规则:敌方鼠在虎、狮跳河路线中时,虎、狮不能跳河

2

游戏规则:己方动物不能进入己方兽穴

2

游戏规则:己方动物不能进入友方单位所在的格子

2

游戏规则:动物按照规则消灭敌方动物

5

游戏规则:动物不允许送死

2

游戏规则:双方轮流走子 (左方先走)

5

胜负判定:任何一方的兽走入敌方的兽穴

3

胜负判定:任何一方的兽被吃光

1

胜负判定:任何一方所有活着的兽被对方困住,均不可移动

1

游戏运行总体正常,符合相关描述,不会异常退出

10

总分

70

进阶部分

进阶部分

分数

游戏功能:悔棋

6

游戏功能:取消悔棋

3

上传项目至GitHub个人仓库

1

总分

10

综合评价部分

综合评价部分

分数

设计文档(包括但不限于程序结构设计与分析,主要函数的功能,简要描述如何使用你的程序,编程中遇到的问题和解决策略)

8

代码风格(包括但不限于命名规范,缩进与换行,代码可读性)

6

面试情况(能否清晰地解释程序结构,能否回答助教的问题等)

5

意见与建议(包括但不限于对PJ1,PJ2,Lab,课堂),可随设计文档一起提交

1

总分

20

项目提交与面试

提交截止时间

本次课程项目提交截止时间为 2016 年 11 月 13 日 23:59。

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

提交方式

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

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

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

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

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

迟交惩罚

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

如:11月14日 00:01 AM 提交,扣除20%,11月16日 11:30 PM 提交,扣除60%。

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

面试注意事项

本次课程项目面试时间为2016年 11月 15日 上午第三四节课,地点为机房,即Lab课组织面试。如有调整会提前通知。

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

抄袭惩罚

严禁任何形式的抄袭。

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

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

斗兽棋 java_GitHub - java-a/project1: 基于命令行的斗兽棋相关推荐

  1. 嗖一下【基于命令行交互的文件搜索工具】实现思路

    目录 一.背景 二.实现功能(todo) 三.效果展示 四.分析 存储文件位置分析 存储文件内容分析 打印文件信息分析 五.实现 六.使用 七.代码实现 八.总结 九.项目测试 一.背景 有时候需要在 ...

  2. java 调用wget_通过命令行执行WGET下载会更快,而通过Java代码执行时会更慢

    我正在使用WGET通过java代码下载文件,这需要大约10分钟才能下载20 MB文件.但是通过命令行执行wget下载,同样的文件以10MbPs的速度在7秒内下载.有人知道为什么吗?我该如何改进我的Ja ...

  3. 计算器四则运算c语言,C语言:基于命令行的四则运算计算器

    题目: C语言:基于命令行的四则运算计算器 功能要求:  四则运算就是包含+.-.*./..(小数点)和数字的运算表达式,例如:3+2.9*(5-6/3)等  能够解释并执行四则运算表达式  能 ...

  4. java 终端窗口是什么,java程序如何打开命令行窗口?java程序怎么运行?

    我们在编写Java程序以后都会在集成开发环境中运行程序,那么java程序如何打开命令行窗口?接下来,我们就来给大家讲解一下java程序打开命令行窗口的方法. 首先我们在命令行运行Java程序需要借助j ...

  5. 树莓派linux界面命令行,Linux/Raspberry Pi下使用基于命令行的网页浏览器

    本文将向你介绍如何在树莓派上安装3个不同的基于文本的网页浏览器.大多数的网页浏览器在小派上运行都有点吃力,要不就是会消耗大量资源,所以一个替代方案就是使用一个基于命令行的网页浏览器. 到目前为止基于文 ...

  6. c语言编程实现二进制计算器,本程序是用纯C语言编的一个基于命令行的四则运算计算器。主要用于计算四则运算表达式的值,同时可以实现四...

    本程序是用纯C语言编的一个基于命令行的四则运算计算器.主要用于计算四则运算表达式的值,同时可以实现四 2016-08-22 0 0 0 暂无评分 其他 1 积分下载 如何获取积分? 本程序是用纯C语言 ...

  7. Redis Gli - 一个基于命令行的 Redis 图形界面客户端

    2019独角兽企业重金招聘Python工程师标准>>> 很久之前在 Github 上发现了一个用 Golang 来实现的命令行图形界面库,一直想用来做点东西. https://git ...

  8. 基于命令行编译打包phonegap for android应用

    也许你习惯了使用Eclipse编译和打包Android应用.不过,对于使用html5+js开发的phonegap应用,本文建议你抛弃Eclipse,改为使用命令行模式,绝对的快速和方便. 一直以来,E ...

  9. java斗地主发牌教学,命令行版的斗地主你玩过没?

    本文适合有 Java 基础知识的人群,跟着本文可使用和快速搭建命令行斗地主项目. 本文作者:HelloGitHub-秦人 HelloGitHub 推出的<讲解开源项目>系列,今天给大家带来 ...

  10. 小猿圈Java学习之通过命令行设置属性值

    Hello大家好,今天小猿圈给大家分享如何进行属性配置文件详情,首先给大家讲如何通过命令行设置属性值nullem;text-align:left">相信使用过一段时间Spring Bo ...

最新文章

  1. Datawhale组队学习周报(第035周)
  2. Activiti7工作流基础
  3. typedef与#define宏区别
  4. Redis:Redis集群模式(Cluster)原理
  5. android recovery 模块知识需求汇总
  6. python读取 application_python PyQt5.QtWidgets.QApplication类(sys.argv)(app应用对象类)...
  7. .NET基础 (03)生成、部署和管理
  8. 产品与市场,究竟哪一个重要
  9. 链表插入功能实现演示
  10. ios category类别的使用
  11. 深入探索android热修复技术原理_打卡活动:技术书籍书单
  12. SQL性能优化(转)
  13. mysql数据库表分区_MySQL数据库之MySQL的分区和分表详解
  14. 无法找到脚本文件 C:/Windows/explorer.exe:574323188.vbs
  15. Base64基本原理
  16. 5.FlashFXP连接失败(连接已拒绝)及530 permission denied(以root用户连接已被客户端关闭)
  17. 最强大脑《智行营救》
  18. palantir_Palantir开源的两个库– Cinch和Sysmon
  19. 大数据Clouder专项技能认证课程:Quick BI企业报表制作
  20. python爬虫入门-环境配置

热门文章

  1. 进阶学习9:ECMAScript——概述、ES2015 / ES6新特性详解
  2. Egret引擎的EUI基础使用教程
  3. oracle双活数据中心建设_两地三中心数据中心和同城双活数据中心的区别?
  4. Perfmon监控Windows进程性能
  5. MySQL数据库:表结构优化
  6. 正则表达式前端js,银行卡号/身份证/姓名号脱敏
  7. 数字化模型是工业PaaS平台的核心
  8. python空气质量提醒代码_【python】全国空气质量分析系统
  9. cpu上干硅脂怎么清理_电脑清灰CPU怎么涂硅脂 导热硅脂涂抹方法教程
  10. IBM SPSS Modeler Social Network Analysis 的介绍和日常应用