飞行棋游戏:Trae 轻松实现骰子与棋盘对战

飞行棋,作为经典的桌面游戏之一,玩家通过掷骰子决定自己的步数,目标是率先到达终点。这种游戏简单且富有互动性,是亲朋好友间常玩的娱乐项目。尽管规则简单,但要实现游戏的骰子机制、棋盘布局、玩家间的互动等,还是需要一定的代码和逻辑支持。

过去,手动开发飞行棋游戏时,我需要自己处理骰子的随机生成、棋盘格子的布局,以及玩家移动的过程,确保每次掷骰子都能根据步数正确地移动棋子。而现在,通过 Trae IDE,这一切变得简单且快捷。只需输入简单的指令,Trae 就能自动帮我完成整个飞行棋游戏的开发。

💡 我的需求其实很简单

我的需求非常明确:制作一个经典的飞行棋游戏,功能要求如下:

  • 骰子掷点:玩家通过掷骰子来决定步数,骰子结果是随机生成的。
  • 棋盘布局:棋盘设计简单,具有明确的起点和终点,玩家从起点出发,朝终点前进。
  • 玩家交互:玩家通过轮流掷骰子,逐步移动棋子,最先到达终点的一方获胜。
  • 简洁的UI:游戏界面清晰直观,玩家操作方便,体验良好。

尽管规则非常简单,但涉及到骰子的随机性、棋盘的布局以及玩家之间的互动,手动实现这些功能还是需要一定的时间和精力。

✨ Trae 如何理解需求并生成代码?

我只需要在 Trae 中输入一句话:

"生成飞行棋游戏,玩家掷骰子决定步数,目标是先到达终点。"

Trae 会自动解析我的需求并生成完整的游戏代码,包括:

  • 骰子掷点机制:玩家每次点击"掷骰子"按钮时,骰子的点数会随机生成,并显示结果。
  • 棋盘布局:生成一个标准的飞行棋棋盘,包含起点和终点,并为每个格子分配位置。
  • 玩家移动:玩家根据骰子的点数,在棋盘上移动自己的棋子,每次掷骰子后,棋子会自动移动相应的步数。
  • 游戏胜负判定:当玩家的棋子到达终点时,系统会判定该玩家获胜,并显示胜利提示。
  • 简洁的UI设计:游戏界面清晰,骰子和棋盘的显示非常直观,玩家可以轻松进行操作。

只需简单的一句话,Trae 就能自动生成一个完整的飞行棋游戏,带有骰子功能、棋盘布局和玩家间的互动。

🧩 游戏操作简便,互动性强

Trae 生成的飞行棋游戏操作非常简单。玩家只需要点击骰子按钮,系统会随机生成骰子的点数,并根据点数自动移动棋子。每次玩家掷骰子,系统会更新棋盘上的玩家位置,并显示当前的掷骰子结果。

游戏的互动性非常强,玩家通过轮流掷骰子来决定自己的步数,增加了不少游戏的紧张感。每一轮掷骰子都会决定玩家的进度,增加了游戏的不确定性,也让每一局游戏都充满了变数。

🛠 游戏拓展,功能轻松加

虽然 Trae 生成的飞行棋游戏已经非常完善,但它也支持轻松添加更多功能。例如:

  • 多玩家模式:增加更多玩家,支持2到4个玩家进行对战。
  • 特殊规则:可以加入一些特殊格子,例如"前进3步"或"后退2步"这样的规则,增加游戏的趣味性。
  • 得分系统:可以记录每局游戏的结果,增加多局对战和排行榜系统。
  • 动画效果:为骰子的掷点和棋子的移动添加动画效果,使游戏更加生动。

这些功能都可以通过简单的描述,Trae 就能自动生成并无缝集成到现有的游戏中。

这就是飞行棋游戏开发的新体验

通过这次飞行棋游戏的开发,我深刻体验到了 Trae 带来的便捷。从骰子的随机生成,到棋盘的布局,再到玩家的移动和胜负判定,Trae 都能自动帮我完成。这不仅大大节省了开发时间,也提升了我的工作效率,让我可以更加专注于游戏设计。

对于独立开发者或小团队来说,Trae 是一个非常高效的工具,它能够帮助你快速完成游戏开发,专注于创意和功能拓展。

结语

如果你也想制作一个经典的飞行棋游戏,试试 Trae IDE,输入类似的需求:

"生成飞行棋游戏,玩家掷骰子决定步数,目标是先到达终点。"

几秒钟内,Trae 就会生成完整的飞行棋游戏代码,带有骰子掷点、棋盘布局和玩家互动等功能。你可以直接将它嵌入到你的项目中,甚至根据需求继续扩展和优化。

快来体验一下 Trae,让你的飞行棋游戏开发变得更加轻松、有趣!

javascript 复制代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>飞行棋游戏</title>
    <style>
        body {
            margin: 0;
            padding: 0;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            background: linear-gradient(to bottom, #87CEEB, #1E90FF);
            font-family: 'Arial', sans-serif;
            overflow: hidden;
        }
        
        #game-container {
            position: relative;
            width: 800px;
            height: 600px;
            background-color: rgba(255, 255, 255, 0.9);
            border-radius: 10px;
            box-shadow: 0 0 20px rgba(0, 0, 0, 0.3);
            overflow: hidden;
            display: flex;
            flex-direction: column;
        }
        
        #game-board {
            position: relative;
            width: 100%;
            height: 450px;
            background-color: #f5f5f5;
            border-bottom: 2px solid #ddd;
        }
        
        #game-controls {
            display: flex;
            justify-content: space-between;
            align-items: center;
            padding: 15px;
            height: 150px;
        }
        
        .player-info {
            display: flex;
            flex-direction: column;
            align-items: center;
            padding: 10px;
            border-radius: 10px;
            width: 120px;
            height: 120px;
            box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
        }
        
        .player-info.active {
            box-shadow: 0 0 15px rgba(255, 215, 0, 0.8);
            animation: pulse 1.5s infinite;
        }
        
        @keyframes pulse {
            0% { box-shadow: 0 0 15px rgba(255, 215, 0, 0.8); }
            50% { box-shadow: 0 0 25px rgba(255, 215, 0, 1); }
            100% { box-shadow: 0 0 15px rgba(255, 215, 0, 0.8); }
        }
        
        .player-avatar {
            width: 50px;
            height: 50px;
            border-radius: 50%;
            margin-bottom: 10px;
            display: flex;
            justify-content: center;
            align-items: center;
            font-size: 24px;
            font-weight: bold;
            color: white;
        }
        
        .player-name {
            font-weight: bold;
            margin-bottom: 5px;
        }
        
        .player-position {
            font-size: 14px;
            color: #666;
        }
        
        #dice-container {
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
        }
        
        #dice {
            width: 80px;
            height: 80px;
            background-color: white;
            border-radius: 10px;
            margin-bottom: 15px;
            display: flex;
            justify-content: center;
            align-items: center;
            font-size: 36px;
            font-weight: bold;
            box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
            transition: transform 0.5s ease;
            cursor: pointer;
        }
        
        #dice.rolling {
            animation: rolling 0.5s linear infinite;
        }
        
        @keyframes rolling {
            0% { transform: rotateX(0deg) rotateY(0deg); }
            25% { transform: rotateX(90deg) rotateY(45deg); }
            50% { transform: rotateX(180deg) rotateY(90deg); }
            75% { transform: rotateX(270deg) rotateY(135deg); }
            100% { transform: rotateX(360deg) rotateY(180deg); }
        }
        
        #roll-button {
            padding: 8px 20px;
            background-color: #4CAF50;
            color: white;
            border: none;
            border-radius: 5px;
            font-size: 16px;
            cursor: pointer;
            transition: background-color 0.3s;
        }
        
        #roll-button:hover {
            background-color: #45a049;
        }
        
        #roll-button:disabled {
            background-color: #cccccc;
            cursor: not-allowed;
        }
        
        .cell {
            position: absolute;
            width: 40px;
            height: 40px;
            border-radius: 5px;
            display: flex;
            justify-content: center;
            align-items: center;
            font-weight: bold;
            font-size: 14px;
            box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
            transition: transform 0.2s;
        }
        
        .cell:hover {
            transform: scale(1.05);
            z-index: 10;
        }
        
        .cell.normal {
            background-color: #E3F2FD;
            color: #1565C0;
        }
        
        .cell.boost {
            background-color: #C8E6C9;
            color: #2E7D32;
        }
        
        .cell.trap {
            background-color: #FFCDD2;
            color: #C62828;
        }
        
        .cell.teleport {
            background-color: #E1BEE7;
            color: #6A1B9A;
        }
        
        .cell.start {
            background-color: #BBDEFB;
            color: #0D47A1;
            font-size: 16px;
        }
        
        .cell.finish {
            background-color: #FFD54F;
            color: #FF6F00;
            font-size: 16px;
        }
        
        .player-piece {
            position: absolute;
            width: 30px;
            height: 30px;
            border-radius: 50%;
            display: flex;
            justify-content: center;
            align-items: center;
            color: white;
            font-weight: bold;
            z-index: 20;
            box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3);
            transition: all 0.5s ease;
        }
        
        #game-message {
            position: absolute;
            top: 20px;
            left: 50%;
            transform: translateX(-50%);
            background-color: rgba(0, 0, 0, 0.7);
            color: white;
            padding: 10px 20px;
            border-radius: 20px;
            font-size: 18px;
            opacity: 0;
            transition: opacity 0.3s;
            z-index: 100;
        }
        
        #game-message.show {
            opacity: 1;
        }
        
        #game-over {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background-color: rgba(0, 0, 0, 0.8);
            display: flex;
            flex-direction: column;
            justify-content: center;
            align-items: center;
            z-index: 200;
            display: none;
        }
        
        #game-over h2 {
            color: white;
            font-size: 36px;
            margin-bottom: 20px;
            text-shadow: 0 2px 5px rgba(0, 0, 0, 0.5);
        }
        
        #winner-display {
            color: #FFD700;
            font-size: 28px;
            margin-bottom: 30px;
            text-shadow: 0 2px 5px rgba(0, 0, 0, 0.5);
        }
        
        #restart-btn {
            background-color: #4CAF50;
            color: white;
            border: none;
            padding: 10px 20px;
            font-size: 18px;
            border-radius: 5px;
            cursor: pointer;
            transition: background-color 0.3s;
        }
        
        #restart-btn:hover {
            background-color: #45a049;
        }
        
        #start-screen {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background-color: rgba(0, 0, 0, 0.8);
            display: flex;
            flex-direction: column;
            justify-content: center;
            align-items: center;
            z-index: 300;
        }
        
        #start-screen h1 {
            color: white;
            font-size: 40px;
            margin-bottom: 20px;
            text-shadow: 0 2px 5px rgba(0, 0, 0, 0.5);
        }
        
        #start-screen p {
            color: white;
            font-size: 18px;
            margin-bottom: 30px;
            text-align: center;
            max-width: 80%;
            line-height: 1.5;
        }
        
        #start-btn {
            background-color: #4CAF50;
            color: white;
            border: none;
            padding: 15px 30px;
            font-size: 20px;
            border-radius: 5px;
            cursor: pointer;
            transition: background-color 0.3s;
        }
        
        #start-btn:hover {
            background-color: #45a049;
        }
        
        @media (max-width: 820px) {
            #game-container {
                width: 95%;
                height: 90vh;
            }
            
            #game-board {
                height: 70%;
            }
            
            #game-controls {
                height: 30%;
            }
            
            .player-info {
                width: 100px;
                height: 100px;
            }
        }
    </style>
</head>
<body>
    <div id="game-container">
        <div id="game-board"></div>
        
        <div id="game-controls">
            <div id="player1-info" class="player-info">
                <div id="player1-avatar" class="player-avatar">1</div>
                <div id="player1-name" class="player-name">玩家1</div>
                <div id="player1-position" class="player-position">位置: 0</div>
            </div>
            
            <div id="dice-container">
                <div id="dice">?</div>
                <button id="roll-button">掷骰子</button>
            </div>
            
            <div id="player2-info" class="player-info">
                <div id="player2-avatar" class="player-avatar">2</div>
                <div id="player2-name" class="player-name">玩家2</div>
                <div id="player2-position" class="player-position">位置: 0</div>
            </div>
        </div>
        
        <div id="game-message"></div>
        
        <div id="game-over">
            <h2>游戏结束</h2>
            <div id="winner-display">玩家1 获胜!</div>
            <button id="restart-btn">再来一局</button>
        </div>
        
        <div id="start-screen">
            <h1>飞行棋</h1>
            <p>轮流掷骰子,按照骰子点数前进,谁先到达终点谁获胜!</p>
            <p>路上有各种特殊格子:绿色格子可以额外前进,红色格子会倒退,紫色格子可以传送。</p>
            <button id="start-btn">开始游戏</button>
        </div>
    </div>
    
    <script>
        // 获取游戏元素
        const gameBoard = document.getElementById('game-board');
        const dice = document.getElementById('dice');
        const rollButton = document.getElementById('roll-button');
        const player1Info = document.getElementById('player1-info');
        const player2Info = document.getElementById('player2-info');
        const player1Position = document.getElementById('player1-position');
        const player2Position = document.getElementById('player2-position');
        const gameMessage = document.getElementById('game-message');
        const gameOverScreen = document.getElementById('game-over');
        const winnerDisplay = document.getElementById('winner-display');
        const restartBtn = document.getElementById('restart-btn');
        const startScreen = document.getElementById('start-screen');
        const startBtn = document.getElementById('start-btn');
        
        // 游戏常量
        const TOTAL_CELLS = 50; // 总格子数
        const BOARD_WIDTH = 700; // 棋盘宽度
        const BOARD_HEIGHT = 350; // 棋盘高度
        const CELL_TYPES = {
            NORMAL: 'normal',
            BOOST: 'boost',
            TRAP: 'trap',
            TELEPORT: 'teleport',
            START: 'start',
            FINISH: 'finish'
        };
        
        // 游戏变量
        let cells = [];
        let players = [
            { id: 1, position: 0, color: '#FF5252', name: '玩家1' },
            { id: 2, position: 0, color: '#2196F3', name: '玩家2' }
        ];
        let currentPlayerIndex = 0;
        let gameRunning = false;
        let isRolling = false;
        let playerPieces = [];
        
        // 初始化游戏
        function initGame() {
            // 重置游戏变量
            cells = [];
            players[0].position = 0;
            players[1].position = 0;
            currentPlayerIndex = 0;
            gameRunning = true;
            
            // 清空棋盘
            gameBoard.innerHTML = '';
            playerPieces = [];
            
            // 创建棋盘格子
            createBoard();
            
            // 创建玩家棋子
            createPlayerPieces();
            
            // 更新玩家信息显示
            updatePlayerInfo();
            
            // 设置当前玩家
            setCurrentPlayer(0);
        }
        
        // 创建棋盘
        function createBoard() {
            // 定义棋盘路径(蛇形路径)
            const pathCoordinates = [];
            const rows = 5;
            const cols = 10;
            const cellWidth = BOARD_WIDTH / cols;
            const cellHeight = BOARD_HEIGHT / rows;
            
            // 生成蛇形路径坐标
            for (let row = rows - 1; row >= 0; row--) {
                if ((rows - 1 - row) % 2 === 0) {
                    // 从左到右
                    for (let col = 0; col < cols; col++) {
                        pathCoordinates.push({
                            x: col * cellWidth + cellWidth / 2,
                            y: row * cellHeight + cellHeight / 2
                        });
                    }
                } else {
                    // 从右到左
                    for (let col = cols - 1; col >= 0; col--) {
                        pathCoordinates.push({
                            x: col * cellWidth + cellWidth / 2,
                            y: row * cellHeight + cellHeight / 2
                        });
                    }
                }
            }
            
            // 创建格子
            for (let i = 0; i < TOTAL_CELLS; i++) {
                let cellType = CELL_TYPES.NORMAL;
                let cellText = i.toString();
                
                // 设置特殊格子
                if (i === 0) {
                    cellType = CELL_TYPES.START;
                    cellText = '起点';
                } else if (i === TOTAL_CELLS - 1) {
                    cellType = CELL_TYPES.FINISH;
                    cellText = '终点';
                } else {
                    // 随机分配特殊格子
                    const rand = Math.random();
                    if (rand < 0.15) {
                        cellType = CELL_TYPES.BOOST;
                        cellText = '+2';
                    } else if (rand < 0.3) {
                        cellType = CELL_TYPES.TRAP;
                        cellText = '-2';
                    } else if (rand < 0.4) {
                        cellType = CELL_TYPES.TELEPORT;
                        cellText = '传送';
                    }
                }
                
                // 创建格子元素
                const cell = document.createElement('div');
                cell.className = `cell ${cellType}`;
                cell.textContent = cellText;
                
                // 设置格子位置
                const coord = pathCoordinates[i];
                cell.style.left = (coord.x - 20) + 'px'; // 中心点偏移
                cell.style.top = (coord.y - 20) + 'px';
                
                // 添加到棋盘
                gameBoard.appendChild(cell);
                
                // 保存格子信息
                cells.push({
                    element: cell,
                    type: cellType,
                    x: coord.x,
                    y: coord.y,
                    index: i
                });
            }
        }
        
        // 创建玩家棋子
        function createPlayerPieces() {
            for (let i = 0; i < players.length; i++) {
                const player = players[i];
                
                // 创建棋子元素
                const piece = document.createElement('div');
                piece.className = 'player-piece';
                piece.textContent = player.id;
                piece.style.backgroundColor = player.color;
                
                // 设置初始位置(起点)
                const startCell = cells[0];
                const offsetX = i === 0 ? -15 : 15; // 两个棋子错开放置
                piece.style.left = (startCell.x + offsetX - 15) + 'px';
                piece.style.top = (startCell.y - 15) + 'px';
                
                // 添加到棋盘
                gameBoard.appendChild(piece);
                
                // 保存棋子元素
                playerPieces[i] = piece;
            }
        }
        
        // 更新玩家信息显示
        function updatePlayerInfo() {
            player1Position.textContent = `位置: ${players[0].position}`;
            player2Position.textContent = `位置: ${players[1].position}`;
        }
        
        // 设置当前玩家
        function setCurrentPlayer(index) {
            currentPlayerIndex = index;
            
            // 更新UI显示
            if (index === 0) {
                player1Info.classList.add('active');
                player2Info.classList.remove('active');
            } else {
                player1Info.classList.remove('active');
                player2Info.classList.add('active');
            }
            
            // 启用掷骰子按钮
            rollButton.disabled = false;
        }
        
        // 掷骰子
        function rollDice() {
            if (isRolling || !gameRunning) return;
            
            isRolling = true;
            rollButton.disabled = true;
            dice.classList.add('rolling');
            
            // 随机显示数字动画
            let rollCount = 0;
            const maxRolls = 10;
            const rollInterval = setInterval(() => {
                dice.textContent = Math.floor(Math.random() * 6) + 1;
                rollCount++;
                
                if (rollCount >= maxRolls) {
                    clearInterval(rollInterval);
                    const result = Math.floor(Math.random() * 6) + 1;
                    finishRoll(result);
                }
            }, 100);
        }
        
        // 完成掷骰子
        function finishRoll(result) {
            dice.textContent = result;
            dice.classList.remove('rolling');
            
            // 移动当前玩家
            setTimeout(() => {
                movePlayer(currentPlayerIndex, result);
            }, 500);
        }
        
        // 移动玩家
        function movePlayer(playerIndex, steps) {
            const player = players[playerIndex];
            const targetPosition = Math.min(player.position + steps, TOTAL_CELLS - 1);
            
            // 动画移动到目标位置
            animatePlayerMove(playerIndex, player.position, targetPosition, () => {
                // 更新玩家位置
                player.position = targetPosition;
                updatePlayerInfo();
                
                // 检查特殊格子效果
                checkCellEffect(playerIndex);
            });
        }
        
        // 动画移动玩家
        function animatePlayerMove(playerIndex, fromPosition, toPosition, callback) {
            let currentStep = fromPosition;
            const piece = playerPieces[playerIndex];
            const offsetX = playerIndex === 0 ? -15 : 15; // 两个棋子错开放置
            
            const moveInterval = setInterval(() => {
                if (currentStep < toPosition) {
                    currentStep++;
                    const cell = cells[currentStep];
                    piece.style.left = (cell.x + offsetX - 15) + 'px';
                    piece.style.top = (cell.y - 15) + 'px';
                } else {
                    clearInterval(moveInterval);
                    if (callback) callback();
                }
            }, 300);
        }
        
        // 检查格子效果
        function checkCellEffect(playerIndex) {
            const player = players[playerIndex];
            const currentCell = cells[player.position];
            
            // 根据格子类型执行不同效果
            switch (currentCell.type) {
                case CELL_TYPES.BOOST:
                    // 前进2步
                    showMessage(`${player.name} 踩到了加速格,额外前进2步!`);
                    setTimeout(() => {
                        movePlayer(playerIndex, 2);
                    }, 1000);
                    return; // 不切换玩家,等待额外移动完成
                    
                case CELL_TYPES.TRAP:
                    // 后退2步
                    showMessage(`${player.name} 踩到了陷阱,后退2步!`);
                    setTimeout(() => {
                        const newPosition = Math.max(0, player.position - 2);
                        animatePlayerMove(playerIndex, player.position, newPosition, () => {
                            player.position = newPosition;
                            updatePlayerInfo();
                            endTurn();
                        });
                    }, 1000);
                    return; // 不切换玩家,等待额外移动完成
                    
                case CELL_TYPES.TELEPORT:
                    // 随机传送
                    const teleportTo = Math.floor(Math.random() * (TOTAL_CELLS - 1));
                    showMessage(`${player.name} 踩到了传送格,传送到位置 ${teleportTo}!`);
                    setTimeout(() => {
                        animatePlayerMove(playerIndex, player.position, teleportTo, () => {
                            player.position = teleportTo;
                            updatePlayerInfo();
                            endTurn();
                        });
                    }, 1000);
                    return; // 不切换玩家,等待传送完成
                    
                case CELL_TYPES.FINISH:
                    // 到达终点,游戏结束
                    gameOver(playerIndex);
                    return;
            }
            
            // 普通格子,结束回合
            endTurn();
        }
        
        // 结束当前回合
        function endTurn() {
            isRolling = false;
            
            // 切换到下一个玩家
            const nextPlayerIndex = (currentPlayerIndex + 1) % players.length;
            setTimeout(() => {
                setCurrentPlayer(nextPlayerIndex);
            }, 500);
        }
        
        // 显示游戏消息
        function showMessage(text) {
            gameMessage.textContent = text;
            gameMessage.classList.add('show');
            
            setTimeout(() => {
                gameMessage.classList.remove('show');
            }, 2000);
        }
        
        // 游戏结束
        function gameOver(winnerIndex) {
            gameRunning = false;
            const winner = players[winnerIndex];
            winnerDisplay.textContent = `${winner.name} 获胜!`;
            gameOverScreen.style.display = 'flex';
        }
        
        // 重新开始游戏
        function restartGame() {
            gameOverScreen.style.display = 'none';
            initGame();
        }
        
        // 开始游戏
        function startGame() {
            startScreen.style.display = 'none';
            initGame();
        }
        
        // 事件监听
        rollButton.addEventListener('click', rollDice);
        restartBtn.addEventListener('click', restartGame);
        startBtn.addEventListener('click', startGame);
        
        // 调整棋盘大小
        function resizeBoard() {
            const container = document.getElementById('game-container');
            if (window.innerWidth < 820) {
                container.style.width = '95%';
                container.style.height = '90vh';
            } else {
                container.style.width = '800px';
                container.style.height = '600px';
            }
        }
        
        // 监听窗口大小变化
        window.addEventListener('resize', resizeBoard);
        
        // 初始化棋盘大小
        resizeBoard();
    </script>
</body>
</html>
相关推荐
野生的码农19 小时前
放过自己,降低预期,及时行乐
android·ai编程
程序员陆业聪19 小时前
裸奔的 AI 助手和装备齐全的 AI 助手,根本不是同一个东西
ai编程
南木元元1 天前
别只会用 Cursor!它的提示词工程才是真正的大招
ai编程·cursor
對玛祷至昏1 天前
Trae AI编程入门
ai编程
小徐敲java1 天前
opencode配置本地模型
ai编程
序舟归桁1 天前
OpenClaw 多智能体在编程领域的实践与挑战
ai编程
序舟归桁1 天前
Harness Engineering:AI Agent 时代,工程师的新核心能力
ai编程
攻城狮_老李1 天前
从零开始理解 Agent Skills:动手实践 —— 创建第一个 Skill
openai·agent·ai编程
甲维斯1 天前
来看看GLM5.1到底升级了什么!
ai编程