เกมหมากฮอสด้วยHTML

รายงานโครงงาน: เกมหมากฮอสด้วย HTML

1. ชื่อโครงงาน

เกมหมากฮอส (Checkers Game)

2. วัตถุประสงค์

เพื่อพัฒนาเกมหมากฮอสด้วย HTML, CSS, และ JavaScript โดยมุ่งหวังให้ผู้เล่นได้เรียนรู้กติกาและวิธีการเล่นหมากฮอสผ่านการเล่นเกมออนไลน์

3. เครื่องมือและเทคโนโลยีที่ใช้

HTML: สำหรับสร้างโครงสร้างพื้นฐานของหน้าเว็บ

CSS: สำหรับการตกแต่งและออกแบบหน้าเว็บให้สวยงาม

JavaScript: สำหรับเพิ่มความสามารถในการโต้ตอบและการทำงานของเกม

4. การออกแบบและพัฒนา

การพัฒนาเกมหมากฮอสนี้ได้ถูกแบ่งออกเป็นส่วนต่างๆ ดังนี้:

4.1. โครงสร้าง HTML

• ใช้แท็ก <head> เพื่อกำหนดการตั้งค่า เช่น ชื่อเรื่องและการเชื่อมต่อกับ CSS

• ใช้แท็ก <body> เพื่อสร้างบอร์ดเกมและสถานะของเกม

4.2. การตกแต่งด้วย CSS

• สร้างสไตล์ให้กับบอร์ดและเซลล์ของหมาก โดยแบ่งออกเป็นเซลล์สีขาวและสีดำ

• กำหนดสไตล์ของหมาก โดยใช้สีต่างๆ สำหรับผู้เล่น

4.3. ฟังก์ชันการทำงานด้วย JavaScript

สร้างบอร์ดเกม: สร้างฟังก์ชัน initializeBoard() เพื่อกำหนดตำแหน่งเริ่มต้นของหมาก

การเลือกหมาก: ฟังก์ชัน selectPiece() ช่วยให้ผู้เล่นสามารถเลือกหมากที่ต้องการเคลื่อนที่

การคลิกเซลล์: ฟังก์ชัน handleCellClick() ใช้เพื่อตรวจสอบว่าเซลล์ที่ถูกคลิกว่างหรือไม่ และการเคลื่อนที่ของหมาก

การตรวจสอบกติกาการเดิน: ฟังก์ชัน isValidMove() ใช้เพื่อตรวจสอบว่าการเคลื่อนที่ของหมากนั้นถูกต้องตามกฎของเกม

5. การทดสอบ

เกมได้รับการทดสอบการทำงานในเบราว์เซอร์ต่างๆ เพื่อให้แน่ใจว่าผู้เล่นสามารถเล่นเกมได้อย่างราบรื่น โดยตรวจสอบการเดินหมากทั้งในทิศทางปกติและการกินหมาก

6. ผลลัพธ์

เกมหมากฮอสที่พัฒนาขึ้นสามารถเล่นได้อย่างสมบูรณ์ ผู้เล่นสามารถเลือกหมาก เคลื่อนที่และกินหมากตามกฎของเกมได้อย่างถูกต้อง

7. ข้อเสนอแนะ

ควรพัฒนาเกมให้สามารถเพิ่มฟีเจอร์ใหม่ๆ เช่น:

• การบันทึกคะแนนของผู้เล่น

• การเพิ่มระดับความยาก

• การสร้างผู้เล่น AI เพื่อให้ผู้เล่นได้ฝึกเล่น

8. โค้ดเกมหมากฮอส

<!DOCTYPE html>

<html lang=”th”>

<head>

    <meta charset=”UTF-8″>

    <meta name=”viewport” content=”width=device-width, initial-scale=1.0″>

    <title>เกมหมากฮอส</title>

    <style>

        body {

            font-family: Arial, sans-serif;

            text-align: center;

            background-color: #f0f0f0;

        }

        h1 {

            margin: 20px 0;

        }

        #board {

            display: grid;

            grid-template-columns: repeat(8, 50px);

            grid-template-rows: repeat(8, 50px);

            margin: 0 auto;

            gap: 0;

        }

        .cell {

            width: 50px;

            height: 50px;

            display: flex;

            justify-content: center;

            align-items: center;

        }

        .white {

            background-color: #fff;

        }

        .black {

            background-color: #333;

        }

        .piece {

            width: 40px;

            height: 40px;

            border-radius: 50%;

            cursor: pointer;

        }

        .red {

            background-color: red;

        }

        .black-piece {

            background-color: black;

        }

        .king {

            border: 3px solid gold;

        }

        #status {

            margin-top: 20px;

            font-size: 1.2rem;

        }

        .selected {

            outline: 3px solid yellow;

        }

    </style>

</head>

<body>

    <h1>เกมหมากฮอส – กติกาเต็ม</h1>

    <div id=”board”></div>

    <p id=”status”>ผู้เล่น 1 (สีแดง) เริ่มก่อน</p>

    <script>

        const board = document.getElementById(‘board’);

        const status = document.getElementById(‘status’);

        let currentPlayer = ‘red’;

        let selectedPiece = null;

        let boardMatrix = createBoardMatrix();

        function createBoardMatrix() {

            const matrix = [];

            for (let i = 0; i < 8; i++) {

                matrix[i] = new Array(8).fill(null);

            }

            return matrix;

        }

        function initializeBoard() {

            for (let row = 0; row < 8; row++) {

                for (let col = 0; col < 8; col++) {

                    const cell = document.createElement(‘div’);

                    cell.classList.add(‘cell’);

                    if ((row + col) % 2 === 0) {

                        cell.classList.add(‘white’);

                    } else {

                        cell.classList.add(‘black’);

                        if (row < 2) {

                            const piece = createPiece(‘black-piece’);

                            cell.appendChild(piece);

                            boardMatrix[row][col] = { player: ‘black’, king: false };

                        } else if (row > 5) {

                            const piece = createPiece(‘red’);

                            cell.appendChild(piece);

                            boardMatrix[row][col] = { player: ‘red’, king: false };

                        }

                    }

                    cell.dataset.row = row;

                    cell.dataset.col = col;

                    cell.addEventListener(‘click’, handleCellClick);

                    board.appendChild(cell);

                }

            }

        }

        function createPiece(color) {

            const piece = document.createElement(‘div’);

            piece.classList.add(‘piece’, color);

            piece.addEventListener(‘click’, selectPiece);

            return piece;

        }

        function selectPiece(event) {

            const piece = event.target;

            const row = parseInt(piece.parentElement.dataset.row);

            const col = parseInt(piece.parentElement.dataset.col);

            if (boardMatrix[row][col].player === currentPlayer) {

                if (selectedPiece) {

                    selectedPiece.classList.remove(‘selected’);

                }

                piece.classList.add(‘selected’);

                selectedPiece = piece;

            }

        }

        function handleCellClick(event) {

            if (!selectedPiece) return;

            const targetCell = event.currentTarget;

            const row = parseInt(targetCell.dataset.row);

            const col = parseInt(targetCell.dataset.col);

            if (boardMatrix[row][col] === null) {

                const oldRow = parseInt(selectedPiece.parentElement.dataset.row);

                const oldCol = parseInt(selectedPiece.parentElement.dataset.col);

                if (isValidMove(oldRow, oldCol, row, col)) {

                    movePiece(oldRow, oldCol, row, col);

                    checkForKing(row, col);

                    switchPlayer();

                }

            }

        }

        function isValidMove(oldRow, oldCol, newRow, newCol) {

            const direction = currentPlayer === ‘red’ ? -1 : 1;

            const piece = boardMatrix[oldRow][oldCol];

            if (Math.abs(oldCol – newCol) === 1 && newRow – oldRow === direction && boardMatrix[newRow][newCol] === null) {

                return true;

            }

            if (Math.abs(oldCol – newCol) === 2 && newRow – oldRow === 2 * direction) {

                const middleRow = (oldRow + newRow) / 2;

                const middleCol = (oldCol + newCol) / 2;

                const middlePiece = boardMatrix[middleRow][middleCol];

                if (middlePiece && middlePiece.player !== currentPlayer) {

                    boardMatrix[middleRow][middleCol] = null;

                    removePiece(middleRow, middleCol);

                    return true;

                }

            }

            if (piece.king && Math.abs(oldCol – newCol) === 1 && Math.abs(newRow – oldRow) === 1 && boardMatrix[newRow][newCol] === null) {

                return true;

            }

            return false;

        }

        function movePiece(oldRow, oldCol, newRow, newCol) {

            const targetCell = document.querySelector(`.cell[data-row=”${newRow}”][data-col=”${newCol}”]`);

            targetCell.appendChild(selectedPiece);

            boardMatrix[newRow][newCol] = boardMatrix[oldRow][oldCol];

            boardMatrix[oldRow][oldCol] = null;

            selectedPiece.classList.remove(‘selected’);

            selectedPiece

Screenshot

You may also like...

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *