用AI寫HTML GAME

更新於 發佈於 閱讀時間約 15 分鐘

這次「bot.學習.人」用了google gemini 寫了一個HTML 5的遊戲,一方面是因為自己不知道HTML 5的遊戲怎麼寫,所以想用AI 學習一下,一方面也是想試試AI 寫出來的Code 能否直接用。

下的prompt 很簡單,就只有一句話: 「幫我寫一個 HTML5 的黑白棋遊戲。」,很快的,Gemini 就產生了一段說明,以及馬上就生成一段HTML檔案,還自動分成CSS、html和js。

html 如下:

<!DOCTYPE html>
<html>
<head>
<title>黑白棋</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1>黑白棋</h1>
<div id="board"></div>
<p id="turn">輪到:黑棋</p>
<script src="script.js"></script>
</body>
</html>

js 如下:

const boardElement = document.getElementById('board');
const turnElement = document.getElementById('turn');
const boardSize = 8;
let board = Array(boardSize).fill(null).map(() => Array(boardSize).fill(null));
let currentPlayer = 'black';

function initializeBoard() {
for (let i = 0; i < boardSize; i++) {
for (let j = 0; j < boardSize; j++) {
const cell = document.createElement('div');
cell.classList.add('cell');
cell.dataset.row = i;
cell.dataset.col = j;
cell.addEventListener('click', handleCellClick);
boardElement.appendChild(cell);
}
}

// 初始棋子
board[3][3] = 'white';
board[3][4] = 'black';
board[4][3] = 'black';
board[4][4] = 'white';

renderBoard();
}

function renderBoard() {
boardElement.innerHTML = '';
for (let i = 0; i < boardSize; i++) {
for (let j = 0; j < boardSize; j++) {
const cell = document.createElement('div');
cell.classList.add('cell');
cell.dataset.row = i;
cell.dataset.col = j;
cell.addEventListener('click', handleCellClick);

if (board[i][j] === 'black') {
cell.classList.add('black');
} else if (board[i][j] === 'white') {
cell.classList.add('white');
}

boardElement.appendChild(cell);
}
}
updateTurnDisplay();
highlightAvailableMoves();
}

function updateTurnDisplay() {
turnElement.textContent = `輪到:${currentPlayer === 'black' ? '黑棋' : '白棋'}`;
}

function handleCellClick(event) {
const row = parseInt(event.target.dataset.row);
const col = parseInt(event.target.dataset.col);

if (isValidMove(row, col)) {
placePiece(row, col);
flipPieces(row, col);
switchPlayer();
renderBoard();
}
}

function isValidMove(row, col) {
if (board[row][col] !== null) {
return false;
}

const directions = [
[-1, 0], [1, 0], [0, -1], [0, 1], // 水平垂直
[-1, -1], [-1, 1], [1, -1], [1, 1] // 對角線
];

for (const [dr, dc] of directions) {
let r = row + dr;
let c = col + dc;
let foundOpponent = false;

while (r >= 0 && r < boardSize && c >= 0 && c < boardSize && board[r][c] !== null && board[r][c] !== currentPlayer) {
foundOpponent = true;
r += dr;
c += dc;
}

if (foundOpponent && r >= 0 && r < boardSize && c >= 0 && c < boardSize && board[r][c] === currentPlayer) {
return true;
}
}

return false;
}

function placePiece(row, col) {
board[row][col] = currentPlayer;
}

function flipPieces(row, col) {
const directions = [
[-1, 0], [1, 0], [0, -1], [0, 1], // 水平垂直
[-1, -1], [-1, 1], [1, -1], [1, 1] // 對角線
];

for (const [dr, dc] of directions) {
let r = row + dr;
let c = col + dc;
let piecesToFlip = [];
let foundOpponent = false;

while (r >= 0 && r < boardSize && c >= 0 && c < boardSize && board[r][c] !== null && board[r][c] !== currentPlayer) {
foundOpponent = true;
piecesToFlip.push([r, c]);
r += dr;
c += dc;
}

if (foundOpponent && r >= 0 && r < boardSize && c >= 0 && c < boardSize && board[r][c] === currentPlayer) {
for (const [flipR, flipC] of piecesToFlip) {
board[flipR][flipC] = currentPlayer;
}
}
}
}

function switchPlayer() {
currentPlayer = currentPlayer === 'black' ? 'white' : 'black';
}

function getAvailableMoves() {
const availableMoves = [];
for (let i = 0; i < boardSize; i++) {
for (let j = 0; j < boardSize; j++) {
if (isValidMove(i, j)) {
availableMoves.push([i, j]);
}
}
}
return availableMoves;
}

function highlightAvailableMoves() {
const availableMoves = getAvailableMoves();
const cells = document.querySelectorAll('.cell');
cells.forEach(cell => {
cell.classList.remove('available');
const row = parseInt(cell.dataset.row);
const col = parseInt(cell.dataset.col);
if (availableMoves.some(move => move[0] === row && move[1] === col)) {
cell.classList.add('available');
}
});
}

// 遊戲開始
initializeBoard();

css如下:

body {
font-family: sans-serif;
display: flex;
flex-direction: column;
align-items: center;
}

#board {
display: grid;
grid-template-columns: repeat(8, 50px);
grid-template-rows: repeat(8, 50px);
border: 2px solid black;
}

.cell {
width: 50px;
height: 50px;
border: 1px solid #ccc;
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
}

.cell.black::before {
content: '';
display: block;
width: 40px;
height: 40px;
border-radius: 50%;
background-color: black;
}

.cell.white::before {
content: '';
display: block;
width: 40px;
height: 40px;
border-radius: 50%;
background-color: white;
border: 1px solid black;
}

.cell.available {
background-color: lightgreen;
}

為了試試看能不能用,部署到自己的網頁,果然可以用,AI寫Code實在是太厲害了。



留言
avatar-img
留言分享你的想法!
avatar-img
bot.學習.人的沙龍
1會員
40內容數
2025/05/20
這個記帳機器人,完全是因為工作需要而開發的。以下這段程式也是在google app script 開發的,只是串接到telegarm 機器人。
Thumbnail
2025/05/20
這個記帳機器人,完全是因為工作需要而開發的。以下這段程式也是在google app script 開發的,只是串接到telegarm 機器人。
Thumbnail
2025/03/01
如果在一個群組裏,大家講不同的語言怎麼辦呢? 「bot.學習.人」因為工作的需要,團隊裏有外國人,為了避免大家溝通有困難,也免去了時時要線上翻譯,所以作了一個在群組裏自動翻譯的機器人。用到的是Google 提供的免費服務哦。 如果您有使用google app script,下面這一行就可以有
2025/03/01
如果在一個群組裏,大家講不同的語言怎麼辦呢? 「bot.學習.人」因為工作的需要,團隊裏有外國人,為了避免大家溝通有困難,也免去了時時要線上翻譯,所以作了一個在群組裏自動翻譯的機器人。用到的是Google 提供的免費服務哦。 如果您有使用google app script,下面這一行就可以有
2025/02/28
如果您要管理telegram 社群,那您需要一個群管機器人,群管機器人可以把您設定歡迎信息,和初入群的群友打招呼,做基本的驗證,並且說明群規。 今天,「bot.學習.人」就說明一下如何用GroupHelp群管機器人 一、把群管機器人加到您的群 二、把它變成群管理員 三、變成群管理員之後,
Thumbnail
2025/02/28
如果您要管理telegram 社群,那您需要一個群管機器人,群管機器人可以把您設定歡迎信息,和初入群的群友打招呼,做基本的驗證,並且說明群規。 今天,「bot.學習.人」就說明一下如何用GroupHelp群管機器人 一、把群管機器人加到您的群 二、把它變成群管理員 三、變成群管理員之後,
Thumbnail
看更多
你可能也想看
Thumbnail
透過玩桌遊的方式學習AI生成圖像技巧,在充滿樂趣的活動中,學會如何操作工具及生成圖像技巧。這款遊戲預計下個月將開設實體課程,適合所有對AI有興趣的人、AI繪圖新手及藝術愛好者。
Thumbnail
透過玩桌遊的方式學習AI生成圖像技巧,在充滿樂趣的活動中,學會如何操作工具及生成圖像技巧。這款遊戲預計下個月將開設實體課程,適合所有對AI有興趣的人、AI繪圖新手及藝術愛好者。
Thumbnail
AlphaGo 的開發,讓人工智慧在圍棋的研究讓更多人被看到,也看到它成熟的結果。現代的圍棋教學和棋手訓練,也或多或少會借鏡各類的AI系統做學習。然而,教學的歷程,過度追求AI的棋步和棋法,有時會讓小朋友難以理解。一步登天的方式,有時反而會讓同學走得更坎坷。
Thumbnail
AlphaGo 的開發,讓人工智慧在圍棋的研究讓更多人被看到,也看到它成熟的結果。現代的圍棋教學和棋手訓練,也或多或少會借鏡各類的AI系統做學習。然而,教學的歷程,過度追求AI的棋步和棋法,有時會讓小朋友難以理解。一步登天的方式,有時反而會讓同學走得更坎坷。
Thumbnail
生成式人工智慧可以輸出文章、圖片、影片、音樂和簡報等內容,就連創建網站都不必學習程式碼。Websim.ai 是一個利用 AI 技術來創建網站的體驗平台,輸入簡單的文字即可生成互動式網站。目前開放免費使用,AI 會根據指令生成相應功能
Thumbnail
生成式人工智慧可以輸出文章、圖片、影片、音樂和簡報等內容,就連創建網站都不必學習程式碼。Websim.ai 是一個利用 AI 技術來創建網站的體驗平台,輸入簡單的文字即可生成互動式網站。目前開放免費使用,AI 會根據指令生成相應功能
Thumbnail
最新的AI趨勢讓人眼花撩亂,不知要如何開始學習?本文介紹了作者對AI的使用和體驗,以及各類AI工具以及推薦的選擇。最後強調了AI是一個很好用的工具,可以幫助人們節省時間並提高效率。鼓勵人們保持好奇心,不停止學習,並提出了對健康生活和開心生活的祝福。
Thumbnail
最新的AI趨勢讓人眼花撩亂,不知要如何開始學習?本文介紹了作者對AI的使用和體驗,以及各類AI工具以及推薦的選擇。最後強調了AI是一個很好用的工具,可以幫助人們節省時間並提高效率。鼓勵人們保持好奇心,不停止學習,並提出了對健康生活和開心生活的祝福。
Thumbnail
這篇文章介紹瞭如何利用生成式AI(GenAI)來提高學習效率,包括文章重點整理、完善知識體系、客製化學習回饋、提供多元觀點等方法。同時提醒使用者應注意內容的信效度,保持學術誠信,適當運用GenAI能大幅提升工作效率。
Thumbnail
這篇文章介紹瞭如何利用生成式AI(GenAI)來提高學習效率,包括文章重點整理、完善知識體系、客製化學習回饋、提供多元觀點等方法。同時提醒使用者應注意內容的信效度,保持學術誠信,適當運用GenAI能大幅提升工作效率。
Thumbnail
AI 繪圖是一種利用人工智慧技術,根據文字描述,生成出各種風格和主題的圖片的方法,不僅可以讓你實現你的想像力,還可以讓你了解到 AI 的創造力。
Thumbnail
AI 繪圖是一種利用人工智慧技術,根據文字描述,生成出各種風格和主題的圖片的方法,不僅可以讓你實現你的想像力,還可以讓你了解到 AI 的創造力。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News