java三国杀百度云,GitHub - wzk1015/sanguosha: 文字版三国杀,10000+行java实现

文字三国杀

开发完毕

文字版三国杀,java实现

纯属娱乐项目

by wzk

试玩!

前提条件

系统内安装jdk(版本1.8以上)

GUI运行

git clone或直接下载仓库,使用命令行(windows下可按下win+R输入cmd,mac下打开终端)进入下载目录,运行java -jar sgsgui.jar即可畅玩!

命令行运行

同上,运行java -jar sanguosha.jar,即可命令行运行

自定义!

默认配置下使用全套卡牌+武将标准包,身份根据人数预先设定。在初始化时选择customize,即可自定义扩展包、身份分配、每个玩家可选的武将数量。

更新日志

6.5 初次commit

6.5 增加三尖两刃刀;修改了IO.chooseFromProvided;

6.5 增加丈八蛇矛、贯石斧;增加了useSkillInUsePhase接口(用于出牌阶段主动发动技能)

6.6 增加借刀、南蛮万剑、桃园五谷等锦囊牌;修改了Person.hurt;

6.6 牌堆CardsHeap.init中完成基本牌初始化

6.7 完成了CardsHeap.init中所有牌的初始化,可以玩;修改了过拆、顺牵

6.7 通过测试修复了若干bug,增加若干IO输出;3000行撒花!

6.9 增加了注解技能类Skill及觉醒技、锁定技等(现学现用);开始添加武将:郭嘉荀彧;

6.9 增加了国籍和身份(实际上是因为主公技而不得不加),可以打身份局;增加了刘关张、曹操等武将

6.9 README中增加了更新日志;

6.10 增加了马超黄忠赵云(五虎将集齐)、诸葛亮黄月英(标包蜀国完成);增加了牌数检查;修复了小bug

6.10 增加了司马懿夏侯惇;修复了死亡时未弃置所有牌的bug;更正了黄月英的性别;4000行打卡✌️

6.11 增加了许褚张辽甄姬(标包魏国完成);对losecard和throwcard做小改动;修复了判定牌未进入弃牌堆的问题

6.11 武将类实现的PlayerIO接口,重构IO调用;增加孙权;增加限定技注解类

6.11 增加武器使用前询问;修改hurt参数(方便奸雄多张牌);修改闪电;修正弃置装备牌数不匹配的问题;修正裸衣驱虎制衡

6.12 增加吕蒙黄盖甘宁;Person类属性全部移至Attributes类

6.12 增加周瑜大乔孙尚香陆逊吕布貂蝉华佗袁术(标包完成!!!);修改judgeCard增加thisCard属性;

6.14 增加通过注解值打印技能列表的功能(学会反射√);增加风包曹仁魏延夏侯渊周泰;5000行打卡✌️

6.14 增加小乔张角于吉、神吕蒙神关羽,风包完成!

6.15 完成火包(除神将):典韦卧龙庞统袁绍庞德颜良文丑太史慈;6000行鼓掌

6.16 增加火包神将神周瑜、神诸葛亮

6.17 完成林包、神曹操神吕布;Person类与行动无关的方法全部移动至Attributes;GameManager与游戏运行无关的方法全部移动至具体卡牌或PlayerIO;修正无双;7000行!

6.18 增加姜维刘禅邓艾左慈;提取拆顺行为移动至PlayerIO;增加醒后技注解类

6.18 移动GameManager的askTarget至Card;PeoplePool中增加风火林山包武将;修改README

6.18 完成山包;8000行!

6.19 增加神司马神赵云;神话再临完成!

6.19 修复了神将的若干bug;武将和卡牌增加了help接口

6.19 全部代码移动至sanguosha包下;修复了chooseManyFromProvided

6.20 将大部分武器的逻辑移动至武器内部;修复了借刀、强袭、帷幕等若干bug

6.26 增加发行版jar包;增加对ctrl+d中断的响应;修改showHelp

6.28 增加GUI!swing现学现用~

6.28 修改IO输出方式(公开、私有);修复若干bug

6.29 增加游戏人数、武将包自定义;完善了全局状态信息;endWithError修改为panic

7.1 10000行!!!重构IO;实现化身伪帝;完善help;修改GUI

7.2 **基本完成!**增加GUI启动页面,完善help,将左慈技能改为接口

7.2 修复了图片路径问题;修改README

bug list:

TODO list:

waitlist:

增加国战 (maybe not)

设计

管理类

GameManager

负责游戏宏观运行(每名玩家依次出牌、判定胜负条件、角色死亡等)

提供涉及到多个玩家的调用接口

铁索连环伤害

拼点

查询玩家之间的距离

如果将整个游戏理解为操作系统,那么GameManager相当于内核,提供系统调用帮助卡牌和武将完成功能。

IO

封装系统IO接口,例如输出卡牌信息、获得输入内容

Utils

提供常用工具包,例如断言、深拷贝、随机整数等

牌堆类

CardsHeap

游戏开始时初始化牌堆,分配手牌

负责牌堆和弃牌的管理,提供摸牌、弃牌与判定接口

牌堆为空时自动洗牌

为诸葛亮、神吕蒙等提供查看牌堆与操控牌堆的接口

PeoplePool

游戏开始时初始化武将牌,分配武将

游戏开始时为玩家分配身份

为左慈提供分配化身接口

人员类

SkillLauncher

接口,设定了一些技能发动时机的方法,默认均为空函数体,Person类实现该接口。若武将需要设置技能,可重写方法。

PlayerIO

接口,提供用户选择玩家(由GameManager代为完成)、选择选项、选择卡牌的接口(通过Person类实现PlayerIO接口实现)

Attributes

抽象类,设置了翻面、铁索连环、喝酒、死亡、性别、卡牌、装备牌、判定牌等相关属性,以及属性相关的操作,如摸牌弃牌、增减体力等,并内置了所有防具的处理逻辑。真实原因:Person类太臃肿了需要拆出一些不然过不了checkstyle。

Person

抽象类,所有武将的公共父类,武将行为的核心,属性全部封装在Attributes类中,并通过PlayerIO实现了IO接口,主要功能为回合内的完整流程,包括回合开始、判定、摸牌、出牌、弃牌、结束阶段等,核心逻辑为出阶段解析命令并使用卡牌、技能。

其余重要类

Sha

杀卡牌,继承自BasicCard,包含了杀伤害的属性(火、雷、普通)。调用大多数武器的功能(除诸葛连弩和丈八蛇矛在Person类中),并调用了各个杀相关的技能发动时机方法。

Card

抽象类,所有卡牌的公共父类,包括花色、点数、所有者、使用者、目标、[目标二]、是否已被取走(用于决定是否进入弃牌堆)等属性。核心行为是选择卡牌目标。

支持卡牌

基本牌

名称

已完成

杀(火杀、雷杀)

锦囊牌

延时锦囊

名称

已完成

闪电

乐不思蜀

兵粮寸断

非延时锦囊

名称

已完成

决斗

过河拆桥

顺手牵羊

无中生有

无懈可击

铁索连环

火攻

万箭齐发

南蛮入侵

桃园结义

五谷丰登

借刀杀人

装备牌

武器

名称

已完成

雌雄双股剑

青釭剑

贯石斧

青龙偃月刀

麒麟弓

寒冰剑

古锭刀

朱雀羽扇

诸葛连弩

丈八蛇矛

三尖两刃刀

防具

名称

已完成

白银狮子

藤甲

仁王盾

八卦阵

名称

已完成

骅骝

绝影

爪黄飞电

的卢

紫骍

赤兔

大宛

武将

标准包

魏国

名称

已完成

曹操

郭嘉

司马懿

夏侯惇

甄姬

张辽

许褚

蜀国

名称

已完成

刘备

关羽

张飞

赵云

马超

诸葛亮

黄月英

吴国

名称

已完成

孙权

吕蒙

黄盖

甘宁

孙尚香

陆逊

周瑜

大乔

群雄

名称

已完成

吕布

貂蝉

华佗

袁术(SP)

风包

名称

已完成

黄忠

魏延

夏侯渊

曹仁

周泰

小乔

张角

于吉

火包

名称

已完成

荀彧

典韦

卧龙

庞统

太史慈

袁绍

庞德

颜良文丑

林包

名称

已完成

孙坚

鲁肃

孟获

祝融

曹丕

徐晃

董卓

贾诩

山包

名称

已完成

姜维

刘禅

邓艾

左慈

孙策

张郃

蔡文姬

张昭张纮

神将

名称

已完成

神吕蒙

神关羽

神周瑜

神诸葛亮

神曹操

神吕布

神赵云

神司马懿

你可能感兴趣的:(java三国杀百度云)