#bot #random #battleship #place #game #destroy #shoot

battleship_bot

战舰游戏及其一些机器人实现

6 个稳定版本

1.1.5 2023 年 12 月 24 日
1.1.4 2023 年 11 月 26 日
1.1.1 2023 年 11 月 25 日
1.1.0 2023 年 11 月 23 日
1.0.0 2023 年 11 月 22 日

#527网络编程

Download history 10/week @ 2024-03-09 3/week @ 2024-03-16 7/week @ 2024-03-30 2/week @ 2024-04-06

每月 62 次下载

自定义许可

55KB
1K SLoC

Battleship_Bot

这是战舰的一种实现,实现了一些机器人。

快速入门

use battleship_bot::{Battleship, place, shoot};

let mut game = Battleship::new(
    place::sides,
    place::spread,

    shoot::random_and_destroy,
    shoot::grid_and_destroy
);

let recording = game.play_and_record_game();

println!("{} won", recording.winner);

射击

首先,我们有随机射击,完全随机在 shoot::random。然后,有一个更复杂的 shoot::random_and_random_destroy,它在边缘随机射击。为了完成随机射击方法,我们有 shoot::random_and_destroy,它使用我们之前射击的结果来确定船的方向,然后使用这个结果。

之后,我们有 shoot::grid_and_destroy,它使用不同的算法来寻找,但以相同的方式摧毁 shoot::random_and_destroy。它以网格模式射击,并摧毁它遇到的船只。

最后,最后但绝对不是最不重要的是我们有一个 shoot::heatmap_and_destroy。它生成热图以确定船将在哪个方块上放置的最大变化,然后射击最高的方块和随机的一个,如果有多个最高值。

射击自己的射击

如果您想创建自己的射击函数实现,可以像其他函数一样传递给 Battleship::new。只要它接受一个 Pos,即最后一次射击的位置,以及一个 ShotMap,它是一个包含此玩家所有 Shot 的二维数组。

放置

对于放置,我们首先从 place::random 开始,它就像其 shoot 对应物一样,完全随机地放置船只。

其次,我们有 place::sides,它将船只放置在边缘的随机位置。

之后我们有 place::spread,它将每艘船放置在一个特定的象限中,从左上角到右下角进行划分。驱逐舰(长度为2)位于第一个象限,潜艇(长度为3)位于第二个,以此类推,直到航空母舰(长度为5)是第五艘船。因此,航空母舰可以放置在任意位置。

最后我们有 place::cluster,它将所有船只聚集在棋盘的中心。

放置你的船只

如果你想创建自己的放置函数实现,它不需要接受变量,只需要返回一个 BoatMapBoatMap 是一个二维数组的类型别名,其中包含 Boat

依赖项

~310KB