Categories
Game Scratch

สคริปต์ Delicious Fish ตอน 3

ทดลองเล่นเกม Delicious Fish ในเว็บไซต์ Scratch หรือดาวน์โหลดมาเล่นที่เครื่องคุณเอง ได้ ที่นี้

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

สคริปต์ปลาทอง 1 คล้ายกับปลาทองตัวอื่นๆ เมื่อรับรหัส “setup” ก็จะเตรียมตัวเข้าสู่การเล่นด้วยการซ่อนตัวก่อน ในระดับแรก ปลาทอง 1 จะมีหน้าตาเหมือนปลาทองตัวอื่นๆ โดยใช้บล็อกเปลี่ยนชุดแต่งกาย (switch to costume “costume L1”) แต่ในระดับสอง สคริปต์จะต่างออกไปเล็กน้อย คือใช้ชุดแต่งกาย “costume L2” ซึ่งตั้งใจให้ต่างจากปลาทองตัวอื่นๆ ช่วยให้ผู้เล่นรู้ว่าปลาทองตัวไหน เป็นตัวที่ 1 นอกจากนั้น เมื่อมันถูกกิน มันจะส่งรหัส “got 1” แทนที่จะส่ง “got-me” ให้ปลาตัวใหญ่ทราบ และยังพูด “Oh yes!” ยินดีที่ถูกกิน และเมื่อได้รหัส “game-over” มันจะไปยังตำแหน่ง x: 23, y: 75 และหันไปทิศ 110 องศา แล้วแสดงค่าในตัวแปร goldfish1 ซึ่งเป็นจำนวนปลาทอง 1 ที่ถูกกินในระดับสองเท่านั้น

สคริปต์ปลาสีเขียว คล้ายปลาทองอื่นๆ เมื่อรับรหัส “setup” ก็จะเตรียมตัวเข้าสู่การเล่นด้วยการซ่อนตัวก่อน แต่จะโผล่มาเฉพาะในระดับสองเท่านั้น (level=2) มันจะถูกกินถ้าสีเขียวตัวมันเอง สัมผัสสีน้ำเงินของปากปลาตัวใหญ่ จากนั้นจะส่งรหัส “oh-no” ให้ปลาตัวใหญ่ พร้อมคิดว่า “No!” ไม่น่าเลย

การที่ปลาสีเขียวจะคอยตามปลาทอง 1 ได้ มันต้องเช็กระยะห่างจากปลาทอง 1 นั้นคือถ้าห่างกันมากกว่า 20 (distance to goldfish1 > 20) มันจะพุ่งตรงไปหาปลาทอง 1 (point towards goldfish1) อย่างเร็ว (move 3 steps) แต่ถ้ามันอยู่ใกล้ปลาทอง 1 ( < 20 ) มันจะเคลื่อนที่ช้าๆ อยู่ใกล้ๆ (move 1 steps) และยังอ้อยอิ่ง (wait 1.2 secs) เพื่อให้โอกาสปลาตัวใหญ่ มากินเพื่อนมัน

เมื่อได้รหัส “game-over” มันจะไปยังตำแหน่ง x: 91, y: 76 และหันไปทิศ 90 องศา แล้วแสดงค่าในตัวแปร greenfish ซึ่งเป็นจำนวนปลาสีเขียวที่ถูกกิน

Categories
Game Scratch

สคริปต์ Delicious Fish ตอน 2

ทดลองเล่นเกม Delicious Fish ในเว็บไซต์ Scratch หรือดาวน์โหลดมาเล่นที่เครื่องคุณเอง ได้ ที่นี้

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

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

มาดูสคริปต์ของปลาทองตัวที่ 2-4 ซึ่งคล้ายกันมากยกเว้นตอนจบเกม เริ่มจากรับรหัส “setup” เป็นการเตรียมตัวก่อนการเล่นเกมในแต่ละระดับ ซึ่งทำเพียงแค่ซ่อนตัว (hide) และเมื่อได้รหัส “level1” เริ่มต้นเกมระดับแรก ปลาทองก็จะโผล่ออกมา จากนั้นจะทำงานไปเรื่อยๆ ในบล็อก forever เมื่อยังอยู่ในระดับนี้ โดยเช็กตัวแปร “level=1” หรือไม่ ถ้าใช่มันก็จะเคลื่อนไปข้างหน้า 2 หน่วย ส่ายหน้าไปทางซ้ายหรือขวาจากค่าสุ่มระหว่าง -20 ถึง 20 องศา แล้วเช็กตัวเอง ถ้าชนขอบเวทีก็เด้งกลับ ต่อด้วยการเช็กว่าตัวเองถูกกินหรือเปล่า โดยเช็กที่สีส้มของตัวเอง สัมผัสกับสีน้ำเงินของปากปลาตัวใหญ่หรือไม่ ถ้าถูกกินก็จะส่งรหัส “got-me” ให้ปลาตัวใหญ่ จากนั้นซ่อนตัว รอ 1 วินาที (เร็วกว่าของเดิม) แล้วโผล่มาใหม่ ณ ตำแหน่งที่ได้จากการสุ่ม ตำแหน่งไหนก็ได้ของเวที (ของเดิมถูกจำกัดบริเวณแคบๆ)

เมื่อได้รหัส “level2” ก็เริ่มระดับสอง ซึ่งพฤติกรรมเหมือนระดับแรก ยกเว้นว่าต้องเช็กว่ายังอยู่ในระดับสองหรือไม่ (level = 2 ?)

และเมื่อเวลาหมด จะได้รับรหัส “game-over” เพื่อให้ปลาแต่ละชนิดแสดงจำนวนที่ถูกกิน ที่หน้าจอก่อนจะจบเกม ปลาทองตัวที่ 2 (สคริปต์รูปบน) เป็นตัวแทนของปลาทอง 1-4 (ตัวที่ 1 เฉพาะระดับแรก) จะไปตำแหน่ง x:-44, y: 75 แล้วหันไปทิศ 108 องศา และแสดงจำนวนปลาทองที่ถูกกินในตัวแปร goldfish

ตำแหน่งและทิศของปลาทองตัวที่ 2 หาได้ตอนออกแบบเกม โดยนำมันวางตำแหน่งและทิศที่ต้องการ แล้วนำค่าตำแหน่งและทิศที่แสดงในส่วนของข้อมูลปลาทอง 2 มาใส่ในบล็อก

ส่วนปลาทอง 3 และ 4 (รูปซ้าย) เมื่อได้รับรหัส “game-over” ก็แค่หายตัวไป เท่านั้นเอง

Categories
Game Scratch

สคริปต์ Delicious Fish ตอน 1

ทดลองเล่นเกม Delicious Fish ในเว็บไซต์ Scratch หรือดาวน์โหลดมาเล่นที่เครื่องคุณเอง ได้ ที่นี้

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

รูปตัวอย่างจากเกม Delicious Fish ด้านล่างนี้ เป็นลำดับของการเล่นเกม (เรียงจากซ้ายไปขวา บนลงล่าง) เริ่มจากบอกวิธีการเล่นสั้นๆ (ถ้าต้องการดูรายละเอียด ไปที่ Project notes) จากนั้นเข้าสู่ระดับแรก (level 1) ถัดไปเป็นฉากขณะเล่นในระดับแรก จากนั้นเข้าสู่ระดับสอง (level 2) ถัดไปเป็นฉากขณะเล่นในระดับสอง สุดท้ายเป็นฉากจบเกม (Game over) ซึ่งบอกคะแนนรวม และก็จำนวนปลาชนิดต่างๆ ที่กินได้ รวมทั้งสองระดับ

สคริปต์ของตัวควบคุมเกม (game control) เริ่มเมื่อคลิกธงเขียวก็ส่งระหัส “setup” ให้ปลาทุกตัวเตรียมพร้อมก่อนเข้าสู่การเล่น จากนั้นตั้งค่าเริ่มต้นให้ตัวแปร คะแนน (score), เวลา (time), ระดับ (level), ปลาทอง (goldfish), ปลาทองตัวที่ 1 ในระดับสอง (goldfish1), และปลาสีเขียว (greenfish) ตอนออกแบบสร้างเกม ให้คลิกเลือกตัวแปร score ตัวเดียวให้แสดงบนหน้าเวทีตลอดเกม จากนั้นแสดงวิธีการเล่นให้ดู 2 วินาที ต่อด้วยการบอกผู้เล่นว่าจะเข้าสู่การเล่นระดับแรก (level 1) 2 วินาที ก่อนที่จะหายไป ส่งรหัส “level1” ให้ตัวละครทุกตัวเข้าสู่การเล่นระดับแรก

ตัวควบคุมเองก็รับรหัส “level1” เพื่อควบคุมการเล่นในระดับนี้ (ภายในบล็อก forever) ซึ่งทำงานหลักๆ อยู่ 2 อย่าง คือควบคุมเวลา และการส่งต่อไปยังระดับต่อไป โดยใช้บล็อกถ้า (if) เช็คว่าเวลาหมดหรือยัง (time > 0 ?) ถ้ายังก็ลดตัวแปรเวลาลง 1 ทุก 1 วินาที (ใช้บล็อก wait นับเวลา) ถ้าเวลาหมดหมายความว่า ให้เริ่มระดับต่อไป โดยตั้งเวลาใหม่สำหรับระดับสอง และเปลี่ยนตัวแปรระดับเป็น 2 จากนั้นส่งรหัส “setup” ให้ปลาทุกตัวเตรียมพร้อมการเล่นในระดับสอง ต่อด้วยการบอกผู้เล่นว่า จะเข้าสู่การเล่นระดับสอง (level 2 ) โดยให้เวลาผู้เล่นเตรียมตัว 4 วินาที ก่อนจะส่งรหัส “level2” ให้ตัวละครทุกตัว สุดท้ายหยุดการทำงานทั้งหมดในสคริปต์นี้ (ออกจากบล็อก forever) โดยใช้บล็อก “stop script”

และเช่นเดียวกัน ตัวควบคุมเองก็รับรหัส “level2” เพื่อควบคุมการเล่นในระดับ 2 ซึ่งจะจับเวลาเหมือนระดับแรก แต่เมื่อเวลาหมด ให้เปลี่ยนระดับเป็น 0 (ไม่มีระดับต่อไปอีกแล้ว) จากนั้นบอกผู้เล่นว่าจบเกม และให้เวลา 1.5 วินาที กับตัวละครทุกตัวเตรียมพร้อมจบเกม เมื่อได้รหัส “game-over” ซึ่งส่งโดยบล็อก “broadcast game-over and wait” ที่ต้องให้รอ (wait ) ก่อนที่จะจบสคริปต์ทั้งหมดในโปรเจกนี้ ด้วยบล็อก “stop all” เพราะว่าต้องการให้ตัวละครอื่นๆ เล่นฉากจบของตัวเอง ก่อนที่ม่านฉากจะปิดลง

Categories
Game Scratch

Delicious Fish

โปรเจก Delicious Fish เป็นการต่อยอดโปรเจก FishChomp ที่ผมพยายามอธิบาย แต่นึกขึ้นมาได้ว่ามันอยู่ในคอมๆ ของผมคนเดียว ดังนั้นผมได้ upload โปรเจกนี้ที่ scratch.mit.edu ซึ่งสามารถเล่น หรือ download ได้ ที่นี้ ลองดูนะครับ ช่วยแนะนำติชมด้วยจะดีมากเลย ขอบคุณล่วงหน้าไว้ ณ ที่นี้เลยครับ

Categories
Game Scratch

ลงมือต่อยอดเกม FishChomp ตอน 2

การควบคุมเกมมีทั้งระหว่างตัวละครในเกม และระหว่างตัวเกมกับผู้เล่น มาดูว่าเราสามารถเพิ่มอะไรได้บ้างในเกม FishChomp

  • การเพิ่มคะแนน (score) เข้าไปทำให้เกมดูท้าทายขึ้น ทำให้ผู้เล่นรู้ความสามารถของตัวเอง การใส่คะแนนบนเวที ทำได้โดยสร้างตัวแปร score ขึ้นมาก่อน ถ้าคลิกบล็อกหน้าตัวแปร (จะเห็นเครื่องหมายถูก) จะทำให้ตัวแปรนั้นแสดงอยู่บนเวที นอกจากนั้นยังสามารถปรับตำแหน่งตัวแปรบนเวทีได้ด้วย โดยใช้เมาส์ลากไปตำแหน่งที่ต้องการ
  • ถ้าไม่มีเวลาจำกัดในการเล่นแต่ละระดับ ก็จะไม่รู้ว่าเกมจะจบเมื่อใด ยกเว้นแต่ว่าในแต่ละระดับมีเงื่อนไขอื่นกำหนด หรือมีเป้าหมายให้ทำ เช่น กินปลาให้ได้ 20 ตัวเป็นต้น ในการต่อยอดนี้เรากำหนดให้แต่ละระดับมีเวลาไม่เท่ากัน ระดับแรกง่ายหน่อย ใช้ 20 วินาที ระดับสองยากขึ้นมานิดหนึ่งเพิ่มเป็น 30 วินาที
  • ใน Scratch ทำนาฬิกาจับเวลาได้ง่ายๆ โดยสร้างตัวแปร time ขึ้นมาแล้วตั้งค่าเวลาที่ต้องการให้มัน จากนั้นนับเวลาถอยหลังที่ละ 1 วินาที จนกระทั่งเป็น 0 เช่นในระดับแรก ตั้งเป็น 20 วินาทีด้วยบล็อกตั้งค่าตัวแปร จากนั้นเช็กว่าตัวแปร time ยังมากกว่า 0 หรือไม่ ถ้าใช่ จับเวลา 1 วินาทีด้วยบล็อก wait จากนั้นลดค่าตัวแปร time ที่ละ 1 ทำอย่างนี้วนไปเรื่อยๆ ในบล็อก forever จนกว่า time = 0 ด้วยวิธีนี้จะทำให้รู้ว่าเวลาในแต่ละระดับหมดหรือยัง
  • การสื่อสารกับผู้เล่นนั้นก็สำคัญ ตั้งแต่ต้นเกมต้องบอกผู้เล่นว่าเล่นอย่างไร และระหว่างเล่นวิธีเล่นต้องหายไป มิฉะนั้นจะรบกวนการเล่น ก่อนเข้าแต่ละระดับก็ควรบอกว่าขณะนี้จะเล่นในระดับไหน และเมื่อจบเกมก็ควรมีคะแนน หรือข้อมูลอื่นๆ ให้ดู เช่น จำนวนปลาชนิดต่างๆ ที่กินได้
  • เพื่อเพิ่มความท้าทาย เกมจะมี 2 ระดับ (level) โดยระดับแรกมีเพียงปลาทองเหมือนกันหมด 4 ตัว ผู้เล่นเพียงไล่จับกินพวกมัน กินได้ 1 ตัว ได้ 1 คะแนน ส่วนระดับที่สอง ปลาทองตัวที่ 1 (มีหางสีน้ำเงิน) จะมีปลาสีเขียวเป็นเพื่อนคอยว่ายอยู่ใกล้ๆ ถ้ากินปลาทองตัวที่ 1 จะได้โบนัส 2 คะแนน ส่วนปลาทองตัวอื่นได้คะแนนเหมือนเดิม แต่ถ้ากินปลาสีเขียว (สมมุติว่าเป็นลูกปลาตัวใหญ่) จะถูกหัก 3 คะแนน