จัดทำโดย นาย ศิวกร ตั้นหุ้ย วฟ.สมทบ รหัสนักศึกษา 167204132027
คณะวิศวกรรมศาสตร์/สาขาวิศวกรรมไฟฟ้า
รายวิชา 04000104 การโปรแกรมคอมพิวเตอร์1/2567
1. ความเป็นมา(Background)
เกมจับคู่ตัวเลขเป็นเกมที่ได้รับความนิยมอย่างแพร่หลาย เนื่องจากมีรูปแบบการเล่นที่เรียบง่าย เข้าใจง่าย และสามารถเล่นได้ทุกเพศทุกวัย เกมนี้มีต้นกำเนิดมาจากเกมไพ่จับคู่ ซึ่งเป็นเกมที่นิยมเล่นกันในหลายวัฒนธรรม การนำเกมจับคู่มาพัฒนาเป็นรูปแบบดิจิทัล ทำให้สามารถเข้าถึงได้ง่ายขึ้นและมีรูปแบบการเล่นที่หลากหลายมากขึ้น
2. วัตถุประสงค์(Objective)
- พัฒนาทักษะการสังเกต: ผู้เล่นต้องสังเกตภาพหรือตัวเลขที่ปรากฏบนหน้าจอ เพื่อหาคู่ที่เหมือนกัน
- พัฒนาทักษะความจำ: ผู้เล่นต้องจำตำแหน่งของภาพหรือตัวเลขที่พลิกขึ้นมา เพื่อหาคู่ที่ตรงกัน
- เพิ่มความสนุกสนาน: เกมนี้ถูกออกแบบมาเพื่อให้ผู้เล่นได้ผ่อนคลายและสนุกสนาน
- ฝึกสมาธิ: การเล่นเกมจับคู่ช่วยให้ผู้เล่นสามารถฝึกสมาธิและความอดทนได้ดีขึ้น
3. ขอบเขต(Scope)
ขอบเขตของเกมจับคู่ตัวเลขมีความยืดหยุ่นสูง สามารถปรับเปลี่ยนและพัฒนาได้ตามความต้องการและความสนใจของผู้เล่นและผู้พัฒนา ทำให้เกมนี้เป็นเกมที่ได้รับความนิยมและสามารถนำไปประยุกต์ใช้ได้ในหลายรูปแบบ
4.ประโยชน์ที่คาดว่าจะได้รับ(Benefits)
- พัฒนาทักษะการจดจำ: การเล่นเกมจับคู่ตัวเลขจะช่วยฝึกให้ผู้เล่นจดจำตำแหน่งของตัวเลข รูปภาพ หรือสัญลักษณ์ต่างๆ ได้ดีขึ้น
- เพิ่มความสามารถในการสังเกต: ผู้เล่นต้องสังเกตรายละเอียดของตัวเลขหรือภาพที่ปรากฏบนหน้าจออย่างละเอียด เพื่อหาคู่ที่ตรงกัน
- ฝึกสมาธิ: การเล่นเกมจับคู่ตัวเลขต้องใช้สมาธิในการค้นหาคู่ที่ตรงกัน ทำให้ผู้เล่นสามารถฝึกสมาธิได้ดีขึ้น
- เพิ่มความสนุกสนาน: เกมจับคู่ตัวเลขถูกออกแบบมาให้เล่นได้อย่างสนุกสนาน ทำให้ผู้เล่นรู้สึกผ่อนคลายและเพลิดเพลิน
5. ความรู้ที่เกี่ยวข้อง(Related Knowledge)
พื้นฐาน HTML
- การสร้างโครงสร้าง: HTML ใช้ในการสร้างโครงสร้างพื้นฐานของเกม เช่น การใช้แท็ก
<div>
สำหรับการ์ด,<h1>
สำหรับหัวข้อ, และ<button>
สำหรับปุ่มเริ่มต้น. - การจัดกลุ่มองค์ประกอบ: การใช้
<div>
และ<span>
เพื่อจัดกลุ่มและแสดงข้อมูลต่างๆ เช่น คะแนนและระดับ.
CSS และการออกแบบ UI
- การออกแบบสไตล์: CSS ใช้ในการตกแต่งการ์ด, ปรับขนาด, สี, และการจัดเรียงเพื่อให้เกมมีรูปลักษณ์ที่น่าสนใจ.
- Responsive Design: การใช้เทคนิค CSS เพื่อทำให้เกมเล่นได้บนอุปกรณ์หลากหลายขนาด เช่น มือถือและแท็บเล็ต.
JavaScript และการโต้ตอบ
- การจัดการเหตุการณ์: JavaScript ใช้ในการจัดการเหตุการณ์เมื่อผู้ใช้คลิกการ์ด และตรวจสอบว่าการจับคู่ถูกต้องหรือไม่.
- การติดตามสถานะ: การใช้ตัวแปรเพื่อเก็บสถานะของเกม เช่น คะแนน, การ์ดที่ถูกเปิด, และระดับของเกม.
ตรรกะและการวางแผน
- การพัฒนาเกม: การสร้างเกมช่วยพัฒนาทักษะการคิดเชิงตรรกะ โดยต้องวางแผนว่าจะเปิดการ์ดไหนก่อน และเมื่อไหร่ที่จะจับคู่.
- การจัดการสถานะ: การตรวจสอบว่าเมื่อใดควรรีเซ็ตตัวแปรหรืออัปเดตคะแนน.
การทดสอบและการปรับปรุง
- การทดสอบฟังก์ชัน: การทดสอบแต่ละฟังก์ชันเพื่อให้แน่ใจว่าทำงานได้ถูกต้อง เช่น การตรวจสอบการจับคู่.
- การรวบรวมฟีดแบค: การนำฟีดแบคจากผู้เล่นมาปรับปรุงเกม เช่น ความยากง่ายของเกม หรือการเพิ่มฟีเจอร์ใหม่.
การใช้เอฟเฟกต์และแอนิเมชัน
- การสร้างประสบการณ์ที่น่าสนใจ: การเพิ่มเอฟเฟกต์ CSS เพื่อทำให้การเปิดการ์ดและการจับคู่มีความน่าสนใจมากขึ้น.
- การใช้แอนิเมชัน: การใช้ @keyframes ใน CSS เพื่อสร้างการกระเด้งหรือการเปลี่ยนสีเมื่อจับคู่ได้.
การพัฒนาอย่างยั่งยืน
- การจัดการโค้ด: การใช้แนวปฏิบัติที่ดีในการเขียนโค้ด เช่น การใช้ฟังก์ชันย่อยและการจัดระเบียบโค้ดเพื่อให้ดูแลรักษาง่าย.
- การปรับขนาดโครงการ: การออกแบบเกมให้สามารถขยายได้ในอนาคต เช่น การเพิ่มระดับความยากหรือฟีเจอร์ใหม่.
6. การดำเนินงาน(Implementation)
6.1. โครงสร้าง HTML
- โค้ดเริ่มต้นด้วยการประกาศ
<!DOCTYPE html>
และการเปิด<html>
พร้อมตั้งค่าภาษาเป็นอังกฤษ (lang="en"
). - มีการใช้
<head>
สำหรับส่วนของเมตาและสไตล์:<meta charset="UTF-8">
: กำหนดการเข้ารหัสเป็น UTF-8<meta name="viewport" content="width=device-width, initial-scale=1.0">
: ปรับขนาดหน้าจอให้เหมาะสมกับอุปกรณ์<title>
: ตั้งชื่อหน้าเป็น “Number Matching Game”
6.2. CSS สำหรับการออกแบบ
- มีการตั้งค่าสไตล์สำหรับ:
body
: ใช้ฟอนต์, ตั้งค่าพื้นหลัง, และจัดกลางข้อความh1
: ตั้งค่าขนาดตัวอักษรและสีสำหรับชื่อเกม.scoreboard
: สำหรับแสดงคะแนนและระดับ.game-board
: ตั้งค่าการจัดเรียงการ์ดในรูปแบบกริด (grid) โดยมี 4 คอลัมน์.card
: ใช้เพื่อแสดงการ์ดแต่ละใบ, มีการทำให้สามารถหมุนได้เมื่อคลิก- .card-front และ .card-back: กำหนดลักษณะของด้านหน้าและด้านหลังของการ์ด
button
: การออกแบบปุ่มรีสตาร์ทเกม
6.3. JavaScript สำหรับการทำงานของเกม
–ตัวแปร
const numbers
: กำหนดตัวเลขที่ใช้ในเกม (1 ถึง 8)let firstCard, secondCard
: ตัวแปรที่เก็บการ์ดที่ถูกเปิดlet lockBoard
: ป้องกันไม่ให้ผู้เล่นคลิกการ์ดในขณะที่กำลังตรวจสอบการจับคู่let matchedPairs
: นับจำนวนคู่การ์ดที่ผู้เล่นจับคู่ได้let score
และlet level
: เก็บคะแนนและระดับของเกม
–ฟังก์ชันหลัก
generateCards
- ฟังก์ชันนี้ทำหน้าที่สร้างการ์ดขึ้นมาใหม่:
- สร้างการ์ด: สร้างการ์ดสองใบสำหรับตัวเลขแต่ละตัว (1-8), จัดเรียงตัวเลขแบบสุ่ม
- สร้าง DOM: ใช้
document.createElement
เพื่อสร้างการ์ดใหม่และเพิ่มลงในgameBoard
flipCard
- ฟังก์ชันนี้จะถูกเรียกเมื่อผู้เล่นคลิกการ์ด:
- ตรวจสอบสถานะ: ถ้าการ์ดถูกล็อกหรือการ์ดนี้ถูกคลิกไปแล้ว จะไม่ทำงาน
- หมุนการ์ด: ใช้
classList.add('is-flipped')
เพื่อทำให้การ์ดหมุน - ตรวจสอบการจับคู่: ถ้ามีการเปิดการ์ดสองใบ จะเช็คว่าตัวเลขเหมือนกันหรือไม่
- ถ้า เหมือนกัน: จะเพิ่มคะแนนและตรวจสอบว่าจับคู่ครบทุกคู่หรือยัง
- ถ้า ไม่เหมือนกัน: จะเรียกใช้ฟังก์ชัน
unflipCards
เพื่อลบการ์ดที่ไม่ตรงกัน
disableCards
- ปิดการคลิกการ์ดที่จับคู่ได้แล้ว โดยใช้
removeEventListener
เพื่อลบการฟังค์ชันคลิก
unflipCards
- จะถูกเรียกเมื่อการ์ดสองใบไม่ตรงกัน:
- ใช้
setTimeout
เพื่อทำให้การ์ดกลับไปที่ด้านหน้า (unflip) หลังจาก 1 วินาที
- ใช้
resetBoard
- รีเซ็ตตัวแปรเพื่อเตรียมสำหรับการคลิกการ์ดใบใหม่
nextLevel
- ฟังก์ชันนี้จะถูกเรียกเมื่อผู้เล่นจับคู่การ์ดครบ:
- แจ้งผู้เล่นเกี่ยวกับการเลื่อนไปยังด่านถัดไป และอัปเดตระดับและคะแนน
updateScoreboard
- ฟังก์ชันนี้ใช้เพื่ออัปเดตคะแนนและระดับบนหน้าจอทุกครั้งที่มีการเปลี่ยนแปลง
Restart Game
- มีการเชื่อมต่อปุ่ม “Restart Game” กับฟังก์ชันที่รีเซ็ตคะแนนและระดับกลับไปที่เริ่มต้น
6.4. การเริ่มเกม
เมื่อโหลดหน้าเว็บครั้งแรก, ฟังก์ชัน generateCards
จะถูกเรียกเพื่อสร้างการ์ดและเริ่มเกม
7.วิธีการใช้งานโปรแกรม (How to Use)
- การเข้าถึงเกม:
- เปิดเว็บเบราว์เซอร์ (เช่น Chrome, Firefox, Edge) บนอุปกรณ์ของคุณ
- คัดลอกโค้ด HTML ที่คุณให้มาและวางลงในไฟล์ใหม่ที่มีนามสกุล
.html
(เช่นnumber_matching_game.html
)
- เปิดไฟล์:
- เปิดไฟล์นี้ในเว็บเบราว์เซอร์ของคุณ โดยคลิกขวาที่ไฟล์แล้วเลือก “Open with” และเลือกเบราว์เซอร์ที่ต้องการ
- เริ่มเกม:
- เมื่อเปิดไฟล์แล้ว คุณจะเห็นหน้าจอที่มีชื่อเกม “Number Matching Game”, แถบคะแนน (Scoreboard) ที่แสดงคะแนนและระดับ, และกริดของการ์ด
- คลิกที่การ์ดใด ๆ เพื่อเริ่มเล่น
- วิธีการเล่น:
- เมื่อคุณคลิกการ์ดหนึ่งใบ การ์ดจะหมุนเพื่อแสดงตัวเลขที่อยู่ด้านหลัง
- คลิกการ์ดที่สอง หลังจากนั้นเกมจะตรวจสอบว่าตัวเลขบนการ์ดทั้งสองใบตรงกันหรือไม่
- ถ้าตรงกัน:
- การ์ดทั้งสองใบจะยังคงหันหน้าแสดงตัวเลข
- คะแนนจะเพิ่มขึ้น 10 คะแนน
- หากจับคู่ได้ครบทุกคู่ จะมีการแจ้งเตือนว่า “You completed the level! Moving to the next level.” และเริ่มด่านใหม่
- ถ้าไม่ตรงกัน:
- การ์ดทั้งสองใบจะกลับไปที่ด้านหน้า (unflip) หลังจาก 1 วินาที
- คุณจะต้องพยายามจับคู่การ์ดอีกครั้ง
- ถ้าตรงกัน:
- รีสตาร์ทเกม:
- หากคุณต้องการเริ่มเกมใหม่ สามารถคลิกปุ่ม “Restart Game” ที่ด้านล่างของหน้าจอ
- คะแนนและระดับจะถูกตั้งค่าเป็น 0 และ 1 ตามลำดับ และเกมจะเริ่มใหม่
8.การทดลอง(Testing)
- เปิดโปรแกรม:
- เริ่มต้นโดยการเปิดไฟล์ HTML ในเบราว์เซอร์ที่คุณเลือก
- ทดสอบการเริ่มเกม:
- เมื่อเปิดโปรแกรม คุณควรเห็นหัวข้อ “Number Matching Game” และแถบคะแนนที่แสดง “Score: 0” และ “Level: 1”
- การ์ดต่างๆ จะถูกสร้างขึ้นและแสดงอยู่ในกริด
- ทดสอบการจับคู่:
- คลิกการ์ดใบแรกแล้วคลิกการ์ดใบที่สอง:
- กรณีที่จับคู่สำเร็จ:
- ตรวจสอบว่าการ์ดทั้งสองใบแสดงหมายเลขที่ตรงกัน
- ควรมีการเพิ่มคะแนน 10 คะแนน
- ตรวจสอบว่าแถบคะแนนได้รับการอัปเดตอย่างถูกต้อง
- หากคุณจับคู่ครบทุกคู่ จะมีการแจ้งเตือนว่าคุณทำสำเร็จและระดับถัดไปจะเริ่มขึ้น
- กรณีที่ไม่จับคู่:
- ตรวจสอบว่าการ์ดทั้งสองใบจะกลับไปที่ด้านหน้า (unflip) หลังจาก 1 วินาที
- กรณีที่จับคู่สำเร็จ:
- คลิกการ์ดใบแรกแล้วคลิกการ์ดใบที่สอง:
- ทดสอบการเลื่อนระดับ:
- หลังจากจับคู่ตัวเลขครบทุกคู่ในระดับแรก คุณควรได้รับการแจ้งเตือนให้ไปยังระดับถัดไป
- คะแนนควรเพิ่มขึ้น 50 คะแนนเมื่อเริ่มระดับใหม่
- จำนวนการ์ดในระดับถัดไปควรมีการเพิ่มขึ้น (ถ้าคุณตั้งโปรแกรมให้เพิ่มจำนวนการ์ดในแต่ละระดับ)
- ทดสอบการรีสตาร์ทเกม:
- คลิกที่ปุ่ม “Restart Game”:
- ตรวจสอบว่าคะแนนและระดับกลับไปที่ 0 และ 1 ตามลำดับ
- ตรวจสอบว่าการ์ดถูกสร้างใหม่และแสดงในกริดอีกครั้ง
- คลิกที่ปุ่ม “Restart Game”:
- การทดสอบการใช้งาน:
- ตรวจสอบว่าผู้เล่นสามารถคลิกที่การ์ดได้หลายครั้งในระหว่างการเล่น
- ตรวจสอบว่าผู้เล่นไม่สามารถคลิกการ์ดที่จับคู่ได้แล้วอีกครั้ง
- ทดสอบว่าเกมยังทำงานได้ตามปกติเมื่อทำซ้ำการเล่นหลายครั้ง
- ทดสอบความรู้สึกของผู้เล่น:
- ตรวจสอบว่าเกมดูดีและเล่นได้ง่าย
- สังเกตว่าความล่าช้าในการหมุนการ์ดและข้อความแจ้งเตือนมีความน่าพอใจหรือไม่
9. เทคนิคการประยุกต์เพื่อเพิ่มประสิทธิภาพมากขึ้น(Improvement )
- เพิ่มรูปแบบการเล่น: เช่น เกมจับคู่ตัวเลขที่มีเวลาจำกัด หรือเกมจับคู่ตัวเลขที่มีอุปสรรค
- เพิ่มกราฟิกและเสียง: ทำให้เกมมีความสวยงามและน่าสนใจมากขึ้น
- เพิ่มระบบเก็บคะแนน: เพื่อให้ผู้เล่นมีความท้าทายในการทำคะแนนสูงสุด
- เชื่อมต่อกับโซเชียลมีเดีย: เพื่อให้ผู้เล่นสามารถแชร์คะแนนและแข่งขันกับเพื่อนได้
10. สรุปผลและข้อเสนอแนะ(Conclusion and Recommendations)
- เกมจับคู่ตัวเลขเป็นเกมที่พัฒนาได้ง่าย และสามารถนำไปประยุกต์ใช้ได้หลากหลายรูปแบบ
- การพัฒนาเกมนี้ช่วยให้ผู้พัฒนาได้ฝึกทักษะด้านการเขียนโปรแกรมและการออกแบบเกม
- เกมนี้มีประโยชน์ต่อผู้เล่นในการพัฒนาทักษะด้านความจำและการสังเกต
11.อ้างอิง
“HTML: Elements.” MDN Web Docs. (n.d.). , https://developer.mozilla.org/en-US/docs/Web/HTML/Element. Accessed 03 Oct 2024.