10-16-2016, 07:57 PM
สอนเขียนสคริปต์อย่างง่ายๆ #1 If Else
วันนี้ผมจะมาสอนอะไรที่โคตรจะเบสิคของการเขียนสคริปต์เลยแหละ
นั่นก็คือการใช้ If ถ้าท่านใช้เป็น ท่านจะเอาไปประยุกต์อะไรได้อีกมากมาย
และแน่นอนไม่ใช่เฉพาะ GMS ทุกโปรแกรมเอาไปใช้ได้หมด (เพียงแต่การเขียนจะแตกต่างกันไป)
เริ่มแรก ผมอยากจะให้ทุกคนเข้าใจหลักการทำงานก่อน
If คือการตรวจสอบเงื่อนไขว่าเป็นจริงหรือไม่ และจะเกิดอะไรขึ้นถ้าหากมันจริง
ยกตัวอย่างง่ายๆ เช่น ถ้าหิวจริง ก็ออกไปซื้อข้าวกิน ถ้าซื้อข้าวกิน ก็ต้องเสียเงิน เป็นต้น
โครงสร้างของภาษา GML
if เงื่อนไข
{
สิ่งที่จะกระทำ
}
เปรียบการซื้อข้าวเป็นภาษาโค้ด
if ความหิว = 100
{
ออกไปซื้อข้าวกิน
}
แล้วถ้าหากไม่จริงล่ะ ? จะทำอย่างไรให้มันกระทำอีกอย่าง
...นั่นก็คือการใช้ Else
if เงื่อนไข
{
สิ่งที่จะกระทำ
}
else
{
สิ่งที่จะกระทำเมื่อไม่จริง
}
if ความหิว = 100
{
ออกไปซื้อข้าวกิน
}
else
{
ความหิวเพิ่มนาทีละ 1
}
เราสามารถใส่ if ซ้อนทับไปอีก เพื่อให้มันทำงานไปเรื่อยๆ
if ความหิว = 100
{
รู้สึกหิว
if ออกไปซื้อข้าวกิน
{
เงิน -= 50
}
}
หมายเหตุ : ในการลด หรือเพิ่มตัวแปรนั้น เราไม่สามารถใช้ + , - ไปตรงๆได้ จำเป็นต้องใช้ = มาช่วยด้วย
เช่นจะลดเงิน ไม่สามารถใช้ เงิน - 50 ได้ ต้องใช้ เงิน -= 50 หรือ เงิน =- 50 เท่านั้น
ถ้าเคยใช้ RPG Maker คงจะเข้าใจแล้วใช่ไหมครับ มันก็คือคำสั่งตรวจเช็คเงื่อนไขนั่นเอง
เพียงแต่การเขียนสคริปต์ มันจะไม่มีอะไรมาให้เรามาเลยครับ เราต้องมานั่งเขียนคำสั่งเอง
ดังนั้น if จึงสำคัญมาก เราจะเขียนสคริปต์เดินได้อย่างไร ถ้าเราไม่ตรวจสอบว่ามันกดปุ่มเดินหรือไม่ ?
กล่าวคือ สคริปต์ทำงานโดยการตรวจเช็คเงื่อนไขหลายๆอย่างนั่นเอง
ถ้าเลเวลอัพ จะเพิ่มพลังโจมตี , ถ้าโดนกระสุน จะลดเลือด , ถ้าเลือดหมด จะเกมโอเวอร์
พอเข้าใจแล้วใช่ไหมครับ ?
คราวนี้มาถึงการใช้งานจริง ผมจะสอนถึงวิธีการเขียนสคริปต์บังคับตัวละครด้วยปุ่ม WASD
ก่อนอื่นเรามาวางแผนกันก่อนครับ จะให้ตัวสคริปต์เป็นไงมั่ง
if กดปุ่ม W
{ เดินข้างบน }
if กดปุ่ม A
{ เดินข้างซ้าย }
if กดปุ่ม S
{ เดินลง }
if กดปุ่ม D
{ เดินข้างขวา }
หมายเหตุ : เราสามารถย่อ { } ให้อยู่ในบรรทัดเดียวกันได้ เพื่อไม่ให้มันบรรทัดเยอะรกหูรกตา
หลังจากออกแบบเสร็จแล้ว การจะเขียนสคริปต์ได้จริงนั้น เราจำเป็นจะต้องรู้โค้ดก่อน
โค้ดตรวจสอบว่ากดปุ่มนั้นใช้ keyboard_check(key) ในวงเล็บให้ใส่ตัวคีย์ที่ต้องการ
โค้ดคีย์ก็จะมีหลายแบบ แต่สำหรับปุ่มตัวอักษรนั้นให้ใช้ ord(‘key’)
เช่น ตรวจสอบว่ากดปุ่ม W ให้ใช้ keyboard_check(ord(‘W’) )
ทีนี้เราก็จะได้ขั้นหนึ่งแล้ว
if keyboard_check(ord(‘W’) )
{ เดินข้างบน }
ส่วนจะให้มันเดินยังไง การเดินก็จะมีหลายแบบครับ เช่นเดินเป็นช่อง เดินเป็น บลาๆ
แต่ทีผมจะใช้คือการสั่งให้ Object ย้ายตำแหน่งใน Room ครับ
สิ่งสำคัญที่ต้องรู้ก็คือเรื่องของตำแหน่ง เพราะมันจำเป็นต้องใช้มากๆ
x คือตำแหน่งแนวนอน
y คือตำแหน่งแนวตั้ง
x , y ก็คือค่าหนึ่ง ถ้าเราเขียนโค้ดใน Object นั้น มันก็จะหมายถึงตำแหน่งของ Object นั้น
ปกติแล้วเมื่อเราเอา Object ไปวางไว้ใน Room ค่า x , y จะถูกตั้งให้เป็น 0 ณ ตำแหน่งนั้น
ดังนั้นไม่ว่าจะอยู่ตรงส่วนไหน ค่า x , y ของ Object นั้น จะเท่ากับ 0 เสมอ
และถ้าหากเราสั่งให้มันเพิ่มหรือลบ มันก็จะย้ายจากตำแหน่งนั้น
มาตรงถึงส่วนการเคลื่อนที่
ถ้าค่า x ติดลบ ตำแหน่งจะเคลื่อนไปด้านซ้าย ถ้าเพิ่มขึ้นจะไปด้านขวา
ถ้าค่า y ติดลบ ตำแหน่งจะเคลื่อนลง ถ้าเพิ่มจะเลื่อนขึ้น
if กดปุ่ม w
{ ตำแหน่งแนวตั้งเพิ่ม 10 }
if keyboard_check(ord(‘W’) )
{ y += 10 }
เท่านี้เราก็จะได้โค้ดเคลื่อนที่แล้วครับ เหลือแค่ทำให้ครบทั้งสี่ตัว
ลองเอาไปทำดูนะครับ ผมเชือว่าทุกคนทำได้ แล้วพบกันใหม่คราวหน้าครับ
Credit : slost
Code Codex รวบรวมโค้ด พร้อมคำอธิบายเป็นภาษาไทย
วันนี้ผมจะมาสอนอะไรที่โคตรจะเบสิคของการเขียนสคริปต์เลยแหละ
นั่นก็คือการใช้ If ถ้าท่านใช้เป็น ท่านจะเอาไปประยุกต์อะไรได้อีกมากมาย
และแน่นอนไม่ใช่เฉพาะ GMS ทุกโปรแกรมเอาไปใช้ได้หมด (เพียงแต่การเขียนจะแตกต่างกันไป)
เริ่มแรก ผมอยากจะให้ทุกคนเข้าใจหลักการทำงานก่อน
If คือการตรวจสอบเงื่อนไขว่าเป็นจริงหรือไม่ และจะเกิดอะไรขึ้นถ้าหากมันจริง
ยกตัวอย่างง่ายๆ เช่น ถ้าหิวจริง ก็ออกไปซื้อข้าวกิน ถ้าซื้อข้าวกิน ก็ต้องเสียเงิน เป็นต้น
โครงสร้างของภาษา GML
if เงื่อนไข
{
สิ่งที่จะกระทำ
}
เปรียบการซื้อข้าวเป็นภาษาโค้ด
if ความหิว = 100
{
ออกไปซื้อข้าวกิน
}
แล้วถ้าหากไม่จริงล่ะ ? จะทำอย่างไรให้มันกระทำอีกอย่าง
...นั่นก็คือการใช้ Else
if เงื่อนไข
{
สิ่งที่จะกระทำ
}
else
{
สิ่งที่จะกระทำเมื่อไม่จริง
}
if ความหิว = 100
{
ออกไปซื้อข้าวกิน
}
else
{
ความหิวเพิ่มนาทีละ 1
}
เราสามารถใส่ if ซ้อนทับไปอีก เพื่อให้มันทำงานไปเรื่อยๆ
if ความหิว = 100
{
รู้สึกหิว
if ออกไปซื้อข้าวกิน
{
เงิน -= 50
}
}
หมายเหตุ : ในการลด หรือเพิ่มตัวแปรนั้น เราไม่สามารถใช้ + , - ไปตรงๆได้ จำเป็นต้องใช้ = มาช่วยด้วย
เช่นจะลดเงิน ไม่สามารถใช้ เงิน - 50 ได้ ต้องใช้ เงิน -= 50 หรือ เงิน =- 50 เท่านั้น
ถ้าเคยใช้ RPG Maker คงจะเข้าใจแล้วใช่ไหมครับ มันก็คือคำสั่งตรวจเช็คเงื่อนไขนั่นเอง
เพียงแต่การเขียนสคริปต์ มันจะไม่มีอะไรมาให้เรามาเลยครับ เราต้องมานั่งเขียนคำสั่งเอง
ดังนั้น if จึงสำคัญมาก เราจะเขียนสคริปต์เดินได้อย่างไร ถ้าเราไม่ตรวจสอบว่ามันกดปุ่มเดินหรือไม่ ?
กล่าวคือ สคริปต์ทำงานโดยการตรวจเช็คเงื่อนไขหลายๆอย่างนั่นเอง
ถ้าเลเวลอัพ จะเพิ่มพลังโจมตี , ถ้าโดนกระสุน จะลดเลือด , ถ้าเลือดหมด จะเกมโอเวอร์
พอเข้าใจแล้วใช่ไหมครับ ?
คราวนี้มาถึงการใช้งานจริง ผมจะสอนถึงวิธีการเขียนสคริปต์บังคับตัวละครด้วยปุ่ม WASD
ก่อนอื่นเรามาวางแผนกันก่อนครับ จะให้ตัวสคริปต์เป็นไงมั่ง
if กดปุ่ม W
{ เดินข้างบน }
if กดปุ่ม A
{ เดินข้างซ้าย }
if กดปุ่ม S
{ เดินลง }
if กดปุ่ม D
{ เดินข้างขวา }
หมายเหตุ : เราสามารถย่อ { } ให้อยู่ในบรรทัดเดียวกันได้ เพื่อไม่ให้มันบรรทัดเยอะรกหูรกตา
หลังจากออกแบบเสร็จแล้ว การจะเขียนสคริปต์ได้จริงนั้น เราจำเป็นจะต้องรู้โค้ดก่อน
โค้ดตรวจสอบว่ากดปุ่มนั้นใช้ keyboard_check(key) ในวงเล็บให้ใส่ตัวคีย์ที่ต้องการ
โค้ดคีย์ก็จะมีหลายแบบ แต่สำหรับปุ่มตัวอักษรนั้นให้ใช้ ord(‘key’)
เช่น ตรวจสอบว่ากดปุ่ม W ให้ใช้ keyboard_check(ord(‘W’) )
ทีนี้เราก็จะได้ขั้นหนึ่งแล้ว
if keyboard_check(ord(‘W’) )
{ เดินข้างบน }
ส่วนจะให้มันเดินยังไง การเดินก็จะมีหลายแบบครับ เช่นเดินเป็นช่อง เดินเป็น บลาๆ
แต่ทีผมจะใช้คือการสั่งให้ Object ย้ายตำแหน่งใน Room ครับ
สิ่งสำคัญที่ต้องรู้ก็คือเรื่องของตำแหน่ง เพราะมันจำเป็นต้องใช้มากๆ
x คือตำแหน่งแนวนอน
y คือตำแหน่งแนวตั้ง
x , y ก็คือค่าหนึ่ง ถ้าเราเขียนโค้ดใน Object นั้น มันก็จะหมายถึงตำแหน่งของ Object นั้น
ปกติแล้วเมื่อเราเอา Object ไปวางไว้ใน Room ค่า x , y จะถูกตั้งให้เป็น 0 ณ ตำแหน่งนั้น
ดังนั้นไม่ว่าจะอยู่ตรงส่วนไหน ค่า x , y ของ Object นั้น จะเท่ากับ 0 เสมอ
และถ้าหากเราสั่งให้มันเพิ่มหรือลบ มันก็จะย้ายจากตำแหน่งนั้น
มาตรงถึงส่วนการเคลื่อนที่
ถ้าค่า x ติดลบ ตำแหน่งจะเคลื่อนไปด้านซ้าย ถ้าเพิ่มขึ้นจะไปด้านขวา
ถ้าค่า y ติดลบ ตำแหน่งจะเคลื่อนลง ถ้าเพิ่มจะเลื่อนขึ้น
if กดปุ่ม w
{ ตำแหน่งแนวตั้งเพิ่ม 10 }
if keyboard_check(ord(‘W’) )
{ y += 10 }
เท่านี้เราก็จะได้โค้ดเคลื่อนที่แล้วครับ เหลือแค่ทำให้ครบทั้งสี่ตัว
ลองเอาไปทำดูนะครับ ผมเชือว่าทุกคนทำได้ แล้วพบกันใหม่คราวหน้าครับ
Credit : slost
Code Codex รวบรวมโค้ด พร้อมคำอธิบายเป็นภาษาไทย