game

package
v0.0.0-...-d3ce41d Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 25, 2024 License: MulanPSL-2.0 Imports: 8 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func CalcDistance

func CalcDistance(p1, p2 []float64) float64

CalcDistance 计算两点之间的距离

func CalcMileage

func CalcMileage(pos, landingPoint []float64, height float64, flightPlan [][]float64) float64

CalcMileage 根据无人机的起飞坐标、航线和飞行高度,和降落坐标,计算总公里数(以米为单位)

func CalcPosition

func CalcPosition(flightPlan [][]float64, mileage float64) []float64

给定一个航道(线坐标数据),给定里程数,求该里程数对应的点坐标

func ExtractNumber

func ExtractNumber(s string) (int, error)

ExtractNumber 从形如 "80 km/h" 的字符串中解析出数值

Types

type Drone

type Drone struct {
	Name         string            // 无人机名称
	Metadata     utils.UavMetadata // 无人机的硬件信息
	Status       string            // 无人机的当前状态,如"飞行中"、"待命"、"充电中"等
	Speed        float64           // 当前速度,单位可以是 km/h
	BatteryLevel int               // 剩余电量,以百分比表示
	Position     []float64         // 当前位置
	FlightPlan   [][]float64       // 航线
}

func NewDrone

func NewDrone(name string, metadata utils.UavMetadata) *Drone

新建无人机实例的函数

func (*Drone) CalcMileageAtPresent

func (d *Drone) CalcMileageAtPresent() float64

计算当前无人机的里程数

func (*Drone) ChangeStatus

func (d *Drone) ChangeStatus(newStatus string)

改变无人机状态的方法(例如,进入待命状态)

func (*Drone) Charge

func (d *Drone) Charge(timeSpeed int)

无人机充电的方法

func (*Drone) Fly

func (d *Drone) Fly(destination []float64, speed float64)

无人机飞行的方法

type DroneManagementSystem

type DroneManagementSystem struct {
	Drones              map[string]*Drone   // 所有已经注册到管理系统的无人机
	TimeSpeed           int                 // 时间流逝速度
	SpeedChangeChan     chan time.Duration  // 创建通道
	HoldingAreas        []*HoldingArea      // 所有注册到管理系统的待命区
	RegularTaskDrone    []*Drone            // 执行常规任务 无人机列表
	TemporaryTaskDrone  []*Drone            // 执行临时任务 无人机列表
	SpareDrone          []*Drone            // 备用无人机列表
	DroneStatus         map[string]*Drone   // 无人机状态管理,键名为无人机名称,值为无人机结构体
	DronesInHoldingArea map[string][]*Drone // 每个待命区内的无人机列表,键名为待命区名称
	Ticker              *time.Ticker
	Mutex               sync.Mutex
}

无人机管理系统结构体

func NewDroneManagementSystem

func NewDroneManagementSystem() *DroneManagementSystem

构造函数,初始化无人机管理系统

func (*DroneManagementSystem) ChooseDroneExecuteTask

func (dms *DroneManagementSystem) ChooseDroneExecuteTask(task *Task) *Drone

挑选无人机去执行任务,根据任务类型,合适现在无人机的状态是否有空闲的无人机 需要知道,常规无人机尽管空闲也不允许执行临时任务,临时任务无人机也不允许执行常规任务

func (*DroneManagementSystem) DroneRegister

func (dms *DroneManagementSystem) DroneRegister(drone *Drone, droneType string, holdingAreaName string) error

注册无人机到系统里

func (*DroneManagementSystem) ExecuteTask

func (dms *DroneManagementSystem) ExecuteTask(task *Task, drone *Drone, speed float64, height float64)

func (*DroneManagementSystem) HoldingAreaRegister

func (dms *DroneManagementSystem) HoldingAreaRegister(area *HoldingArea)

注册待命区到系统里

func (*DroneManagementSystem) OnTimeSpeedChanged

func (dms *DroneManagementSystem) OnTimeSpeedChanged(newSpeed int)

func (*DroneManagementSystem) SelectLandingPoint

func (dms *DroneManagementSystem) SelectLandingPoint(pos []float64) (closestPoint []float64)

求航线的降落点距离哪一个待命区最近

type Environment

type Environment struct {
	TimeSpeed   int
	BaseTime    time.Time
	VirtualTime time.Time
	// contains filtered or unexported fields
}

func NewEnvironment

func NewEnvironment() *Environment

初始化环境

func (*Environment) RegisterObserver

func (e *Environment) RegisterObserver(observer TimeSpeedObserver)

注册观察者

func (*Environment) UpdateTimeSpeed

func (e *Environment) UpdateTimeSpeed(newSpeed int)

更新时间流逝速度,并通知观察者

type HoldingArea

type HoldingArea struct {
	Name    string
	Center  []float64 // 待命区中心点的经纬度
	RadiusM float64   // 待命区半径(米),假定为圆形区域
}

待命区(无人机起降点/待命/充电/维护的区域)两个参数,一个是待命区的中心点,一个为半径,意思为该点半径多少米内都是无人机的起降地区

func NewHoldingArea

func NewHoldingArea(name string, center []float64, radiusM float64) *HoldingArea

待命区的构造函数

type Task

type Task struct {
	TaskName      string      // 任务名称,例如 松山湖环湖执法
	TaskType      string      // 任务类型,分为 常规任务和临时任务
	FlightMileage float64     // 飞行里程数,米为单位,本次航飞路线的里程数
	MinimumSpeed  float64     // 航飞的最低飞行速度,意味着本次无人机航飞速度不得低于该速度
	MaximumSpeed  float64     // 航飞的最高飞行速度,意味着本次无人机航飞速度不得高于该速度
	MinimumHeight float64     // 航飞的最低空域,意味着最低海拔,无人机航线规划时最低不能低于这个海拔高度飞行
	MaximumHeight float64     // 航飞的最高空域,意味着最高海拔,无人机航线规划时最高不能高于这个海拔高度飞行
	FlightPlan    [][]float64 // 航线
	Status        string      // 飞行任务的状态(等待/执行中/执行完成)三个状态
	Describe      string      // 描述,对于这次任务的一些描述
}

任务结构

func NewTask

func NewTask(taskName, taskType string, flightMileage, minimumSpeed, maximumSpeed, minimumHeight, maximumHeight float64, flightPlan [][]float64, describe string) *Task

任务的构造函数

type TaskManager

type TaskManager struct {
	RegularTasks   []*Task // 常规任务列表
	TemporaryTask  []*Task // 临时任务列表
	HistoricalTask []*Task // 历史的所有任务
}

任务管理器结构

func NewTaskManager

func NewTaskManager() *TaskManager

任务管理器的构造函数

func (*TaskManager) AddTask

func (tm *TaskManager) AddTask(task *Task)

新增任务

func (*TaskManager) CompleteTask

func (tm *TaskManager) CompleteTask(taskName string)

func (*TaskManager) ListTask

func (tm *TaskManager) ListTask() []string

查询所有任务,列出任务名称和任务状态

func (*TaskManager) TaskDetails

func (tm *TaskManager) TaskDetails(taskName string) *Task

根据任务名称查询任务的详细信心

type TimeSpeedObserver

type TimeSpeedObserver interface {
	OnTimeSpeedChanged(newSpeed int)
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL