82 lines
4.8 KiB
Go
82 lines
4.8 KiB
Go
|
|
package model
|
|||
|
|
|
|||
|
|
import "gorm.io/plugin/soft_delete"
|
|||
|
|
|
|||
|
|
// 游戏引擎类型常量
|
|||
|
|
const (
|
|||
|
|
EngineCanvas = "canvas" // 2D 画布游戏
|
|||
|
|
EngineThree = "three" // Three.js 三维游戏
|
|||
|
|
EngineOnline = "online" // WebSocket 联机游戏
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// Game 游戏表:平台全部游戏(37 款)
|
|||
|
|
type Game struct {
|
|||
|
|
ID int `gorm:"primaryKey" json:"id"` // 游戏ID
|
|||
|
|
Code string `gorm:"size:32;uniqueIndex" json:"code"` // 游戏编码(前端据此加载组件)
|
|||
|
|
Name string `gorm:"size:32" json:"name"` // 游戏名称
|
|||
|
|
Category string `gorm:"size:16" json:"category"` // 分类:益智/街机/动作/射击/棋牌/休闲/3D/联机
|
|||
|
|
Icon string `gorm:"size:16" json:"icon"` // emoji 图标
|
|||
|
|
Description string `gorm:"size:255" json:"description"` // 玩法简介
|
|||
|
|
Price int `gorm:"default:0" json:"price"` // 售价(积分,0=免费)
|
|||
|
|
Engine string `gorm:"size:16" json:"engine"` // 实现引擎:canvas/three/online
|
|||
|
|
ScorePerPoint int `gorm:"default:10" json:"score_per_point"` // 多少游戏得分兑1积分(0=不兑换)
|
|||
|
|
MaxPointsPerPlay int `gorm:"default:50" json:"max_points_per_play"` // 单局积分上限(防刷)
|
|||
|
|
PlayCount int `gorm:"default:0" json:"play_count"` // 累计游玩次数
|
|||
|
|
Sort int `gorm:"default:0" json:"sort"` // 排序权重
|
|||
|
|
Carousel int `gorm:"default:0" json:"carousel"` // 大厅轮播:0=不参与,>0=参与且按值升序排列
|
|||
|
|
Status int `gorm:"default:1" json:"status"` // 状态:1上架 2下架
|
|||
|
|
CreatedAt int64 `gorm:"autoCreateTime" json:"created_at"` // 创建时间(int 时间戳)
|
|||
|
|
UpdatedAt int64 `gorm:"autoUpdateTime" json:"updated_at"` // 更新时间(int 时间戳)
|
|||
|
|
DeletedAt soft_delete.DeletedAt `gorm:"default:0" json:"-"` // 软删除时间(0=未删除)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// TableName 指定表名
|
|||
|
|
func (Game) TableName() string { return "games" }
|
|||
|
|
|
|||
|
|
// GameRecord 游玩记录表:单机游戏每局结算写一条
|
|||
|
|
type GameRecord struct {
|
|||
|
|
ID int `gorm:"primaryKey" json:"id"` // 记录ID
|
|||
|
|
UserID int `gorm:"index" json:"user_id"` // 玩家用户ID
|
|||
|
|
GameID int `gorm:"index" json:"game_id"` // 游戏ID
|
|||
|
|
Score int `gorm:"default:0" json:"score"` // 本局得分
|
|||
|
|
PointsGained int `gorm:"default:0" json:"points_gained"` // 本局获得的平台积分
|
|||
|
|
Duration int `gorm:"default:0" json:"duration"` // 游玩时长(秒)
|
|||
|
|
CreatedAt int64 `gorm:"autoCreateTime" json:"created_at"` // 结算时间(int 时间戳)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// TableName 指定表名
|
|||
|
|
func (GameRecord) TableName() string { return "game_records" }
|
|||
|
|
|
|||
|
|
// 对战模式常量
|
|||
|
|
const (
|
|||
|
|
BattleModePVP = 1 // 好友联机
|
|||
|
|
BattleModeAI = 2 // 人机对战
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// 对战结果常量
|
|||
|
|
const (
|
|||
|
|
BattleResultWin = 1 // 胜利
|
|||
|
|
BattleResultLose = 2 // 失败
|
|||
|
|
BattleResultDraw = 3 // 平局
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// BattleRecord 对战记录表:斗地主/象棋每局结束后,每个真人玩家写一条
|
|||
|
|
type BattleRecord struct {
|
|||
|
|
ID int `gorm:"primaryKey" json:"id"` // 记录ID
|
|||
|
|
UserID int `gorm:"index" json:"user_id"` // 玩家用户ID
|
|||
|
|
GameID int `json:"game_id"` // 游戏ID(斗地主或象棋)
|
|||
|
|
RoomCode string `gorm:"size:16" json:"room_code"` // 房间邀请码
|
|||
|
|
Mode int `gorm:"default:1" json:"mode"` // 模式:1好友联机 2人机
|
|||
|
|
// 注意:AI 不在 GORM 常见缩写词表内,默认会被映射成 a_iprovider,必须显式指定列名
|
|||
|
|
AIProvider string `gorm:"size:16;column:ai_provider" json:"ai_provider"` // AI 提供方:spark/deepseek/rule
|
|||
|
|
AIDifficulty string `gorm:"size:16;column:ai_difficulty" json:"ai_difficulty"` // AI 难度:easy/medium/hard
|
|||
|
|
Result int `gorm:"default:1" json:"result"` // 结果:1胜 2负 3平
|
|||
|
|
PointsChange int `gorm:"default:0" json:"points_change"` // 积分变动(胜利奖励)
|
|||
|
|
Duration int `gorm:"default:0" json:"duration"` // 对局时长(秒)
|
|||
|
|
Detail string `gorm:"size:255" json:"detail"` // 对局详情摘要
|
|||
|
|
CreatedAt int64 `gorm:"autoCreateTime" json:"created_at"` // 结算时间(int 时间戳)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// TableName 指定表名
|
|||
|
|
func (BattleRecord) TableName() string { return "battle_records" }
|