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

Project 1: 斗兽棋

29c3bddfef3ad40e042d69d764369b01.png

项目目标

本项目中,同学们需要使用 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 中的数据。

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

地图输出

地图输出样例:

3560c043a933d785fb8e6c75567532ce.png

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

地图输出规则:

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

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

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

地图对齐:

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

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

48a451ae30ed1bbb8ea24650fce8f4ac.png

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

地图对齐方式:

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

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

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

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

举例:

地图最左上角的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'

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

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

样例:

c4587c4dab531eef2d2d2b3e5527364b.png

三、游戏功能

帮助

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

样例:

71c998f4fc84dc77b1d9e02e021f42c1.png

退出

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

重新开始

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

悔棋

玩家可以输入undo来悔棋。

样例:

753386337b4e4244da41558f3e3714f9.png

取消悔棋

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

样例 (接上图):

6e91bcc3b416c6ed8628ab49d97186ba.png

项目评分

本项目满分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,请确保你的程序能正常运行。

抄袭惩罚

严禁任何形式的抄袭。

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值