diff --git a/utils/aoi/README.md b/utils/aoi/README.md new file mode 100644 index 0000000..f7263ca --- /dev/null +++ b/utils/aoi/README.md @@ -0,0 +1,10 @@ +# AOI (Area of Interest) + +[![Go doc](https://img.shields.io/badge/go.dev-reference-brightgreen?logo=go&logoColor=white&style=flat)](https://pkg.go.dev/github.com/kercylan98/minotaur/utils/aoi) + +AOI (Area of Interest) 是一种常见的游戏服务器技术,用于处理大量玩家在同一空间内的交互问题。在 `Minotaur` 中,我们提供了一个基于 Go 语言的 AOI 实现。 + +## TwoDimensional [`二维AOI`](https://pkg.go.dev/github.com/kercylan98/minotaur/utils/aoi#TwoDimensional) + +[`TwoDimensional`](https://pkg.go.dev/github.com/kercylan98/minotaur/utils/aoi#TwoDimensional) +是一个二维 AOI 的实现。它提供了添加实体、删除实体、刷新实体、获取焦点实体等方法。每个实体需要实现 [`TwoDimensionalEntity`](https://pkg.go.dev/github.com/kercylan98/minotaur/utils/aoi#TwoDimensionalEntity) 接口,该接口包含了获取实体 ID、获取实体坐标、获取实体视野半径等方法。 \ No newline at end of file diff --git a/utils/aoi/doc.go b/utils/aoi/doc.go new file mode 100644 index 0000000..fd75f3c --- /dev/null +++ b/utils/aoi/doc.go @@ -0,0 +1,7 @@ +// Package aoi 提供了一种有效的方法来处理 AOI(Area of Interest)问题。 +// +// AOI 问题是在大规模多人在线游戏中常见的问题,它涉及到确定哪些对象对玩家来说是“感兴趣的”, +// 也就是说,哪些对象在玩家的视野范围内。 +// +// 这个包提供了一种数据结构和一些方法来有效地解决这个问题。 +package aoi diff --git a/utils/arrangement/README.md b/utils/arrangement/README.md new file mode 100644 index 0000000..33bb0f4 --- /dev/null +++ b/utils/arrangement/README.md @@ -0,0 +1,17 @@ +# Arrangement + +[![Go doc](https://img.shields.io/badge/go.dev-reference-brightgreen?logo=go&logoColor=white&style=flat)](https://pkg.go.dev/github.com/kercylan98/minotaur/utils/arrangement) + +`Arrangement`包提供了一种灵活的方式来管理和操作编排区域。它包含了一些用于处理编排区域和编排选项的函数和类型。 + +## Area [`编排区域`](https://pkg.go.dev/github.com/kercylan98/minotaur/utils/arrangement#Area) +`Area`类型代表一个编排区域,它包含了一些方法,如`GetAreaInfo`、`GetItems`、`IsAllow`、`IsConflict`、`GetConflictItems`和`GetScore`,这些方法可以用来获取区域信息、获取区域中的所有成员、检查一个成员是否可以被添加到该区域中、检查一个成员是否会造成冲突、获取与一个成员产生冲突的所有其他成员以及获取该区域的评估分数。 + +## Option [`编排选项`](https://pkg.go.dev/github.com/kercylan98/minotaur/utils/arrangement#Option) +`Option`类型代表一个编排选项,它是一个函数,可以用来修改编排的行为。例如,`WithRetryThreshold`、`WithConstraintHandle`和`WithConflictHandle`函数可以用来设置编排时的重试阈值、约束处理函数和冲突处理函数。 + +## AreaOption [`编排区域选项`](https://pkg.go.dev/github.com/kercylan98/minotaur/utils/arrangement#AreaOption) +`AreaOption`类型代表一个编排区域选项,它是一个函数,可以用来修改编排区域的行为。例如,`WithAreaConstraint`、`WithAreaConflict`和`WithAreaEvaluate`函数可以用来设置编排区域的约束条件、冲突条件和评估函数。 + +## 示例代码 +[点击查看](./arrangement_test.go) \ No newline at end of file diff --git a/utils/arrangement/doc.go b/utils/arrangement/doc.go new file mode 100644 index 0000000..90bbb07 --- /dev/null +++ b/utils/arrangement/doc.go @@ -0,0 +1,4 @@ +// Package arrangement 包提供了一些有用的函数来处理数组的排列。 +// +// 更多的详细信息和使用示例,可以参考每个函数的文档。 +package arrangement diff --git a/utils/buffer/README.md b/utils/buffer/README.md new file mode 100644 index 0000000..969dec4 --- /dev/null +++ b/utils/buffer/README.md @@ -0,0 +1,71 @@ +# Buffer + +[![Go doc](https://img.shields.io/badge/go.dev-reference-brightgreen?logo=go&logoColor=white&style=flat)](https://pkg.go.dev/github.com/kercylan98/minotaur/utils/buffer) + +该包提供了多种缓冲区实现,包括环形缓冲区和无界缓冲区。开发者可以使用它来快速构建和管理缓冲区。 + +## Ring [`环形缓冲区`](https://pkg.go.dev/github.com/kercylan98/minotaur/utils/buffer#Ring) + +环形缓冲区是一种特殊的缓冲区,它的头尾是相连的。当缓冲区满时,新的元素会覆盖旧的元素。环形缓冲区在 `Minotaur` 中是一个泛型类型,可以容纳任意类型的元素。 + +## Unbounded [`无界缓冲区`](https://pkg.go.dev/github.com/kercylan98/minotaur/utils/buffer#Unbounded) + +该缓冲区来源于 gRPC 的实现,用于在不使用额外 goroutine 的情况下实现无界缓冲区。无界缓冲区是一种特殊的缓冲区,它的大小可以动态扩展,不会出现溢出的情况。无界缓冲区在 `Minotaur` 中也是一个泛型类型,可以容纳任意类型的元素。 + +### 使用示例 + +环形缓冲区: + +```go +package main + +import ( + "fmt" + "github.com/kercylan98/minotaur/utils/buffer" +) + +func main() { + ring := buffer.NewRing[int](5) + for i := 0; i < 5; i++ { + ring.Write(i) + } + + for i := 0; i < 5; i++ { + v, _ := ring.Read() + fmt.Println(v) // 0 1 2 3 4 + } +} +``` + +无界缓冲区: + +```go +package main + +import ( + "fmt" + "github.com/kercylan98/minotaur/utils/buffer" +) + +func main() { + unbounded := buffer.NewUnboundedN[int]() + for i := 0; i < 10; i++ { + unbounded.Put(i) + } + + for { + select { + case v, ok := <-unbounded.Get(): + if !ok { + return + } + unbounded.Load() + fmt.Println(v) // 0 1 2 3 4 5 6 7 8 9 + if v == 9 { + unbounded.Close() + return + } + } + } +} +``` \ No newline at end of file diff --git a/utils/buffer/doc.go b/utils/buffer/doc.go new file mode 100644 index 0000000..8f7ef53 --- /dev/null +++ b/utils/buffer/doc.go @@ -0,0 +1,8 @@ +// Package buffer 提供了缓冲区相关的实用程序。 +// +// 包括创建、读取和写入缓冲区的函数。 +// +// 这个包还提供了一个无界缓冲区的实现,可以在不使用额外 goroutine 的情况下实现无界缓冲区。 +// +// 无界缓冲区的所有方法都是线程安全的,除了用于同步的互斥锁外,不会阻塞任何东西。 +package buffer diff --git a/utils/combination/README.md b/utils/combination/README.md new file mode 100644 index 0000000..e92938c --- /dev/null +++ b/utils/combination/README.md @@ -0,0 +1,25 @@ +# Combination + +[![Go doc](https://img.shields.io/badge/go.dev-reference-brightgreen?logo=go&logoColor=white&style=flat)](https://pkg.go.dev/github.com/kercylan98/minotaur/utils/combination) + +`Combination` 包是一个实用的工具,提供了一系列用于生成和处理组合的函数,以帮助开发者处理复杂的组合问题。 + +## 特性 + +### 泛型类型 + +在 `Minotaur` 中,我们的组合函数是泛型类型,这意味着它们可以处理任意类型的元素,为开发者提供了灵活性,使得这个包可以在各种不同的场景和应用中使用。 + +### 算法描述 + +我们的组合函数使用了特定的算法,以便快速地生成和处理组合。这些算法被设计为能够处理各种复杂的组合问题,以确保结果的准确性。 + +### 易于使用 + +`Combination` 包的设计目标是使得开发者可以轻松地使用它。我们提供了清晰的文档和指南,帮助开发者理解和使用我们的组合函数。 + +## 用途 + +`Combination` 包可以在处理任何涉及到组合的问题时使用。无论是在数据分析、机器学习、算法设计,还是在其他需要处理组合的场景中,`Combination` 包都能够提供帮助。 + +我们鼓励开发者探索 `Combination` 包的可能用途,并分享他们的经验和发现。 \ No newline at end of file diff --git a/utils/combination/doc.go b/utils/combination/doc.go new file mode 100644 index 0000000..8e63e5f --- /dev/null +++ b/utils/combination/doc.go @@ -0,0 +1,2 @@ +// Package combination 包提供了一些实用的组合函数。 +package combination diff --git a/utils/compress/README.md b/utils/compress/README.md new file mode 100644 index 0000000..3fb8e3d --- /dev/null +++ b/utils/compress/README.md @@ -0,0 +1,5 @@ +# Compress + +[![Go doc](https://img.shields.io/badge/go.dev-reference-brightgreen?logo=go&logoColor=white&style=flat)](https://pkg.go.dev/github.com/kercylan98/minotaur/utils/compress) + +该包提供了GZIP、ZIP和TAR的压缩和解压缩实现。开发者可以使用它来快速进行数据的压缩和解压缩。 \ No newline at end of file diff --git a/utils/compress/doc.go b/utils/compress/doc.go new file mode 100644 index 0000000..af9f1b1 --- /dev/null +++ b/utils/compress/doc.go @@ -0,0 +1,2 @@ +// Package compress 提供了一些用于压缩和解压缩数据的函数。 +package compress