นายอิศรานุวัฒน์ อุ่นแก้ว วฟ1/2 30094
ความเป็นมา
เป็นเกมที่เล่นโดยผู้เล่น 2 คน ที่ผลัดกันใส่เครื่องหมาย “X” และ “O” บนกระดานขนาด 3×3 จนกว่าจะมีผู้ชนะหรือเกมจบลงที่เสมอ เเละปัจจุบันได้พัฒนาขึ้นเพื่อทำให้สามารถเล่นได้บนเว็บเบราว์เซอร์ โดยไม่ต้องติดตั้งโปรแกรมเสริมฃ
วัตถุประสงค์
หลักของการพัฒนาเกมOX ใช้สำหรับให้ผู้เล่น 2 คนได้แข่งขันกัน อีกทั้งยังเป็นตัวอย่างของการพัฒนาแอปพลิเคชันเว็บที่ง่ายต่อการเข้าใจและขยายความ
ขอบเขต
-กระดานขนาด 3×3 ที่ผู้เล่นจะผลัดกันใส่เครื่องหมาย “X” และ “O” -จะแสดงผลผู้ชนะเมื่อ มีผู้เล่นชนะเรียงกัน แนวตั้ง แนวนอน หรือแนวทะเเยง -เมื่อเกมจบลง จะแสดงผลว่าผู้เล่นคนใดชนะหรือเสมอ และสามารถเริ่มเกมใหม่ได้
ประโยชน์ที่คาดว่าจะได้รับ
-ผู้เล่นจะได้รับความบันเทิงและสามารถพัฒนาไหวพริบในการเล่นเกม -สามารถนำไปประยุกต์ใช้หรือขยายความในโครงการพัฒนาเว็บอื่นๆ ที่ต้องการการโต้ตอบระหว่างผู้ใช้และระบบฃ
ความรู้ที่เกี่ยวข้อง
HTML: ใช้ในการสร้างโครงสร้างของหน้าเว็บและส่วนประกอบต่างๆ CSS: ใช้ในการจัดรูปแบบกระดานเกม ทำให้กระดานดูสวยงามและเป็นระเบียบ JavaScript: ใช้ในการควบคุมการทำงานของเกม เช่น การใส่เครื่องหมาย การตรวจสอบผู้ชนะ การสลับผู้เล่น และการเริ่มเกมใหม่ DOM Manipulation: การควบคุมและเปลี่ยนแปลงเนื้อหาในหน้าเว็บแบบไดนามิกฃ
สรุปวิธีการใช้งานโปรแกรม
1.เปิดหน้าเว็บที่มีเกม 2.ผู้เล่นคนแรกคลิกที่ช่องว่างใดๆ บนกระดานเพื่อวางเครื่องหมาย X O 3.ผู้เล่นคนที่สองคลิกที่ช่องว่างอื่นๆ เพื่อวางเครื่องหมาย ที่ไม่ซ้ำกับผู้เล่นคนแรก 4.ผู้เล่นจะผลัดกันเล่นจนกว่าจะมีผู้ชนะ หรือจนกระดานเต็มและไม่มีใครชนะ (เสมอ) 5.เมื่อเกมจบลง จะแสดงผลลัพธ์และสามารถกดปุ่ม “เริ่มเกมใหม่” เพื่อเริ่มเล่นอีกครั้ง
สรุปผลการทดลอง
จากการทดลองใช้งาน เกมOX ทำงานได้อย่างถูกต้องบนเว็บเบราว์เซอร์มาตรฐาน ผู้เล่นสามารถเล่นได้อย่างราบรื่น มีการตรวจสอบผู้ชนะได้อย่างแม่นยำ และสามารถรีเซ็ตเกมใหม่ได้อย่างรวดเร็ว
เอกสารอ้างอิง
https://www.youtube.com/shorts/WvBNyecBByA
<!DOCTYPE html>
<html lang="th">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>เกมส์ OX</title>
<style>
body {
display: flex;
flex-direction: column;
align-items: center;
font-family: Arial, sans-serif;
}
.board {
display: grid;
grid-template-columns: repeat(3, 100px);
grid-template-rows: repeat(3, 100px);
gap: 5px;
margin: 20px 0;
}
.cell {
width: 100px;
height: 100px;
display: flex;
align-items: center;
justify-content: center;
font-size: 2rem;
border: 2px solid #000;
cursor: pointer;
background-color: #f0f0f0;
transition: background-color 0.3s;
}
.cell:hover {
background-color: #e0e0e0;
}
#message {
margin-top: 20px;
font-size: 1.5rem;
}
</style>
</head>
<body>
<h1>เกมส์ OX</h1>
<div class="board" id="board"></div>
<div id="message"></div>
<button onclick="resetGame()">เริ่มใหม่</button>
<script>
const boardElement = document.getElementById('board');
const messageElement = document.getElementById('message');
let currentPlayer = 'X';
const board = Array(3).fill(null).map(() => Array(3).fill(null));
function createBoard() {
boardElement.innerHTML = '';
for (let row = 0; row < 3; row++) {
for (let col = 0; col < 3; col++) {
const cell = document.createElement('div');
cell.className = 'cell';
cell.dataset.row = row;
cell.dataset.col = col;
cell.addEventListener('click', handleClick);
boardElement.appendChild(cell);
}
}
}
function handleClick(event) {
const row = event.target.dataset.row;
const col = event.target.dataset.col;
if (!board[row][col]) {
board[row][col] = currentPlayer;
event.target.textContent = currentPlayer;
if (checkWinner()) {
messageElement.textContent = `ผู้เล่น ${currentPlayer} ชนะ!`;
boardElement.removeEventListener('click', handleClick);
} else if (isBoardFull()) {
messageElement.textContent = 'เสมอ!';
}
currentPlayer = currentPlayer === 'X' ? 'O' : 'X';
}
}
function checkWinner() {
const winningCombination = [
[[0, 0], [0, 1], [0, 2]],
[[1, 0], [1, 1], [1, 2]],
[[2, 0], [2, 1], [2, 2]],
[[0, 0], [1, 0], [2, 0]],
[[0, 1], [1, 1], [2, 1]],
[[0, 2], [1, 2], [2, 2]],
[[0, 0], [1, 1], [2, 2]],
[[0, 2], [1, 1], [2, 0]]
];
return winningCombination.some(combination => {
const [[a, b], [c, d], [e, f]] = combination;
return board[a][b] && board[a][b] === board[c][d] && board[a][b] === board[e][f];
});
}
function isBoardFull() {
return board.every(row => row.every(cell => cell));
}
function resetGame() {
currentPlayer = 'X';
messageElement.textContent = '';
createBoard();
board.forEach(row => row.fill(null));
}
resetGame();
</script>
</body>
</html>