1) การแบ่งย่อยปัญหา (Decomposition) การแตกปัญหาใหญ่ที่ซับซ้อนออกเป็นปัญหาย่อยๆ ที่เล็กลงและจัดการได้ง่ายขึ้น
2) การจดจำรูปแบบ (Pattern Recognition) การมองหารูปแบบ ความคล้ายคลึง หรือแนวโน้มที่เกิดขึ้นซ้ำๆ ในปัญหาย่อยเหล่านั้น เพื่อนำไปสู่การแก้ปัญหาที่มีประสิทธิภาพ
3) การคิดเชิงนามธรรม (Abstraction) การมุ่งเน้นเฉพาะข้อมูลที่สำคัญและจำเป็นต่อการแก้ปัญหา
4) การออกแบบอัลกอริทึม (Algorithm Design) การสร้างลำดับขั้นตอนที่ชัดเจนและเป็นขั้นเป็นตอนเพื่อแก้ปัญหาย่อยๆ แต่ละส่วน
…
ในยุคที่ AI เป็นเครื่องมือสำคัญ แนวคิดเชิงคำนวณคือทักษะที่ช่วยให้เราทำงานร่วมกับ AI ได้อย่างเต็มศักยภาพ โดยเปลี่ยนเราจากแค่ “ผู้ใช้” ให้กลายเป็น “ผู้ควบคุม” ที่ชาญฉลาด นั่นคือจะทำให้เรา
1) สั่งงาน AI ได้คมชัดขึ้น เราสามารถแบ่งปัญหาซับซ้อนให้เป็นขั้นตอนย่อยๆ เพื่อสร้างคำสั่ง (Prompt) ที่ชัดเจน ทำให้ AI สร้างผลลัพธ์ได้ตรงตามความต้องการและแม่นยำสูง
2) วิเคราะห์ข้อมูลได้เฉียบคม ช่วยให้เรามองเห็น “รูปแบบ” และคัดกรองเฉพาะ “ข้อมูลสำคัญ” จากข้อมูลจำนวนมหาศาลที่ AI นำเสนอ เพื่อนำไปสู่การตัดสินใจที่ดีกว่า
3) ส่งเสริมการสร้างนวัตกรรม เมื่อเราคิดอย่างเป็นระบบ จะทำให้เราเห็นช่องทางในการนำ AI มาประยุกต์ใช้แก้ปัญหาใหม่ๆ ได้อย่างสร้างสรรค์และมีประสิทธิภาพ
…
…
แนวคิดเชิงคำนวณมีองค์ประกอบหลัก 4 อย่าง เราจะนำแต่ละอย่างมาประยุกต์ใช้ในการสร้าง Prompt กันครับ
…
1. การแบ่งย่อยปัญหา (Decomposition) คือการแตกปัญหาใหญ่ “สร้างเกม Tetris” ออกเป็นปัญหาย่อยๆ ที่จัดการได้ง่ายขึ้น ใน Prompt ของเรา เราจะแบ่งโครงสร้างออกเป็นส่วนๆ อย่างชัดเจน เช่น
หน้าจอและองค์ประกอบเกม ขนาดของกระดาน, การแสดงผลคะแนน, ตัวบล็อกถัดไป
ตัวบล็อก (Tetrominoes) รูปทรงและสีของบล็อกทั้ง 7 แบบ
ตรรกะของเกม (Game Logic) บล็อกตกลงมา, การชน, การเคลียร์แถว, Game Over
การควบคุมของผู้เล่น การเลื่อนซ้าย-ขวา, การหมุน, การทิ้งตัวลงอย่างรวดเร็ว
ระบบคะแนน การให้คะแนนเมื่อเคลียร์แถว
…
2. การจดจำรูปแบบ (Pattern Recognition) คือการมองหารูปแบบที่เกิดขึ้นซ้ำๆ ในปัญหา เพื่อให้เราสามารถแก้ปัญหาได้อย่างมีประสิทธิภาพ
ตัวบล็อก ทุกตัวประกอบด้วย 4 บล็อกเล็กๆ เหมือนกัน เราสามารถแทนค่าแต่ละรูปทรงด้วย Matrix ขนาดเล็กได้
การเคลื่อนที่ การเลื่อนซ้าย/ขวา คือการเปลี่ยนค่าพิกัด X, การตกลงมาคือการเปลี่ยนค่าพิกัด Y ในทุกๆช่วงเวลา
การเคลียร์แถว เป็นกระบวนการที่ทำซ้ำๆ คือ “ตรวจสอบทุกแถว -> ถ้าแถวเต็ม -> ลบแถวนั้น -> เลื่อนแถวด้านบนทั้งหมดลงมา”
…
3. การคิดเชิงนามธรรม (Abstraction) คือการมุ่งเน้นเฉพาะข้อมูลที่สำคัญ และซ่อนรายละเอียดที่ไม่จำเป็นออกไป เพื่อให้ปัญหาง่ายต่อการทำความเข้าใจ
กระดานเกม เราไม่จำเป็นต้องวาดภาพทุกพิกเซล แต่เราสามารถแทนกระดานทั้งกระดานด้วยข้อมูลแบบ 2 มิติ (2D Array หรือ List of Lists) โดยใช้ 0 แทนช่องว่าง และใช้ตัวเลขอื่น (เช่น 1-7) แทนสีของบล็อกที่ถูกวางแล้ว
ตัวบล็อกที่กำลังเคลื่อนที่ เราไม่จำเป็นต้องรู้ทุกพิกเซลของมัน แต่เรารู้แค่ “ชนิดของบล็อก”, “พิกัด (มุมบนซ้าย)”, และ “สถานะการหมุน” ก็เพียงพอแล้ว
…
4. การออกแบบอัลกอริทึม (Algorithm Design)คือการสร้างลำดับขั้นตอนที่ชัดเจนเพื่อแก้ปัญหาย่อยๆ แต่ละส่วน นี่คือหัวใจของการเขียน Prompt ให้ AI เข้าใจ
Game Loop หลัก
สร้างบล็อกใหม่ขึ้นมาที่ด้านบน
วนลูปไปเรื่อยๆ
a. รอรับ Input จากผู้เล่น (เลื่อน, หมุน)
b. ทำให้บล็อกตกลงมา 1 ช่อง
c. ตรวจสอบการชน (ชนพื้น หรือชนบล็อกอื่น)
d. ถ้าชน: ให้บล็อกนั้นหยุดนิ่งและกลายเป็นส่วนหนึ่งของกระดาน
e. ตรวจสอบว่ามีแถวไหนเต็มหรือไม่ ถ้ามีให้เคลียร์แถวและคิดคะแนน
f. กลับไปขั้นตอนที่ 1
g. ถ้าบล็อกใหม่ที่สร้างขึ้นมาชนทันที -> Game Over
วาดทุกอย่างลงบนหน้าจอใหม่
…
แล้วเราก็ไปเขียน prompt ที่สมบูรณ์ครับ ตัวอย่าง Prompt คัดลอกไปวางใน AI ได้เลย
…
จงเขียนเว็บแอปฯ สำหรับเกม Tetris แบบคลาสสิกให้สมบูรณ์ โดยใช้โครงสร้างและตรรกะตามขั้นตอนต่อไปนี้
1. การตั้งค่าและองค์ประกอบหลัก (Decomposition & Abstraction)
– หน้าจอเกม:
– กำหนดขนาดหน้าจอ (เช่น 800×700 pixels)
– กำหนดพื้นที่สำหรับ “กระดานเกม” (Game Grid) ตรงกลาง
– กำหนดพื้นที่ด้านข้างสำหรับแสดง “คะแนน (Score)” และ “ตัวบล็อกถัดไป (Next Piece)”
– กระดานเกม
– สร้าง Grid ขนาด 10 (กว้าง) x 20 (สูง) บล็อก
– ใช้ List of Lists เพื่อแทนสถานะของ Grid โดยให้:
– `0` หมายถึงช่องว่าง
– ตัวเลข `1` ถึง `7` หมายถึงสีของบล็อกที่ถูกวางแล้ว
– ตัวบล็อก
– สร้างรูปทรงของบล็อกทั้ง 7 ชนิด (I, O, T, S, Z, L, J)
– แต่ละรูปทรงให้เก็บในรูปแบบ List of Lists (Matrix) ที่แสดงรูปร่าง
– กำหนดสีที่แตกต่างกันสำหรับแต่ละรูปทรง
2. ตรรกะของเกม (Algorithm Design)
– Game Loop หลัก
1. สร้างฟังก์ชันหลัก เพื่อควบคุมการทำงานทั้งหมด
2. ภายใน Loop ให้มีการจัดการ Event (การกดปุ่ม) การอัปเดตสถานะเกม และการวาดภาพใหม่ (Draw)
– การตกของบล็อก
– บล็อกปัจจุบันจะเคลื่อนที่ลง 1 ช่องโดยอัตโนมัติตามช่วงเวลาที่กำหนด (Game Speed)
– Game Speed จะเร็วขึ้นเมื่อ Level เพิ่มขึ้น
– การชน (Collision Detection)
– สร้างฟังก์ชัน `is_collision(piece, grid, piece_x, piece_y)` เพื่อตรวจสอบว่าบล็อกปัจจุบัน
– ชนกับขอบซ้าย/ขวา/ล่างของกระดานหรือไม่
– ชนกับบล็อกอื่นที่วางอยู่แล้วใน Grid หรือไม่
– ฟังก์ชันนี้สำคัญมากและต้องใช้ก่อนการเคลื่อนที่หรือการหมุนทุกครั้ง
– การล็อคบล็อกและการเคลียร์แถว (Pattern Recognition)
1. เมื่อบล็อกชนกับพื้นหรือบล็อกอื่น ให้ “ล็อค” ตำแหน่งของมันลงใน Grid (เปลี่ยนค่าจาก `0` เป็นสีของบล็อกนั้นๆ)
2. หลังจากล็อคแล้ว ให้สร้างฟังก์ชันเพื่อตรวจสอบทุกแถวใน Grid จากล่างขึ้นบน
3. หากแถวใดแถวหนึ่งเต็ม (ไม่มี `0` เลย) ให้
– ลบแถวนั้นทิ้ง
– เพิ่มคะแนน
– เลื่อนแถวทั้งหมดที่อยู่ด้านบนลงมา 1 ช่อง
– Game Over
– เกมจะจบลงเมื่อบล็อกใหม่ที่ถูกสร้างขึ้นมา ชนกับบล็อกอื่นในทันที (หมายความว่ากองบล็อกสูงถึงด้านบนสุด)
3. การควบคุมของผู้เล่น (Algorithm Design)
– เลื่อนซ้าย/ขวา เมื่อผู้เล่นกดปุ่มลูกศรซ้าย/ขวา ให้เปลี่ยนพิกัด X ของบล็อก และต้องตรวจสอบการชนกับขอบข้างและบล็อกอื่นก่อนเสมอ
– หมุน เมื่อผู้เล่นกดปุ่มลูกศรขึ้น ให้หมุน Matrix ของรูปทรงบล็อกปัจจุบัน 90 องศา และต้องตรวจสอบการชนหลังการหมุน หากหมุนแล้วชน ให้หมุนกลับไปสถานะเดิม
– Soft Drop เมื่อผู้เล่นกดปุ่มลูกศรลง ให้บล็อกเคลื่อนที่ลงเร็วขึ้น
– Hard Drop (ทางเลือก) เมื่อผู้เล่นกด Spacebar ให้บล็อกวาร์ปลงไปตำแหน่งล่างสุดทันที
4. ระบบคะแนน (Scoring)
– เคลียร์ 1 แถว 100 คะแนน
– เคลียร์ 2 แถว 300 คะแนน
– เคลียร์ 3 แถว 500 คะแนน
– เคลียร์ 4 แถว (Tetris) 800 คะแนน
5. เทคโนโลยีที่ใช้
– ภาษา HTML, CSS, Javascript

