# oop2025lab **Repository Path**: bundle/oop2025lab ## Basic Information - **Project Name**: oop2025lab - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-05-02 - **Last Updated**: 2025-09-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 关于Lab的参考实现 ## 注意 代码仅供参考,没有完整测试过正确性。 ## 运行 主程序在oop.lab.console.PlayGroundViewer中。 ## 自动化测试 实现了部分关键代码的Junit测试。安装了maven后,可以在项目根目录下执行`mvn test`,显示结果如下: ```txt [INFO] Results: [INFO] [INFO] Tests run: 36, Failures: 0, Errors: 0, Skipped: 0 [INFO] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.308 s [INFO] Finished at: 2025-04-30T09:32:05+08:00 [INFO] ------------------------------------------------------------------------ ``` ## 代码结构(Plantuml) 下面是代码package(子系统)的依赖关系图: ```plantuml @startuml package domain{ package board{ } package game{ } game --> board } package console{ package screen{ } package command{ } package gameview{ } package Playground{ } gameview->screen Playground --> screen Playground --> command Playground -> gameview } console --> domain @enduml ``` ![alt text](./images/arch.png) ## 关键设计 1. domain中抽象出了Board类和Game接口,分别表示棋盘和游戏。 2. 避免domain中出现大量的循环语句的关键设计是Board中的getLine和getAll方法。这两发方法目前看上去会影响程序的性能,后面在学到相应的内容后会进行优化。 3. console中抽象出了Screen类和Command接口,分别表示屏幕和命令。这两个部分很大程度上避免了游戏控制部分出现的大量的if-else和循环语句。 4. 部分方法的实现中采用了Java Stream API以及其它函数式的编程技巧,这个不要求掌握,仅供参考。