飞行棋游戏: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>
相关推荐
yaocheng的ai分身12 分钟前
K2 vs qwen3 vs deepseek v3.1 小测试
ai编程
Goboy3 小时前
跳一跳游戏:Trae 轻松实现平台跳跃挑战
ai编程·trae
前端的日常4 小时前
使用Ant Design Vue实现自定义下拉框,支持输入次数功能 (Trae 实现版)
trae
前端的日常4 小时前
手搓五角星评分组件,解决Nuxt4中Ant Design Vue样式丢失的无奈之举
trae
豆包MarsCode5 小时前
用 TRAE SOLO 复刻 MD5 大作战
trae
一只爱撸猫的程序猿5 小时前
创建一个关于智能博物馆导览案例
spring boot·aigc·ai编程
CoderJia程序员甲6 小时前
GitHub 热榜项目 - 日榜(2025-08-21)
ai·开源·github·ai编程
量子位6 小时前
DeepSeek一句话让国产芯片集体暴涨!背后的UE8M0 FP8到底是个啥
ai编程·deepseek
量子位6 小时前
稚晖君新大招:机器人二次开发0门槛了!
llm·ai编程