Files
doucan/app/internal/models/models.go
2026-02-19 21:18:12 +08:00

104 lines
2.2 KiB
Go

package models
type Suit int
const (
SuitHeart Suit = iota
SuitDiamond
SuitClub
SuitSpade
SuitJoker
SuitSuper
)
type Card struct {
Suit Suit `json:"suit"`
Value int `json:"value"`
}
type CardType int
const (
CardTypeInvalid CardType = iota
CardTypeSingle
CardTypePair
CardTypeTriple
CardTypeTripleOne
CardTypeTriplePair
CardTypeStraight
CardTypeDoubleStraight
CardTypeBomb
CardTypeRocket
)
type Player struct {
ID string `json:"id"`
Name string `json:"name"`
Cards []Card `json:"cards,omitempty"`
CardCount int `json:"cardCount"`
IsReady bool `json:"isReady"`
IsOnline bool `json:"isOnline"`
}
type RoomState int
const (
RoomStateWaiting RoomState = iota
RoomStatePlaying
RoomStateFinished
)
type PlayRecord struct {
PlayerID string `json:"playerId"`
Cards []Card `json:"cards"`
CardType CardType `json:"cardType"`
}
type Room struct {
ID string `json:"id"`
Players []*Player `json:"players"`
CurrentTurn int `json:"currentTurn"`
State RoomState `json:"state"`
LastPlay *PlayRecord `json:"lastPlay,omitempty"`
LastWinner string `json:"lastWinner,omitempty"`
RoundCount int `json:"roundCount"`
MaxPlayers int `json:"maxPlayers"`
}
type MessageType string
const (
MsgTypeJoin MessageType = "join"
MsgTypeLeave MessageType = "leave"
MsgTypeReady MessageType = "ready"
MsgTypePlay MessageType = "play"
MsgTypePass MessageType = "pass"
MsgTypeState MessageType = "state"
MsgTypeError MessageType = "error"
MsgTypeChat MessageType = "chat"
MsgTypeGameOver MessageType = "gameOver"
)
type Message struct {
Type MessageType `json:"type"`
PlayerID string `json:"playerId,omitempty"`
Data interface{} `json:"data,omitempty"`
Timestamp int64 `json:"timestamp"`
}
type ApiResponse struct {
Status int `json:"status"`
Code int `json:"code"`
Message string `json:"message"`
Data interface{} `json:"data"`
}
type CreateRoomRequest struct {
PlayerName string `json:"playerName"`
MaxPlayers int `json:"maxPlayers"`
}
type JoinRoomRequest struct {
PlayerName string `json:"playerName"`
}