import pygame
import sys

# 初始化
pygame.init()

# 配置参数
WIDTH, HEIGHT = 800, 600
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
GRAY = (200, 200, 200)
BLUE = (50, 150, 255)
RED = (255, 50, 50)

screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Python 成语接龙")

# 字体设置（请确保系统中有名为 'SimHei' 的黑体字，或者指定一个ttf文件路径）
try:
    font_large = pygame.font.SysFont("SimHei", 48)
    font_small = pygame.font.SysFont("SimHei", 24)
except:
    font_large = pygame.font.SysFont("arial", 48) # 备用

# 模拟词库（实际应用中建议读取外部txt文件）
IDIOM_DB = ["胸有成竹", "竹报平安", "安居乐业", "业精于勤", "勤学苦练", "练习题", "题名榜", "榜上有名"]

class IdiomGame:
    def __init__(self):
        self.history = ["胸有成竹"]  # 已接出的成语列表
        self.input_text = ""        # 当前输入的文字
        self.message = "请输入成语并回车"
        self.game_over = False

    def check_idiom(self, word):
        # 1. 长度检查
        if len(word) < 2:
            return False, "太短了！"
        
        # 2. 接龙逻辑检查：当前首字 == 上一个尾字
        last_word = self.history[-1]
        if word[0] != last_word[-1]:
            return False, f"首字必须是 '{last_word[-1]}'"
        
        # 3. 重复检查
        if word in self.history:
            return False, "这个成语用过了"

        # 4. 词库检查（这里简化为只要输入就过，或者你可以开启下方注释）
        # if word not in IDIOM_DB:
        #     return False, "词库里没这个词"

        return True, "接得漂亮！"

    def handle_input(self, char):
        if not self.game_over:
            self.input_text += char

    def backspace(self):
        self.input_text = self.input_text[:-1]

    def submit(self):
        word = self.input_text.strip()
        is_valid, msg = self.check_idiom(word)
        if is_valid:
            self.history.append(word)
            self.input_text = ""
            self.message = msg
        else:
            self.message = msg

    def draw(self):
        screen.fill(WHITE)

        # 绘制历史记录（显示最后5个）
        display_history = self.history[-5:]
        for i, word in enumerate(display_history):
            color = GRAY if i < len(display_history) - 1 else BLUE
            txt = font_large.render(word, True, color)
            screen.blit(txt, (WIDTH//2 - txt.get_width()//2, 50 + i * 60))

        # 绘制输入框提示
        prompt = font_small.render("下一个：", True, BLACK)
        screen.blit(prompt, (200, 400))

        # 绘制当前输入
        input_surf = font_large.render(self.input_text, True, BLACK)
        pygame.draw.line(screen, BLACK, (280, 450), (550, 450), 2)
        screen.blit(input_surf, (290, 400))

        # 绘制提示信息
        msg_surf = font_small.render(self.message, True, RED)
        screen.blit(msg_surf, (WIDTH//2 - msg_surf.get_width()//2, 500))

        # 绘制说明
        hint = font_small.render("直接输入汉字拼音（演示版支持直接输入），按回车提交", True, GRAY)
        screen.blit(hint, (WIDTH//2 - hint.get_width()//2, 550))

def main():
    game = IdiomGame()
    clock = pygame.time.Clock()

    # 注意：Pygame 原生对中文输入法支持较弱
    # 在这个演示版本中，我们假设用户通过键盘模拟输入汉字
    # 实际开发中，通常需要配合 Tkinter 弹出输入框或使用专门的 UI 库
    
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_RETURN:
                    game.submit()
                elif event.key == pygame.K_BACKSPACE:
                    game.backspace()
                else:
                    # 仅作为演示：将按下的键转为字符（实际中文输入需输入法支持）
                    if event.unicode:
                        game.handle_input(event.unicode)

        game.draw()
        pygame.display.flip()
        clock.tick(30)

if __name__ == "__main__":
    main()