createGame 创建游戏
(isBlindfold bool, groupCode, senderUin int64, senderName string)
| 344 | |
| 345 | // createGame 创建游戏 |
| 346 | func createGame(isBlindfold bool, groupCode, senderUin int64, senderName string) (msg message.Message, err error) { |
| 347 | room, ok := chessRoomMap.Load(groupCode) |
| 348 | if !ok { |
| 349 | chessRoomMap.Store(groupCode, &chessRoom{ |
| 350 | chessGame: chess.NewGame(), |
| 351 | whitePlayer: senderUin, |
| 352 | whiteName: senderName, |
| 353 | blackPlayer: 0, |
| 354 | blackName: "", |
| 355 | drawPlayer: 0, |
| 356 | lastMoveTime: time.Now().Unix(), |
| 357 | isBlindfold: isBlindfold, |
| 358 | whiteErr: false, |
| 359 | blackErr: false, |
| 360 | }) |
| 361 | text := "已创建新的对局, 发送「下棋」或「chess」可加入对局。" |
| 362 | if isBlindfold { |
| 363 | text = "已创建新的盲棋对局, 发送「盲棋」或「blind」可加入对局。" |
| 364 | } |
| 365 | msg = append(msg, message.Text(text)) |
| 366 | return |
| 367 | } |
| 368 | msg = message.Message{message.At(senderUin)} |
| 369 | if room.blackPlayer != 0 { |
| 370 | // 检测对局是否已存在超过 6 小时 |
| 371 | if (time.Now().Unix() - room.lastMoveTime) > 21600 { |
| 372 | msg, err = abortGame(*room, groupCode, "对局已存在超过 6 小时, 游戏结束。") |
| 373 | msg = append(msg, message.Text("\n\n已有对局已被中断, 如需创建新对局请重新发送指令。")) |
| 374 | msg = append(msg, message.At(senderUin)) |
| 375 | return |
| 376 | } |
| 377 | // 对局在进行 |
| 378 | msg = append(msg, message.Text("对局已在进行中, 无法创建或加入对局, 当前对局玩家为: ")) |
| 379 | if room.whitePlayer != 0 { |
| 380 | msg = append(msg, message.At(room.whitePlayer)) |
| 381 | } |
| 382 | if room.blackPlayer != 0 { |
| 383 | msg = append(msg, message.At(room.blackPlayer)) |
| 384 | } |
| 385 | msg = append(msg, message.Text(", 群主或管理员发送「中断」或「abort」可中断对局(自动判和)。")) |
| 386 | return |
| 387 | } |
| 388 | if senderUin == room.whitePlayer { |
| 389 | msg = append(msg, message.Text("请等候其他玩家加入游戏。")) |
| 390 | return |
| 391 | } |
| 392 | if room.isBlindfold && !isBlindfold { |
| 393 | msg = append(msg, message.Text("已创建盲棋对局, 请加入或等待盲棋对局结束之后创建普通对局。")) |
| 394 | return |
| 395 | } |
| 396 | if !room.isBlindfold && isBlindfold { |
| 397 | msg = append(msg, message.Text("已创建普通对局, 请加入或等待普通对局结束之后创建盲棋对局。")) |
| 398 | return |
| 399 | } |
| 400 | room.blackPlayer = senderUin |
| 401 | room.blackName = senderName |
| 402 | chessRoomMap.Store(groupCode, room) |
| 403 | var boardImgEle message.Segment |
no test coverage detected