เกมจับคู่อิโมจิ(Emoji matching game)

ผู้เขียนบทความ : นายเดชาวัต หาญณรงค์ รหัส 167404130078

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

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

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

เกมจับคู่ภาพเป็นหนึ่งในเกมที่ได้รับความนิยมเพราะสามารถเล่นได้ง่ายและช่วยพัฒนาทักษะการจดจำและความสนใจในรายละเอียด เกมนี้มีหลากหลายรูปแบบทั้งในแบบจับคู่ภาพหรือจับคู่สัญลักษณ์ ซึ่งในบทความนี้เราจะนำเสนอเกมจับคู่ภาพอิโมจิที่ใช้ HTML, CSS, และ JavaScript ซึ่งเป็นภาษาเขียนเว็บที่เข้าใจง่ายและใช้ในการพัฒนาเกมบนเบราว์เซอร์ได้อย่างมีประสิทธิภาพ


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

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

เพื่อให้ผู้เรียนได้เรียนรู้วิธีการพัฒนาเกมบนเว็บด้วยการใช้เทคโนโลยีพื้นฐาน

เพื่อพัฒนาทักษะการคิดเชิงตรรกะในการเขียนโปรแกรม

เพื่อฝึกทักษะการจำและการสังเกตของผู้เล่นในขณะเล่นเกม

สร้างเกมที่ให้ความสนุกสนานและเพิ่มความสามารถในการคิดวิเคราะห์

3. ขอบเขต

ขอบเขตของโครงการนี้ประกอบด้วย:

3.1 การพัฒนาเกมจับคู่ภาพอิโมจิที่เล่นได้บนเบราว์เซอร์

3.2 ใช้ภาษา HTML, CSS, และ JavaScript ในการพัฒนา เกมมีปุ่มสำหรับเริ่มเล่นใหม่เมื่อจับคู่ครบทุกคู่

3.3 มีจำนวนอิโมจิทั้งหมด 8 ชนิด ซึ่งต้องทำการจับคู่ทั้งหมด 16 ใบ (อิโมจิแต่ละชนิดมี 2 ใบ)

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

4.1 ผู้เรียนจะเข้าใจการใช้ JavaScript ในการพัฒนาเกม

4.2 พัฒนาทักษะการเขียนโปรแกรมพื้นฐาน และความสามารถในการใช้ CSS เพื่อการแสดงผลที่สวยงาม

4.3 ช่วยให้ผู้เล่นเกมพัฒนาทักษะความจำและการสังเกต

4.4 ส่งเสริมความเข้าใจพื้นฐานในด้านการพัฒนาเว็บเบื้องต้น

5. ความรู้ที่เกี่ยวข้อง

HTML (HyperText Markup Language): เป็นภาษาที่ใช้ในการสร้างโครงสร้างของเว็บไซต์

• CSS (Cascading Style Sheets): ใช้ในการจัดรูปแบบและการแสดงผลของ HTML

• JavaScript: เป็นภาษาสคริปต์ที่ใช้ในการควบคุมการทำงานของเกมและการโต้ตอบกับผู้ใช้

6. การดำเนินงาน

ผังการทำงาน (flowchart)

การพัฒนาเกมแบ่งออกเป็นขั้นตอนดังนี้:

6.1 ออกแบบโครงสร้าง: ใช้ HTML ในการสร้างบอร์ดเกมและปุ่มเริ่มเกมใหม่

6.2 ออกแบบการแสดงผล: ใช้ CSS เพื่อจัดการขนาดของการ์ดแต่ละใบและจัดเรียงในรูปแบบกริด

6.3 การเขียนสคริปต์: ใช้ JavaScript ในการจัดการสุ่มการ์ด จัดการการคลิก และตรวจสอบว่าผู้เล่นจับคู่ได้ถูกต้องหรือไม่

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

7.1 เมื่อหน้าเว็บโหลดขึ้นมา บอร์ดเกมจะถูกสร้างขึ้นพร้อมกับการ์ด 16 ใบที่ซ่อนอิโมจิไว้

7.2 ผู้เล่นคลิกที่การ์ดเพื่อเปิดเผยอิโมจิที่ซ่อนอยู่

7.3 หากการ์ดทั้งสองใบมีอิโมจิตรงกัน การ์ดเหล่านั้นจะถูกซ่อนไป

7.4 หากการ์ดไม่ตรงกัน จะทำการปิดการ์ดหลังจากเปิดดูแล้ว 1 วินาที

7.5 เมื่อผู้เล่นจับคู่ครบทั้ง 8 คู่ จะมีข้อความแสดงความยินดี และสามารถกดปุ่ม “Start New Game” เพื่อเริ่มเกมใหม่

8. การทดลอง

ทดลองใช้งานเกมโดยทำการเปิดในเบราว์เซอร์ที่รองรับ JavaScript เช่น Google Chrome, Firefox หรือ Microsoft Edge ตรวจสอบการทำงานของการ์ดว่าเปิดเผยและปิดตามที่เขียนโปรแกรมหรือไม่ รวมถึงตรวจสอบการแสดงผลของปุ่มเริ่มเกมใหม่

9. เทคนิคการประยุกต์เพื่อเพิ่มประสิทธิภาพ

9.1 ปรับปรุงการสุ่มการ์ด: การใช้ฟังก์ชันสุ่มสามารถปรับปรุงให้มีประสิทธิภาพมากขึ้นด้วยการใช้วิธีการสุ่มที่มีการกระจายอย่างเท่าเทียมกัน

9.2 เพิ่มระดับความยาก: สามารถเพิ่มจำนวนการ์ดหรือสร้างโหมดเกมที่มีระดับความยากเพิ่มขึ้นได้ เช่น การเพิ่มจำนวนคู่ให้มากขึ้น หรือการจำกัดเวลาในการจับคู่

9.3 เพิ่มเอฟเฟกต์เสียง: เพื่อเพิ่มความน่าสนใจสามารถเพิ่มเสียงเมื่อการ์ดจับคู่ได้หรือเมื่อเกมจบ

9.4 เพิ่มสถิติการเล่น: บันทึกจำนวนครั้งที่ผู้เล่นเปิดการ์ด และแสดงให้เห็นว่าใช้เวลาเท่าไหร่ในการจับคู่ทั้งหมด

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

เกมจับคู่ภาพอิโมจินี้สามารถพัฒนาได้สำเร็จและตอบโจทย์ในเรื่องของการพัฒนาทักษะการเขียนโปรแกรมด้วยภาษา HTML, CSS, และ JavaScript ผู้เล่นสามารถจับคู่การ์ดได้อย่างเพลิดเพลินและฝึกฝนการจดจำ สำหรับข้อเสนอแนะเพิ่มเติมสามารถปรับปรุงให้เกมมีความหลากหลายมากขึ้น เช่น เพิ่มระดับความยาก เพิ่มเสียง หรือแสดงผลสถิติการเล่น

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

• Mozilla Developer Network (MDN): https://developer.mozilla.org

• W3Schools HTML, CSS, and JavaScript tutorials: https://www.w3schools.com

Code Game

<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Emoji Matching Game</title>
  <style>
    body {
      font-family: Arial, sans-serif;
      display: flex;
      justify-content: center;
      align-items: center;
      height: 100vh;
      background-color: #000000;
    }
    .game-board {
      display: grid;
      grid-template-columns: repeat(4, 100px);
      grid-gap: 10px;
    }
    .card {
      width: 100px;
      height: 100px;
      background-color: #eee;
      display: flex;
      justify-content: center;
      align-items: center;
      font-size: 2rem;
      cursor: pointer;
      border-radius: 10px;
      user-select: none;
    }
    .hidden {
      background-color: #5CE75C;
      cursor: default;
    }
    #reset-btn {
	  margin-left:20px;
      margin-top: 20px;
      padding: 10px 20px;
      font-size: 16px;
      cursor: pointer;
      background-color: #4CAF50;
      color: white;
      border: none;
      border-radius: 5px;
    }
  </style>
</head>
<body>

  <div class="game-board" id="game-board"></div>
  <button id="reset-btn" onclick="startGame()">Start New Game</button>

  <script>
    const emojis = ['😀', '😎', '🐱', '🐶', '🍎', '🍌', '🚗', '✈️'];
    let cardValues = [];
    let firstCard = null;
    let secondCard = null;
    let matchedPairs = 0;

    function shuffle(array) {
      return array.sort(() => Math.random() - 0.5);
    }

    function createBoard() {
      const gameBoard = document.getElementById('game-board');
      gameBoard.innerHTML = ''; // Clear the board
      cardValues = shuffle([...emojis, ...emojis]); // Duplicate and shuffle
      cardValues.forEach((emoji, index) => {
        const card = document.createElement('div');
        card.classList.add('card');
        card.dataset.emoji = emoji;
        card.dataset.index = index;
        card.addEventListener('click', handleCardClick);
        gameBoard.appendChild(card);
      });
    }

    function handleCardClick(event) {
      const clickedCard = event.target;
      const index = clickedCard.dataset.index;

      if (clickedCard.classList.contains('hidden') || firstCard && secondCard) return; // Ignore already matched or clicked cards
      
      clickedCard.textContent = cardValues[index]; // Reveal the emoji

      if (!firstCard) {
        firstCard = clickedCard;
      } else {
        secondCard = clickedCard;
        if (firstCard.dataset.emoji === secondCard.dataset.emoji) {
          firstCard.classList.add('hidden');
          secondCard.classList.add('hidden');
          matchedPairs++;
          if (matchedPairs === emojis.length) {
            setTimeout(() => alert('Congratulations! You matched all pairs!'), 300);
          }
          resetCards();
        } else {
          setTimeout(() => {
            firstCard.textContent = '';
            secondCard.textContent = '';
            resetCards();
          }, 1000);
        }
      }
    }

    function resetCards() {
      firstCard = null;
      secondCard = null;
    }

    function startGame() {
      matchedPairs = 0;
      resetCards();
      createBoard();
    }

    // Start game on page load
    startGame();
  </script>

</body>
</html>

ฟังก์ชันที่น่าสนใจ

  • ฟังก์ชัน CreateBoard() จะสร้างบอร์ดเกมขึ้นมาใหม่ด้วยการสร้างการ์ดขึ้นมา 16 ใบ โดยใช้ Emojis และทำการสุ่มการ์ดแต่ละครั้ง
    function createBoard() {
      const gameBoard = document.getElementById('game-board');
      gameBoard.innerHTML = ''; // Clear the board
      cardValues = shuffle([...emojis, ...emojis]); // Duplicate and shuffle
      cardValues.forEach((emoji, index) => {
        const card = document.createElement('div');
        card.classList.add('card');
        card.dataset.emoji = emoji;
        card.dataset.index = index;
        card.addEventListener('click', handleCardClick);
        gameBoard.appendChild(card);
      });
    }

วิดีโออธิบายโค้ดเกมจับคู่อิโมจิ (Emoji matching game)

You may also like...

ใส่ความเห็น

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