wsy182 2024-12-01 22:28:46 +08:00
parent 1d6593a8f2
commit e54a8c5f00
4 changed files with 39 additions and 6 deletions

View File

@ -9,9 +9,9 @@ def setup_logging():
# 清除所有现有日志处理器,防止重复配置
logger.remove()
# 配置日志文件
# 配置斗地主日志文件
logger.add(
os.path.join(log_dir, "chengdu_mj_engine.log"),
os.path.join(log_dir, "doudizhu_engine.log"), # 斗地主的日志文件
rotation="10 MB",
level="DEBUG",
format="{time:YYYY-MM-DD HH:mm:ss.SSS} {level} {message}",
@ -19,7 +19,17 @@ def setup_logging():
diagnose=True # 启用变量诊断信息
)
# 配置控制台日志(可选)
# 配置麻将日志文件(如果需要)
logger.add(
os.path.join(log_dir, "chengdu_mj_engine.log"),
rotation="10 MB",
level="DEBUG",
format="{time:YYYY-MM-DD HH:mm:ss.SSS} {level} {message}",
backtrace=True,
diagnose=True,
)
# 配置控制台日志
logger.add(
lambda msg: print(msg),
level="DEBUG",

Binary file not shown.

View File

@ -2,7 +2,7 @@ from stable_baselines3 import PPO
from src.environment.dizhu_env import DouDiZhuEnv # 导入斗地主环境
import torch
from configs.log_config import setup_logging
from loguru import logger # 添加 logger
from loguru import logger # 使用日志工具
def train_dizhu_model():
# 创建 DouDiZhuEnv 环境实例

View File

@ -1,6 +1,8 @@
import numpy as np
from loguru import logger
from src.engine.dizhu.player_state import PlayerState
from src.engine.dizhu.deck import Deck
class DiZhuEngine:
def __init__(self):
self.deck = Deck() # 牌堆
@ -28,11 +30,19 @@ class DiZhuEngine:
self.current_player_index = 0
self.game_over = False
# 日志输出
logger.info("游戏初始化完成")
logger.info(f"地主牌: {self.landlord_cards}")
for i, player in enumerate(self.players):
logger.info(f"玩家 {i + 1} ({player.role}) 手牌: {player.hand_cards}")
def get_current_player(self):
"""
获取当前玩家对象
"""
return self.players[self.current_player_index]
current_player = self.players[self.current_player_index]
logger.info(f"当前玩家: 玩家 {self.current_player_index + 1} ({current_player.role})")
return current_player
def step(self, action):
"""
@ -41,30 +51,36 @@ class DiZhuEngine:
"""
current_player = self.get_current_player()
logger.info(f"玩家 {self.current_player_index + 1} 的动作: {action}")
if action == "pass":
# 过牌作为单独的历史记录
current_player.history.append([])
logger.info(f"玩家 {self.current_player_index + 1} 选择过牌")
else:
# 确保动作始终为列表
if not isinstance(action, list):
action = [action]
# 检查动作合法性
if not all(card in current_player.hand_cards for card in action):
logger.error(f"玩家 {self.current_player_index + 1} 的动作非法: {action}")
raise ValueError(f"玩家手牌不足以完成此次出牌: {action}")
# 移除出牌
for card in action:
current_player.hand_cards.remove(card)
# 记录动作
current_player.history.append(action)
logger.info(f"玩家 {self.current_player_index + 1} 出牌: {action}")
# 检查游戏是否结束
if not current_player.hand_cards:
self.game_over = True
logger.info(f"游戏结束!玩家 {self.current_player_index + 1} ({current_player.role}) 获胜")
return f"{current_player.role} 胜利!"
# 切换到下一个玩家
self.current_player_index = (self.current_player_index + 1) % 3
logger.info(f"切换到玩家 {self.current_player_index + 1}")
def get_game_state(self):
"""
@ -83,4 +99,11 @@ class DiZhuEngine:
"current_player_index": self.current_player_index,
"game_over": self.game_over,
}
logger.info("当前游戏状态: ")
logger.info(f"地主牌: {self.landlord_cards}")
for i, player in enumerate(self.players):
logger.info(f"玩家 {i + 1} ({player.role}) 手牌: {player.hand_cards}")
logger.info(f"玩家 {i + 1} 出牌历史: {player.history}")
logger.info(f"当前玩家索引: {self.current_player_index}")
logger.info(f"游戏是否结束: {self.game_over}")
return state