可以,我们以五子棋为例,后端接入任意的大模型api就可以实现和大模型下棋了
我们以chatgpt为例写一个和chatgpt下五子棋的html代码,效果如下:
点击查看代码
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>五子棋 vs ChatGPT</title> <style> #board { display: grid; grid-template-columns: repeat(15, 30px); grid-gap: 1px; background-color: #deb887; padding: 10px; width: fit-content; } .cell { width: 30px; height: 30px; background-color: #deb887; border: 1px solid #000; display: flex; justify-content: center; align-items: center; cursor: pointer; } .black { background-color: #000; border-radius: 50%; } .white { background-color: #fff; border-radius: 50%; } </style> </head> <body> <h1>五子棋 vs ChatGPT</h1> <div id="board"></div> <p id="status"></p> <script> const board = document.getElementById('board'); const status = document.getElementById('status'); const size = 15; let gameBoard = Array(size).fill().map(() => Array(size).fill(0)); let currentPlayer = 1; // 1 for player, 2 for AI // Create the board for (let i = 0; i < size * size; i++) { const cell = document.createElement('div'); cell.classList.add('cell'); cell.addEventListener('click', () => makeMove(i)); board.appendChild(cell); } function makeMove(index) { if (currentPlayer !== 1) return; const row = Math.floor(index / size); const col = index % size; if (gameBoard[row][col] !== 0) return; gameBoard[row][col] = 1; updateBoard(); if (checkWin(row, col, 1)) { status.textContent = "你赢了!"; return; } currentPlayer = 2; status.textContent = "AI正在思考..."; setTimeout(aiMove, 1000); } async function aiMove() { try { const response = await fetch('https://api.openai.com/v1/chat/completions', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer YOUR_API_KEY_HERE' // 替换为你的API密钥 }, body: JSON.stringify({ model: "gpt-3.5-turbo", messages: [{ role: "system", content: "你是一个五子棋AI。棋盘是15x15的。你的任务是根据当前棋局给出下一步最佳落子位置。请用'行,列'的格式回复,不要回复其他内容,例如'7,8'。" }, { role: "user", content: `当前棋局:${JSON.stringify(gameBoard)}` }] }) }); const data = await response.json(); const aiMove = data.choices[0].message.content.split(','); const row = parseInt(aiMove[0]); const col = parseInt(aiMove[1]); gameBoard[row][col] = 2; updateBoard(); if (checkWin(row, col, 2)) { status.textContent = "AI赢了!"; return; } currentPlayer = 1; status.textContent = "轮到你了"; } catch (error) { console.error('Error:', error); status.textContent = "AI出错了,请重试"; currentPlayer = 1; } } function updateBoard() { const cells = document.querySelectorAll('.cell'); for (let i = 0; i < size; i++) { for (let j = 0; j < size; j++) { const index = i * size + j; cells[index].className = 'cell'; if (gameBoard[i][j] === 1) { cells[index].classList.add('black'); } else if (gameBoard[i][j] === 2) { cells[index].classList.add('white'); } } } } function checkWin(row, col, player) { const directions = [ [1, 0], [0, 1], [1, 1], [1, -1] ]; for (const [dx, dy] of directions) { let count = 1; for (let i = 1; i < 5; i++) { const newRow = row + i * dx; const newCol = col + i * dy; if (newRow < 0 || newRow >= size || newCol < 0 || newCol >= size || gameBoard[newRow][newCol] !== player) { break; } count++; } for (let i = 1; i < 5; i++) { const newRow = row - i * dx; const newCol = col - i * dy; if (newRow < 0 || newRow >= size || newCol < 0 || newCol >= size || gameBoard[newRow][newCol] !== player) { break; } count++; } if (count >= 5) return true; } return false; } </script> </body> </html>
网友回复