软件构造lab2总结

Poetic Walks

Implement Graph

要求完成两个实例类ConcreteEdgesGraph和ConcreteVertices。其中ConcreteEdgesGraph较简单,Edge类是边的抽象,包含每条边的顶点,终点,权重三个域,ConcreteEdgesGraph类包含两个fields一个存储点,一个存储边。
在这里插入图片描述在这里插入图片描述
ConcreteVerticesGraph需要利用点来实现一个有向图,则需要在Vertex类中添加源点和终点的集合
在这里插入图片描述

Poetic Walks

两个fields分别以图的形式保存语料库,以一个数组将语料库每一行的单词保存
在这里插入图片描述
构造函数中需要读取语料库文件,将其保存在图中,Poem方法:对input扩展,首先将input按“ ”(空格)划分为各个单词,不区分大小写,遍历两个单词的sources和targets找出两个集合的交集,在交集中找到边的权值最大的一个添加到input的两个单词中间。
在这里插入图片描述

Re-implement the Social Network in Lab1

继承自ConcreteEdgesGraph类,父类中的方法可以直接使用,addVertex,addEdge直接调用,getDistance1. 先判断起始点是否为同一点,然后建立Map保存起点到每个点的距离,采用广度遍历依次调用targets()方法访问邻接点,起点进队列,然后P1访问完再取队列第一个元素访问,直到某一相邻的点为终点则返回最短距离。如果所有点都访问完仍无最短距离,则返回-1
在这里插入图片描述

Playing Chess

Position类fields包含横纵坐标
Piece类fields有棋子名字,所属者,棋子的状态(是否被放置,或者移除),棋子的位置。
Player类fields包括名字,pieces集合保存该玩家的所有棋子,一个字符串记录该玩家所有的操作步骤。
Board类fields有棋盘类型(棋子放置在格子中还是在对角线上),棋盘大小,pieces数组保存棋盘上每个位置的棋子,state数组保存棋盘上每个位置的状态。一个setPiece方法在棋盘上加入一枚棋子,需要判断加入的棋子是否为空。
在这里插入图片描述
Action接口,有两个类ChessAction和GoAction继承Action。
Action中Empty方法生成一个实例类
在这里插入图片描述在这里插入图片描述
Init方法用于初始化棋盘上的棋子,如果是国际象棋则放置好每个玩家的棋子,初始化玩家的信息,初始化棋盘的状态,初始化棋子的信息
在这里插入图片描述
Place放置一枚棋子,只作用于围棋中,需要判断异常情况:指定位置超出棋盘边界,指定位置有棋子,该棋子不属于此玩家,该棋子已经被放置。
在这里插入图片描述
Move作用于国际象棋,将一枚棋盘上的棋子移动到另一位置,判断异常情况:目的位置超出棋盘边界,目的位置已有棋子,初始位置没有棋子,初始位置的棋子不属于该玩家,初始位置和目的位置相同
在这里插入图片描述
Remove作用于围棋,将棋子从棋盘上删除,判断异常情况:删除的位置超出棋盘边界,位置上没有棋子,棋子属于己方玩
在这里插入图片描述
Eat作用于国际象棋,用一枚棋子吃掉另一枚,判断异常情况:位置超出棋盘边界,初始位置没有棋子,初始位置的棋子不属于自己,目的位置没有棋子,目的位置的棋子不属于对方玩家
在这里插入图片描述
然后针对两个实例类ChessAction和GoAction进行详细的构造chessAction和GoAction需要添加几个域并进行初始化即可,其他的方法对Action中的进行重写
在这里插入图片描述
Game类fields
在这里插入图片描述
在构造方法中进行游戏的初始化调用action.init有get方法得到两个玩家的名字和直接返回两个玩家写四种棋类的操作方法place,move,remove,eat其中place需要新创建一个属于玩家的棋子,并调用action中的方法传入玩家,棋子,位置的参数
在这里插入图片描述
主程序的设计较简单,根据输入的选项选择特定操作,两个玩家交互进行。
在这里插入图片描述
在这里插入图片描述
Runchess和runGo相似如果是place,move,remove,eat则保存玩家输入的坐标传入参数到game中的相应操作方法
在这里插入图片描述
如果是查看位置的占用情况或者查询有多少棋子在棋盘上则选择完之后还能选择是否走棋
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值