Game Save Your Worlds.

ผู้เขียนบทความ : นายเจษฎากร สายป่าน รหัส167404130095

คณะวิศวกรรมศาสตร์ สาขาภาควิชาวิศวกรรมไฟฟ้า

วิชา : 04000104 การโปรแกรมคอมพิวเตอร์ 1/2567

1. ความเป็นมา

การพัฒนาเกม “Save Your World” เริ่มต้นจากแนวคิดในการสร้างเกมที่มีความสนุกสนานและให้ผู้เล่นได้ฝึกฝนทักษะการตอบสนองและการควบคุมที่รวดเร็ว โดยมีการสร้างกราฟิกที่ดึงดูดและเสียงที่เพิ่มอรรถรสให้กับเกม เพื่อให้ผู้เล่นรู้สึกตื่นเต้นและมีส่วนร่วมกับเกมอย่างมากที่สุด

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

วัตถุประสงค์หลักของการพัฒนาเกมนี้คือ:

  • เพื่อให้ผู้เล่นได้รับความสนุกสนานและความบันเทิง
  • เพื่อฝึกฝนทักษะการตอบสนองและการตัดสินใจ
  • เพื่อสร้างความตระหนักรู้เกี่ยวกับความสำคัญของการรักษาโลกในรูปแบบของเกม

3. ขอบเขต

การพัฒนาเกมนี้มีขอบเขตในด้านการออกแบบกราฟิก การพัฒนาโค้ด และการทดสอบเกม โดยมีรายละเอียดดังนี้:

  • การออกแบบกราฟิก: การสร้างภาพพื้นหลัง ผู้เล่น วัตถุและเอฟเฟกต์ต่างๆ
  • การพัฒนาโค้ด: การเขียนโค้ดเพื่อให้เกมทำงานได้ตามที่ต้องการ
  • การทดสอบ: การตรวจสอบความผิดพลาดและการปรับปรุงประสิทธิภาพของเกม

4. ประโยชน์ที่คาดว่าจะได้รับ

  • 1. การพัฒนาทักษะการคิดเชิงกลยุทธ์
  • เกมนี้ส่งเสริมการคิดเชิงกลยุทธ์ในการตัดสินใจ เช่น การยิงกระสุนเพื่อทำลายวัตถุ การควบคุมตัวละคร และการวางแผนเพื่อลดจำนวนชีวิตที่เสียไป การวางแผนที่ดีสามารถช่วยให้ผู้เล่นได้คะแนนสูงขึ้น
  • 2. การฝึกทักษะการตอบสนอง
  • เกมนี้มีความเร็วและความท้าทาย ผู้เล่นต้องมีการตอบสนองที่รวดเร็วในการเคลื่อนไหวและการยิง ทำให้ผู้เล่นมีทักษะการตอบสนองที่ดีขึ้นและมีความสามารถในการทำงานได้อย่างมีประสิทธิภาพมากขึ้น
  • 3. การสร้างความสนุกและความบันเทิง
  • เกมช่วยให้ผู้เล่นรู้สึกสนุกสนานและผ่อนคลายจากความเครียดในชีวิตประจำวัน การมีเวลาว่างในการเล่นเกมสามารถช่วยให้ผู้เล่นสามารถสร้างสมดุลในชีวิตได้
  • 4. การพัฒนาทักษะการควบคุมและการประสานงาน
  • เกมนี้ต้องการการควบคุมที่แม่นยำ เช่น การเลื่อนตัวละครและการเล็งเป้าหมาย ซึ่งช่วยให้ผู้เล่นพัฒนาทักษะการประสานงานระหว่างมือและตา
  • 5. การกระตุ้นความคิดสร้างสรรค์
  • ในการเล่นเกม ผู้เล่นอาจต้องคิดนอกกรอบเพื่อเอาชนะความท้าทายต่างๆ ซึ่งช่วยกระตุ้นความคิดสร้างสรรค์และทักษะในการแก้ปัญหา


5. ความรู้เบื้องต้น

1.แนวคิดของเกม: “Save Your World” เป็นเกมประเภทแอคชั่นยิงที่ผู้เล่นจะต้องควบคุมตัวละครเพื่อยิงกระสุนไปที่วัตถุที่ตกลงมาจากด้านบน โดยมุ่งหวังที่จะทำลายวัตถุเหล่านั้นก่อนที่จะถึงพื้น เกมนี้มีความท้าทายที่จะต้องทำคะแนนให้สูงที่สุดเท่าที่จะทำได้ในขณะที่รักษาชีวิตของตัวละครให้อยู่รอด

2. ลักษณะการเล่นเกม:

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


6. การทำงานของเกมส์

+—————————+

| เริ่มเกม |

+—————————+

|

v

+—————————+

| แสดงหน้าเริ่มต้นเกม |

+—————————+

|

v

+—————————+

| คลิก “Start Game” |

+—————————+

|

v

+—————————+

| ซ่อนหน้าเริ่มต้นเกม |

+—————————+

|

v

+—————————+

| แสดงพื้นที่เล่น (Canvas) |

+—————————+

|

v

+—————————+

| ตั้งค่าตัวละคร |

+—————————+

|

v

+—————————+

| เริ่มการยิงอัตโนมัติ |

+—————————+

|

v

+—————————+

| สุ่มสร้างวัตถุ |

+—————————+

|

v

+—————————+

| ตรวจสอบการชนกัน |

+—————————+

|

v

+—————————+

| อัปเดตตำแหน่งกระสุน |

+—————————+

|

v

+—————————+

| อัปเดตตำแหน่งวัตถุ |

+—————————+

|

v

+—————————+

| ตรวจสอบชีวิต |

+—————————+

|

v

+—————————+

| เกมจบหรือยัง? |

+—————————+

|

+————+———–+

| |

+———————–+ +———————-+

Yes No

| |

v v

+—————————+ +—————————+

| แสดงหน้าจอเกมจบ | | กลับไปที่การเล่น |

+—————————+ +—————————+| |

| |

v

+—————————+ |

| คลิก “Restart Game” |

+—————————+

|

v

+—————————+

| เริ่มเกมใหม่ |

+—————————+


7. วิธีการใช้งานโปรแกรม

เกม “Save Your World” เป็นเกมที่ออกแบบมาให้ผู้เล่นสามารถเข้าถึงและเล่นได้อย่างง่ายดาย ดังนั้นวิธีการใช้งานจึงมีความชัดเจนและไม่ซับซ้อน ซึ่งสามารถแบ่งออกเป็นขั้นตอนต่าง ๆ ได้ดังนี้:

การบังคับเกมส์และระบบต่างแบบเข้าใจง่าย

เลื่อนเม้าส์ ซ้าย-ขวา

ระบบยิงจะเป็นระบบการยิงออโต้

เมื่อเเพ้จะมีการบอกสกอร์ที่ทำได้และสกอร์สูงสุดที่ทำได้ตรงมุมบนทั้ง ซ้ายและขวา และสามารถกดเริ่มเกมส์ต่อได้ในทันที ดังรูปภาพดังน้

1.หน้าต่างก่อนกดเริ่มเกมส์

2.หน้าต่างตอนเล่นเกมส์

3.หน้าต่างตอนจบเกมส์

1. การเข้าถึงเกม

  • เปิดเบราว์เซอร์: เริ่มต้นโดยการเปิดเว็บเบราว์เซอร์ (เช่น Google Chrome, Firefox, Safari) บนอุปกรณ์ของคุณ
  • เข้าเว็บไซต์: ใส่ URL ที่ให้บริการเกม “Save Your World” ในแถบที่อยู่ของเบราว์เซอร์ แล้วกด Enter เพื่อเข้าถึงหน้าเว็บไซต์ของเกม

2. หน้าจอเริ่มต้น

  • การแสดงผล: เมื่อเข้าเกม คุณจะเห็นหน้าจอเริ่มต้นที่มีข้อความต้อนรับและปุ่ม “Start Game”
  • การดูข้อมูล: อ่านคำแนะนำหรือข้อมูลที่แสดงในหน้าจอเริ่มต้นเพื่อทำความเข้าใจเกี่ยวกับเกม

3. เริ่มเล่นเกม

  • คลิกที่ปุ่ม “Start Game”: เพื่อเริ่มเกม คุณจะต้องคลิกที่ปุ่ม “Start Game” ซึ่งจะทำให้เกมเริ่มต้นขึ้น

4. การควบคุมเกม

  • การเคลื่อนที่: ใช้เมาส์เพื่อลากตัวละครไปทางซ้ายหรือขวา โดยตัวละครจะเคลื่อนที่ตามการเคลื่อนที่ของเมาส์
  • การยิงกระสุน: กระสุนจะถูกยิงออกไปโดยอัตโนมัติทุกๆ 200 มิลลิวินาที เมื่อเกมเริ่มต้น คุณไม่จำเป็นต้องคลิกเพื่อยิงกระสุน โดยกระสุนจะถูกยิงออกจากตัวละคร

5. การทำคะแนน

  • ยิงเป้าหมาย: ในขณะที่คุณเล่น เป้าหมายจะตกลงมาจากด้านบนของหน้าจอ คุณต้องเล็งและทำลายเป้าหมายเหล่านี้เพื่อสะสมคะแนน
  • ตรวจสอบคะแนน: คะแนนปัจจุบันและคะแนนสูงสุดจะถูกแสดงที่มุมบนซ้ายและมุมบนขวาของหน้าจอ

6. การจัดการชีวิต

  • ชีวิต: คุณเริ่มต้นด้วยจำนวนชีวิตที่กำหนดไว้ โดยการปล่อยให้เป้าหมายตกถึงพื้นจะทำให้จำนวนชีวิตลดลง
  • หมดชีวิต: เมื่อจำนวนชีวิตเหลือเป็นศูนย์ เกมจะสิ้นสุดลงและหน้าจอ “Game Over” จะแสดงขึ้น

7. หน้าจอเกมจบ

  • ดูคะแนนสุดท้าย: เมื่อเกมจบ คุณจะเห็นหน้าจอเกมจบที่แสดงคะแนนสุดท้ายและคะแนนสูงสุดที่บันทึกไว้
  • การเริ่มเกมใหม่: คุณสามารถเริ่มเกมใหม่ได้โดยคลิกที่ปุ่ม “Restart Game” ซึ่งจะนำคุณกลับไปยังหน้าจอเริ่มต้น

8. การออกจากเกม

  • ปิดเบราว์เซอร์: เมื่อคุณเล่นเสร็จแล้ว สามารถปิดเบราว์เซอร์หรือแท็บที่เปิดเกมอยู่ได้ หรือเลือกไปที่หน้าอื่นๆ บนอินเทอร์เน็ต

9. การบันทึกคะแนนสูงสุด

  • คะแนนสูงสุด: เกมจะบันทึกคะแนนสูงสุดใน Local Storage ของเบราว์เซอร์ ซึ่งจะถูกเรียกใช้ในครั้งถัดไปที่คุณเข้ามาเล่นเกม

8.การทดลอง

การทดลองในเกม “Save Your World” มีวัตถุประสงค์เพื่อทดสอบและประเมินประสิทธิภาพของเกม รวมถึงการตรวจสอบความถูกต้องของฟังก์ชันการทำงานต่าง ๆ การทดลองจะถูกแบ่งออกเป็นหลายขั้นตอนเพื่อให้การประเมินมีความละเอียดและเป็นระบบมากที่สุด

ยิงไปเรื่อยๆเพื่อที่จะทำลายสถิติที่ทำใว้มากที่สุดจะเป็นเกมส์เเนวทำลายสถิติ

รูปภาพนี้มี Alt แอตทริบิวต์เป็นค่าว่าง ชื่อไฟล์คือ Screenshot-2024-10-13-234329-1-1024x485.png

จากการทดลองเมื่อเอเลี่ยนตกถึงขอบครบ3ตัวจะทำให้เกมส์เเพ้

สรุปผลการทดลอง

  • ผลการทดลอง
  • การควบคุมที่ตอบสนอง: เกมสามารถตอบสนองได้ดีเมื่อผู้เล่นเคลื่อนที่และยิง กระสุนถูกยิงออกไปตามเวลาที่กำหนด
  • การตรวจจับการชน: ระบบตรวจจับการชนระหว่างกระสุนและเป้าหมายทำงานได้อย่างมีประสิทธิภาพ โดยเมื่อกระสุนชนเป้าหมายจะมีการเพิ่มคะแนนและแสดงภาพระเบิด
  • การจัดการสถานะเกม: สถานะของเกมถูกจัดการได้ดี ทำให้เกมเริ่มต้นและสิ้นสุดได้อย่างราบรื่นานของเกมในอนาคต

9. สรุปผลและข้อเสนอแนะแนะ

เกม “Save Your World” เป็นเกมที่น่าสนใจและสนุกสนาน ซึ่งผู้เล่นสามารถเรียนรู้และพัฒนาทักษะต่าง ๆ ได้ โดยข้อเสนอแนะแนะนำให้มีการพัฒนาเกมต่อไป เช่น การเพิ่มโหมดใหม่ การพัฒนา AI ของวัตถุ หรือการสร้างเนื้อหาเพิ่มเติมในเกมเพื่อดึงดูดผู้เล่นให้มากขึ้น

10.โค้ดเกมส์

<!DOCTYPE html>b 
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Save Your World</title>
    <style>
        body {
            margin: 0;
            padding: 0;
            height: 100vh; /* ทำให้ body สูงเต็มจอ */
            overflow: hidden; /* ปิดการเลื่อน */
        }

        #startScreen, #gameOverScreen {
            display: flex;
            flex-direction: column;
            justify-content: center;
            align-items: center;
            color: white;
            text-align: center;
            height: 100%; /* ทำให้ div สูงเต็มจอ */
            width: 100%; /* ทำให้ div กว้างเต็มจอ */
            position: absolute; /* ทำให้หน้าจออยู่ทับกัน */
            top: 0; /* วางที่ตำแหน่งบนสุด */
            left: 0; /* วางที่ตำแหน่งซ้ายสุด */
        }

        #startScreen {
            background-image: url('https://media.tenor.com/PLDaDOZkNtwAAAAM/regalt-star-trek.gif'); /* เปลี่ยนภาพพื้นหลัง */
            background-size: cover; /* ทำให้ภาพขยายเต็มพื้นที่ */
            background-position: center; /* ทำให้ภาพอยู่กลาง */
        }

        #gameOverScreen {
            background-image: url('https://media.tenor.com/Pcq72vCRLfYAAAAM/ifrit-space.gif'); /* ใช้ภาพเดียวกัน */
            background-size: cover; /* ทำให้ภาพขยายเต็มพื้นที่ */
            background-position: center; /* ทำให้ภาพอยู่กลาง */
            display: none; /* เริ่มต้นซ่อนหน้าจอเกมจบ */
        }

        #gameCanvas {
            display: none;
            position: absolute; /* วาง canvas ให้ทับกับหน้าจอ */
            top: 0; /* วางที่ตำแหน่งบนสุด */
            left: 0; /* วางที่ตำแหน่งซ้ายสุด */
            width: 100vw; /* ทำให้ canvas กว้างเต็มจอ */
            height: 100vh; /* ทำให้ canvas สูงเต็มจอ */
            background-image: url('https://media.tenor.com/ju5hhb03JgIAAAAM/dark.gif'); /* เปลี่ยนภาพพื้นหลังของเกม */
            background-size: cover; /* ทำให้ภาพขยายเต็มพื้นที่ */
            background-position: center; /* ทำให้ภาพอยู่กลาง */
        }

        #startButton, #restartButton {
            padding: 15px 30px;
            font-size: 20px;
            background-color: #4CAF50; /* สีเขียว */
            color: white;
            border: none;
            cursor: pointer;
            border-radius: 5px;
            margin-top: 20px;
        }

        #startButton:hover, #restartButton:hover {
            background-color: #45a049; /* สีเขียวเข้มเมื่อ hover */
        }

        /* กำหนดรูปแบบคะแนน */
        #scoreDisplay {
            position: absolute;
            top: 10px;
            left: 10px;
            color: white;
            font-size: 20px;
        }

        #highScoreDisplay {
            position: absolute;
            top: 10px;
            right: 10px;
            color: white;
            font-size: 20px;
        }
    </style>
</head>
<body>
    <div id="startScreen">
        <h1>Welcome to Save Your World!</h1>
        <p>Click the button below to start the game.</p>
        <button id="startButton">Start Game</button>
    </div>

    <canvas id="gameCanvas"></canvas>

    <div id="gameOverScreen">
        <h1>Game Over!</h1>
        <p>Your total score: <span id="finalScore"></span></p>
        <p>High Score: <span id="highScore"></span></p>
        <button id="restartButton">Restart Game</button>
    </div>

    <div id="scoreDisplay">Score: 0</div> <!-- แสดงคะแนนปัจจุบัน -->
    <div id="highScoreDisplay">High Score: 0</div> <!-- แสดงคะแนนสูงสุด -->

    <script>
        const canvas = document.getElementById("gameCanvas");
        const ctx = canvas.getContext("2d");

        let bullets = [];
        let targets = [];
        let explosions = [];
        let score = 0;
        let hitCount = 0;
        let lives = 3;
        let autoShootInterval; // ตัวแปรสำหรับเก็บ interval การยิงอัตโนมัติ
        let gameActive = false;
        let targetCounter = 0;

        const aspectRatio = 16 / 9;

        // ขนาดผู้เล่นใหม่ 50% เพิ่มจาก 100 เป็น 150
        const player = {
            x: 0,
            y: 0,
            width: 150, // เปลี่ยนจาก 100 เป็น 150
            height: 150, // เปลี่ยนจาก 100 เป็น 150
            image: new Image()
        };
        player.image.src = 'https://media.tenor.com/7CYCTVvvTyoAAAAi/campanha-maxsan-ihara.gif';/

        const background = new Image();
        background.src = 'https://media.tenor.com/3F0mR0TyaHgAAAAj/mobileanimatedcom.gif'; // เปลี่ยนภาพพื้นหลังของเกม

        // ขนาดกระสุนใหม่ 50% เพิ่มจาก 22.5 เป็น 33.75
        const bulletImage = new Image();
        bulletImage.src = 'https://i.imgur.com/p2jcAnu.png'; // เปลี่ยนเป็น URL ใหม่

        const targetImage = new Image();
        targetImage.src = 'https://media.tenor.com/fp2BoxcuaE0AAAAi/my-singing-monsters-msm.gif';

        // ขนาดวัตถุที่ตกใหม่ 50% เพิ่มจาก 75 เป็น 112.5
        const explosionImage = new Image();
        explosionImage.src = 'https://media.tenor.com/5acZjLl1OTAAAAAj/explosion-deltarune.gif';

        function resizeCanvas() {
            canvas.width = window.innerWidth;
            canvas.height = window.innerHeight;

            player.x = canvas.width / 2 - player.width / 2;
            player.y = canvas.height - player.height - 30; // ให้ player อยู่ที่ด้านล่างของ canvas
        }

        window.addEventListener('resize', resizeCanvas);
        resizeCanvas();

        class Bullet {
            constructor(x, y) {
                this.x = x;
                this.y = y;
                this.width = 33.75; // เปลี่ยนจาก 22.5 เป็น 33.75
                this.height = 90; // เปลี่ยนจาก 60 เป็น 90
                this.speed = 5;
                this.image = bulletImage;
            }

            update() {
                this.y -= this.speed;
            }

            draw() {
                ctx.drawImage(this.image, this.x, this.y, this.width, this.height);
            }
        }

        class Target {
            constructor() {
                this.x = Math.random() * (canvas.width - 75);
                this.y = 0; // เริ่มต้นที่ตำแหน่งบนสุด
                this.width = 112.5; // เปลี่ยนจาก 75 เป็น 112.5
                this.height = 112.5; // เปลี่ยนจาก 75 เป็น 112.5
                this.speed = 2 + Math.random() * 2; // ความเร็วระหว่าง 2 ถึง 4
            }

            update() {
                this.y += this.speed; // เลื่อนลง
            }

            draw() {
                ctx.drawImage(targetImage, this.x, this.y, this.width, this.height);
            }
        }

        class Explosion {
            constructor(x, y) {
                this.x = x;
                this.y = y;
                this.width = 112.5; // ขนาดระเบิด
                this.height = 112.5; // ขนาดระเบิด
                this.alpha = 1;
                this.image = explosionImage;
                this.frame = 0;
                this.maxFrames = 30; // จำนวนเฟรมของการระเบิด
            }

            update() {
                this.alpha -= 1 / this.maxFrames;
                this.frame++;
            }

            draw() {
                ctx.save();
                ctx.globalAlpha = this.alpha;
                ctx.drawImage(this.image, this.x, this.y, this.width, this.height);
                ctx.restore();
            }
        }

        function shootBullet() {
            const bulletOffset = 20; // การเลื่อนกระสุน
            bullets.push(new Bullet(player.x + bulletOffset, player.y)); // กระสุนที่ 1
            bullets.push(new Bullet(player.x + bulletOffset + 30, player.y)); // กระสุนที่ 2
            bullets.push(new Bullet(player.x + bulletOffset + 60, player.y)); // กระสุนที่ 3
        }

        function createTarget() {
            if (targetCounter % 50 === 0) { // เพิ่มความถี่ในการสร้างวัตถุ
                targets.push(new Target());
            }
            targetCounter++;
        }

        function detectCollisions() {
            for (let i = bullets.length - 1; i >= 0; i--) {
                let bullet = bullets[i];
                for (let j = targets.length - 1; j >= 0; j--) {
                    let target = targets[j];
                    if (
                        bullet.x < target.x + target.width &&
                        bullet.x + bullet.width > target.x &&
                        bullet.y < target.y + target.height &&
                        bullet.y + bullet.height > target.y
                    ) {
                        bullets.splice(i, 1);
                        targets.splice(j, 1);
                        explosions.push(new Explosion(target.x, target.y));
                        score += 1; // ปรับให้คะแนนเพิ่มขึ้นทีละ 1
                        break;
                    }
                }
            }
        }

        function detectMissedTargets() {
            for (let i = targets.length - 1; i >= 0; i--) {
                let target = targets[i];
                if (target.y > canvas.height) {
                    targets.splice(i, 1);
                    lives--;
                    if (lives <= 0) {
                        endGame();
                    }
                }
            }
        }

        function updateBullets() {
            for (let i = bullets.length - 1; i >= 0; i--) {
                let bullet = bullets[i];
                bullet.update();
                if (bullet.y < 0) {
                    bullets.splice(i, 1);
                } else {
                    bullet.draw();
                }
            }
        }

        function updateTargets() {
            for (let i = targets.length - 1; i >= 0; i--) {
                let target = targets[i];
                target.update();
                target.draw();
            }
        }

        function updateExplosions() {
            for (let i = explosions.length - 1; i >= 0; i--) {
                let explosion = explosions[i];
                explosion.update();
                explosion.draw();
                if (explosion.alpha <= 0) {
                    explosions.splice(i, 1);
                }
            }
        }

        function drawText() {
            document.getElementById("scoreDisplay").innerText = `Score: ${score}`; // แสดงคะแนนปัจจุบัน
            document.getElementById("highScoreDisplay").innerText = `High Score: ${localStorage.getItem("highScore") || 0}`; // แสดงคะแนนสูงสุด
        }

        function drawGameOver() {
            ctx.fillStyle = "rgba(0, 0, 0, 0.5)";
            ctx.fillRect(0, 0, canvas.width, canvas.height);
            ctx.fillStyle = "white";
            ctx.font = `30px Arial`;
            ctx.fillText("Game Over!", canvas.width / 2 - 70, canvas.height / 2 - 10);
            ctx.fillText(`Your score: ${score}`, canvas.width / 2 - 70, canvas.height / 2 + 30);
            ctx.fillText("Click to continue...", canvas.width / 2 - 90, canvas.height / 2 + 60);
            ctx.fillText(`High Score: ${localStorage.getItem("highScore") || 0}`, canvas.width / 2 - 70, canvas.height / 2 + 70); // แสดงคะแนนสูงสุด
        }

        function resetGame() {
            bullets = [];
            targets = [];
            explosions = [];
            score = 0;
            hitCount = 0;
            lives = 3;
            targetCounter = 0;
            gameActive = true;
            document.getElementById("startScreen").style.display = "none";
            document.getElementById("gameOverScreen").style.display = "none"; // ซ่อนหน้าจอเกมจบ
            document.getElementById("gameCanvas").style.display = "block";

            // ตั้งค่าให้ยิงกระสุนอัตโนมัติทุก 200 มิลลิวินาที
            autoShootInterval = setInterval(shootBullet, 200);

            requestAnimationFrame(update); // เริ่มต้นเกม
        }

        function endGame() {
            gameActive = false;
            clearInterval(autoShootInterval); // หยุดการยิงอัตโนมัติเมื่อเกมจบ
            // บันทึกคะแนนสูงสุด
            const highScore = localStorage.getItem("highScore") || 0;
            if (score > highScore) {
                localStorage.setItem("highScore", score);
            }
            document.getElementById("gameOverScreen").style.display = "flex"; // แสดงหน้าจอเกมจบ
            document.getElementById("finalScore").innerText = score; // แสดงคะแนนสุดท้าย
            document.getElementById("highScore").innerText = localStorage.getItem("highScore"); // แสดงคะแนนสูงสุด
            document.getElementById("gameCanvas").style.display = "none"; // ซ่อน canvas
        }

        function update() {
            ctx.clearRect(0, 0, canvas.width, canvas.height);
            ctx.drawImage(background, 0, 0, canvas.width, canvas.height);
            ctx.drawImage(player.image, player.x, player.y, player.width, player.height);
            createTarget();
            detectCollisions();
            detectMissedTargets();
            updateBullets();
            updateTargets();
            updateExplosions();
            drawText(); // เรียกใช้การแสดงคะแนน

            if (gameActive) {
                requestAnimationFrame(update);
            } else {
                drawGameOver();
            }
        }

        canvas.addEventListener("mousemove", (event) => {
            const rect = canvas.getBoundingClientRect();
            player.x = event.clientX - rect.left - player.width / 2;
        });

        // Event listener for starting the game
        document.getElementById("startButton").addEventListener("click", resetGame);
        // Event listener for restarting the game
        document.getElementById("restartButton").addEventListener("click", resetGame);
    </script>
</body>
</html>

11. ข้อมูลอ้างอิง

MDN Web Docs: JavaScript

MDN Web Docs: HTML

MDN Web Docs: CSS

12.ลิ้งคลิปอธิบายโค้ด

https://studio.youtube.com/video/Uvx0c7AXn9U/edit






You may also like...

ใส่ความเห็น

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