用 Claude Code 开发多人猜拳游戏:Go 语言实践

文章目录

人工备注说明

  • 开发工具GoLang + Claude Code + Doubao-Seed-2.0-Code模型;
  • 这个项目使用Claude Code开发,大约半小时完成90%的代码,然后又花2小时让AI微调代码;
  • 这篇文章也是使用Claude Code编写,手动调整格式;
  • 这项目线上体验地址:https://www.pengyy.com/

作为一名开发者,我一直在探索如何更高效地构建 Web 应用。最近,我使用 Claude Code 开发了一个有趣的多人在线猜拳游戏(石头剪刀布)。这篇文章分享我用 Go 语言和 AI 辅助编程的开发经历。

1、项目概述

这是一个功能完整的多人猜拳游戏,支持:

  • 2-10 人同时游戏
  • 每回合 30 秒倒计时
  • 实时游戏状态更新
  • 玩家胜率统计
  • 房间链接分享
  • IP 地址脱敏显示

2、技术选型

2.1、后端:Go + Gin

选择 Go 是因为它的简单高效,Gin 框架则提供了快速的 HTTP 路由和中间件支持。

2.2、前端:jQuery + Bootstrap

使用简单成熟的技术栈,通过轮询实现实时状态更新。

3、项目架构

采用清晰的分层架构:

复制代码
guess2/
├── main.go                    # 入口点、路由、定时任务
├── controller/
│   └── game_controller.go     # HTTP 请求处理
├── service/
│   └── game_service.go        # 核心业务逻辑
├── repository/
│   └── game_repository.go     # 数据存储
├── models/                     # 实体定义
│   ├── game.go
│   ├── player.go
│   ├── choice.go
│   └── game_status.go
├── dto/                        # 数据传输对象
├── templates/                  # HTML 模板
└── static/                     # CSS/JS 资源

4、Claude Code 开发体验

4.1、从需求到代码

当我描述功能时,Claude Code 能够:

  • 先读取现有项目结构
  • 理解代码风格和模式
  • 生成符合架构的实现代码

比如实现"再来一局"功能时,它自动在各层添加了对应的方法。

4.2、代码质量

生成的代码具有这些特点:

  • 符合 Go 语言惯用法
  • 错误处理完善
  • 注释清晰
  • 与现有代码风格一致

4.3、快速迭代

修改-测试循环非常快。发现问题时,直接描述问题,Claude Code 会定位并修复代码。

5、核心实现

5.1、游戏状态机

复制代码
WAITING(等待玩家加入)
    ↓
PLAYING(游戏进行中)
    ↓
FINISHED(游戏结束)
    ↓
(可重启回到 WAITING)

5.2、定时任务设计

使用 Go 的 time.Ticker 实现两个关键定时任务:

go 复制代码
func startScheduledTasks(gameRepo *repository.GameRepository, gameService *service.GameService) {
    // 每 2 分钟清理过期游戏
    cleanupTicker := time.NewTicker(2 * time.Minute)
    // 每秒检查游戏超时
    checkTicker := time.NewTicker(1 * time.Second)

    for {
        select {
        case <-cleanupTicker.C:
            gameRepo.CleanupExpiredGames()
        case <-checkTicker.C:
            for _, gameID := range gameRepo.GetPlayingGameIDs() {
                gameService.CheckAndFinishGame(gameID)
            }
        }
    }
}

5.3、前端实时更新

采用简单可靠的轮询方案:

javascript 复制代码
const POLLING_INTERVAL = 800; // 每 800ms 更新一次

function startPolling() {
    pollingInterval = setInterval(function() {
        loadGameStatus();
    }, POLLING_INTERVAL);
}

function loadGameStatus() {
    $.ajax({
        url: '/api/game/' + currentGameId + '/status/' + currentPlayerId,
        method: 'GET',
        success: function(response) {
            if (response.success) {
                updateGameUI(response.data);
            }
        }
    });
}

5.4、胜负判定逻辑

go 复制代码
func determineWinners(players []*models.Player) []*models.Player {
    // 收集所有玩家的选择
    choices := make([]models.Choice, 0, len(players))
    for _, p := range players {
        if p.Choice != "" {
            choices = append(choices, p.Choice)
        }
    }

    if len(choices) == 0 {
        return nil
    }

    // 检查是否所有选择都相同(平局)
    allSame := true
    firstChoice := choices[0]
    for _, c := range choices[1:] {
        if c != firstChoice {
            allSame = false
            break
        }
    }
    if allSame {
        return nil
    }

    // 确定获胜的选择
    winningChoice := findWinningChoice(choices)

    // 找出选择了获胜选项的玩家
    var winners []*models.Player
    for _, p := range players {
        if p.Choice == winningChoice {
            winners = append(winners, p)
        }
    }
    return winners
}

6、API 设计

端点 方法 说明
/ GET 首页
/game/:gameId GET 游戏房间
/api/game/create POST 创建游戏
/api/game/:gameId/join POST 加入游戏
/api/game/:gameId/start POST 开始游戏
/api/game/:gameId/choice POST 提交选择
/api/game/:gameId/status GET 获取状态
/api/game/:gameId/restart POST 重新开始

7、开发心得

7.1、AI 编程的优势

  1. 上下文感知 - Claude Code 理解整个项目,不会写出脱节的代码
  2. 快速原型 - 想法到可运行代码的时间大幅缩短
  3. 减少琐碎工作 - 样板代码、重复逻辑都可以交给 AI

7.2、需要注意的点

  1. 人工审查不可少 - AI 偶尔会在业务逻辑上犯错
  2. 测试要充分 - 自己多玩几局,能发现不少边界情况
  3. 保留 git 历史 - 方便对比和回滚

8、运行项目

bash 复制代码
# 克隆项目后
go mod tidy

# 启动服务器
go run main.go

# 浏览器访问 http://localhost:8071

用户aa创建游戏

创建成功,可以把链接分享给好友

用户bb加入游戏

用户bb加入游戏后界面

用户aa开始游戏后界面

用户aa和bb游戏结束界面

9、总结

用 Claude Code 开发这个猜拳游戏是一次很棒的体验。它让我能专注于游戏逻辑和用户体验,而不是纠结于框架细节和样板代码。

Claude Code开发效率真的很高!


来一局吧!✊ ✌️ ✋

附件guess.exe

相关推荐
Aaswk18 小时前
Java Lambda 表达式与流处理
java·开发语言·python
万邦科技Lafite18 小时前
京东item_get接口实战案例:实时商品价格监控全流程解析
java·开发语言·数据库·python·开放api·淘宝开放平台
Cyber4K19 小时前
【Python专项】进阶语法-系统资源监控与数据采集(1)
开发语言·python·php
Le_ee20 小时前
ctfweb:php/php短标签/.haccess+图片马/XXE
开发语言·前端·php
yong999021 小时前
MATLAB读取高光谱图像
开发语言·matlab
2zcode21 小时前
基于MATLAB的肝病风险评估与分期分析系统设计与实现
开发语言·matlab
小小de风呀21 小时前
de风——【从零开始学C++】(五):内存管理
开发语言·c++
ooseabiscuit21 小时前
Laravel6.x核心优化与特性全解析
android·开发语言·javascript
折哥的程序人生 · 物流技术专研21 小时前
Java面试85题图解版(一):基础核心篇
java·开发语言·后端·面试
Hello.Reader1 天前
算法基础(十)——分治思想把大问题拆成小问题
java·开发语言·算法