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 |
|
#527 在 网络编程
每月 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
,它将所有船只聚集在棋盘的中心。
放置你的船只
如果你想创建自己的放置函数实现,它不需要接受变量,只需要返回一个 BoatMap
。 BoatMap
是一个二维数组的类型别名,其中包含 Boat
。
依赖项
~310KB