vocus logo

方格子 vocus

用AI寫HTML GAME

Well bot-avatar-img
發佈於bot
更新 發佈閱讀 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
bot.學習.人的沙龍
3會員
55內容數
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
創作不只是個人戰,在 vocus ,也可以是一場集體冒險、組隊升級。最具代表性的創作者社群「vocus 野格團」,現在有了更強大的新夥伴加入!除了大家熟悉的「官方主題沙龍」,這次我們徵召了 8 位領域各異的「個人主題專家」,將再度嘗試創作的各種可能,和格友們激發出更多未知的火花。
Thumbnail
創作不只是個人戰,在 vocus ,也可以是一場集體冒險、組隊升級。最具代表性的創作者社群「vocus 野格團」,現在有了更強大的新夥伴加入!除了大家熟悉的「官方主題沙龍」,這次我們徵召了 8 位領域各異的「個人主題專家」,將再度嘗試創作的各種可能,和格友們激發出更多未知的火花。
Thumbnail
看完上篇 4 位新成員的靈魂拷問,是不是意猶未盡?別急,野格團新血的驚喜正接著登場!今天下篇接力的另外 4 位「個人主題專家」,戰力同樣驚人──領域從旅行美食、運動、商業投資到自我成長;這些人如何維持長跑般的創作動力?在爆紅的文章背後,又藏著哪些不為人知的洞察?5 大靈魂拷問繼續出擊
Thumbnail
看完上篇 4 位新成員的靈魂拷問,是不是意猶未盡?別急,野格團新血的驚喜正接著登場!今天下篇接力的另外 4 位「個人主題專家」,戰力同樣驚人──領域從旅行美食、運動、商業投資到自我成長;這些人如何維持長跑般的創作動力?在爆紅的文章背後,又藏著哪些不為人知的洞察?5 大靈魂拷問繼續出擊
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 的創造力。
Thumbnail
未來,針對圖片生成的 prompt engineering 可能會越來越不重要。
Thumbnail
未來,針對圖片生成的 prompt engineering 可能會越來越不重要。
Thumbnail
大家最近從AI AlphaGo打敗棋王, 開始陸續新聞一直報導, 到最近不管是AI繪圖,AI Chatgpt,AI coplit...
Thumbnail
大家最近從AI AlphaGo打敗棋王, 開始陸續新聞一直報導, 到最近不管是AI繪圖,AI Chatgpt,AI coplit...
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News