# checkers **Repository Path**: javey/checkers ## Basic Information - **Project Name**: checkers - **Description**: 跳棋 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2023-10-23 - **Last Updated**: 2024-04-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 类 ## Piece `Piece`类代表棋子,该类比较简单,只需要记录当前棋子的颜色即可 ## Point `Point`类,代表棋盘上的一个点,这个点有3种类型 1. 三角形区域,可能还要区分6中颜色 2. 中间灰色6边型区域 3. 边缘不存在的区域,该区域不参与游戏 该类有个关键方法,即`set_piece`,表示可以往该点上放置一颗棋子,如果该棋子移动到了下一个点, 则要删除棋子(设为空`None`) ## Checkerboard ![Checkerboard](./assets/checkerboard.png) `Checkerboard`类代表棋盘,由上述`Point`对象组成一个17*13的二维数组(棋盘有17行,最长的一行有13列), 然后根据玩家数量,在相应的三角形区域的点上,放置棋子(`Piece`)。 例如:两个玩家,优先正向上,即1和4区域初始化棋子,3个及以上玩家则除了1,4外,可以随机选择, 只不过偶数个玩家,要选取对角线区域初始化 该类有几个关键方法: 1. `move`: 指定两个坐标,将第一个坐标上的棋子,移动到第二个坐标上 2. `calculate_points`: 指定一个坐标,根据当前棋面状态,计算出所有可以移动的点(这个方法应该是最难的) 3. `check_win`: 每走一步,都要检查是否当前颜色的棋子已经胜利了 ## Player `Player`类代表玩家 1. 每个玩家应该有一个颜色`color`属性,用来表示当前持有的棋子颜色 2. 有一个状态标识,表示当前玩家是否已经胜利,胜利了就不参与到下一轮走棋循环里来了 ## AIPlayer `AIPlayer`继承自`Player`类,具有`Player`的所有特征,但是AI需要一个`play`方法,这个方法通过AI训练, 能自己走出每一步棋,即自己决定棋子的移动的两个坐标(move) ## Game `Game`类,是穿起所有模块的一个类,用它管理棋盘和玩家,根据传入的玩家数量,初始化棋盘(`Checkerboard`), 创建相应数量的玩家实例(`Player`),其中关键方法`turn`,用来控制当前轮到哪个玩家走棋,走完之后, 自动切换到下一个还没有胜利的玩家,如果只剩最后一个玩家,则游戏结束