feat: 添加走棋记录、对局记录实体,房间新增观战开关
This commit is contained in:
@@ -0,0 +1,47 @@
|
|||||||
|
package com.webgame.webgamebackend.entities;
|
||||||
|
|
||||||
|
import com.webgame.webgamebackend.entities.base.UUIDBaseEntity;
|
||||||
|
import jakarta.persistence.Column;
|
||||||
|
import jakarta.persistence.Entity;
|
||||||
|
import jakarta.persistence.Table;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 走棋记录实体
|
||||||
|
*
|
||||||
|
* 记录每一步走棋:所属房间、下棋玩家、棋盘坐标、步序号。
|
||||||
|
* 坐标系约定:(0,0) 为棋盘左上角。
|
||||||
|
*/
|
||||||
|
@Entity
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Accessors(chain = true)
|
||||||
|
@Table(name = "game_move")
|
||||||
|
public class GameMoveEntity extends UUIDBaseEntity {
|
||||||
|
|
||||||
|
/** 所属房间 ID */
|
||||||
|
@Column(name = "room_id", nullable = false, length = 64)
|
||||||
|
private String roomId;
|
||||||
|
|
||||||
|
/** 下棋玩家的 account_id */
|
||||||
|
@Column(name = "player_id", nullable = false, length = 64)
|
||||||
|
private String playerId;
|
||||||
|
|
||||||
|
/** 落子行坐标(0 起始,从上往下) */
|
||||||
|
@Column(name = "row_num", nullable = false)
|
||||||
|
private Integer rowNum;
|
||||||
|
|
||||||
|
/** 落子列坐标(0 起始,从左往右) */
|
||||||
|
@Column(name = "col_num", nullable = false)
|
||||||
|
private Integer colNum;
|
||||||
|
|
||||||
|
/** 步序号(从 1 开始递增) */
|
||||||
|
@Column(name = "move_index", nullable = false)
|
||||||
|
private Integer moveIndex;
|
||||||
|
}
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
package com.webgame.webgamebackend.entities;
|
||||||
|
|
||||||
|
import com.webgame.webgamebackend.entities.base.UUIDBaseEntity;
|
||||||
|
import jakarta.persistence.Column;
|
||||||
|
import jakarta.persistence.Entity;
|
||||||
|
import jakarta.persistence.Table;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 对局记录实体
|
||||||
|
*
|
||||||
|
* 每局游戏结束后生成一条记录,包含胜负结果。
|
||||||
|
*/
|
||||||
|
@Entity
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Accessors(chain = true)
|
||||||
|
@Table(name = "game_record")
|
||||||
|
public class GameRecordEntity extends UUIDBaseEntity {
|
||||||
|
|
||||||
|
/** 所属房间 ID */
|
||||||
|
@Column(name = "room_id", nullable = false, length = 64)
|
||||||
|
private String roomId;
|
||||||
|
|
||||||
|
/** 胜方 account_id(平局时为 null) */
|
||||||
|
@Column(name = "winner_id", length = 64)
|
||||||
|
private String winnerId;
|
||||||
|
|
||||||
|
/** 结果类型:win(一方获胜)、draw(平局)、resign(认输) */
|
||||||
|
@Column(name = "result_type", nullable = false, length = 16)
|
||||||
|
private String resultType;
|
||||||
|
|
||||||
|
/** 对局开始时间 */
|
||||||
|
@Column(name = "started_at", nullable = false)
|
||||||
|
private LocalDateTime startedAt;
|
||||||
|
|
||||||
|
/** 对局结束时间 */
|
||||||
|
@Column(name = "ended_at")
|
||||||
|
private LocalDateTime endedAt;
|
||||||
|
}
|
||||||
@@ -67,6 +67,12 @@ public class GameRoomEntity extends UUIDBaseEntity {
|
|||||||
@Column(name = "password", length = 64)
|
@Column(name = "password", length = 64)
|
||||||
private String password;
|
private String password;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否允许观战
|
||||||
|
*/
|
||||||
|
@Column(name = "allow_spectate", nullable = false)
|
||||||
|
private Boolean allowSpectate = true;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 房间状态:waiting / playing / finished
|
* 房间状态:waiting / playing / finished
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -0,0 +1,48 @@
|
|||||||
|
package com.webgame.webgamebackend.service;
|
||||||
|
|
||||||
|
import com.webgame.webgamebackend.ws.RoomSessionManager;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 五子棋游戏服务
|
||||||
|
*
|
||||||
|
* 处理五子棋对局的核心逻辑:落子、胜负判定、认输、和棋、准备等。
|
||||||
|
* TODO: 后续任务完善实现
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Service
|
||||||
|
public class GomokuGameService {
|
||||||
|
|
||||||
|
public void placeStone(String roomId, String userId, int row, int col, RoomSessionManager sessionManager) {
|
||||||
|
log.warn("[GomokuGameService] placeStone 暂未实现, roomId={}, userId={}, row={}, col={}", roomId, userId, row, col);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void toggleReady(String roomId, String userId, RoomSessionManager sessionManager) {
|
||||||
|
log.warn("[GomokuGameService] toggleReady 暂未实现, roomId={}, userId={}", roomId, userId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void resign(String roomId, String userId, RoomSessionManager sessionManager) {
|
||||||
|
log.warn("[GomokuGameService] resign 暂未实现, roomId={}, userId={}", roomId, userId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void requestDraw(String roomId, String userId, RoomSessionManager sessionManager) {
|
||||||
|
log.warn("[GomokuGameService] requestDraw 暂未实现, roomId={}, userId={}", roomId, userId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void respondToDraw(String roomId, String userId, boolean accept, RoomSessionManager sessionManager) {
|
||||||
|
log.warn("[GomokuGameService] respondToDraw 暂未实现, roomId={}, userId={}, accept={}", roomId, userId, accept);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void leaveRoom(String roomId, String userId, RoomSessionManager sessionManager) {
|
||||||
|
log.warn("[GomokuGameService] leaveRoom 暂未实现, roomId={}, userId={}", roomId, userId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void startGame(String roomId, String userId, RoomSessionManager sessionManager) {
|
||||||
|
log.warn("[GomokuGameService] startGame 暂未实现, roomId={}, userId={}", roomId, userId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void handleDisconnect(String roomId, String userId, RoomSessionManager sessionManager) {
|
||||||
|
log.warn("[GomokuGameService] handleDisconnect 暂未实现, roomId={}, userId={}", roomId, userId);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,6 +6,7 @@ import com.alibaba.fastjson2.JSONObject;
|
|||||||
import com.webgame.webgamebackend.service.GomokuGameService;
|
import com.webgame.webgamebackend.service.GomokuGameService;
|
||||||
import com.webgame.webgamebackend.ws.dto.WsInboundMessage;
|
import com.webgame.webgamebackend.ws.dto.WsInboundMessage;
|
||||||
import com.webgame.webgamebackend.ws.dto.WsMessage;
|
import com.webgame.webgamebackend.ws.dto.WsMessage;
|
||||||
|
import com.webgame.webgamebackend.ws.dto.WsOutboundMessage;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|||||||
Reference in New Issue
Block a user