งงกับอะโบ้เข็ด : Order key

posted on 03 Jan 2008 12:34 by xnanoob  in Tutorials


สวัสดีค่า

วันนี้มาหัดปล่อยพลังนะค่ะ
ก้องงๆ เหมือนกันไม่รู้จะควบคุมลำดับของการกดยังไง

    

จากในรูปคือต้องการปล่อยพลัง โดยมีลำดับดังนี้ กดลง กดเฉียงขวา กดขวา แล้วต่อย (ปุ่ม X)
ปัญหาที่พบก้อคือถ้ายืนอยู่เฉยๆ ก้อต้องมีสถานะเป็น idleไป    หรือลำดับไม่ได้เป็นไปตามต้องการ
ก้อให้ไปสู่ idle state ด้วย


แบบนี้หรือเป่าหว่า (มั่ง)


ในรูปนี้กำหนดให้ A = กดลง ,B = กดเฉียง ,C = กดขวา ,D = ต่อย

ในการที่จะตรวจสอบเช็ดสถานะที่ผู้เล่นกดมานั้นก้อมีปัญหาตอนตรวจสอบเหมือนกัน
เช่นผู้เช่นกดปุ่มแช่เอาไว้เป็นต้น


จังหวะนี้อาจจะเป็นการที่เคนนั่งตั้งรับแล้วปล่อยพลังก้อได้  (นึกภาพตามเอาเองนะ)





อีกตัวอย่างเช่น ตอนที่กิวปล่อยโซนิคบูม ก้อต้องมีจังหวะที่เดินถอยหลังค้างไว้
แล้วค่อยเดินหน้าต่อย

การตรวจสอบนั้นคล้าย Regular Expression หรือเปล่าหว่า?


เดี๋ยวลองมั่วดูก่อน

โดยในตอนแรกก้อไม่รู้จะทำไงดีเลยไปถามอ. อ.บอกว่าให้ใช้ queue ในการเก็บ action ก่อน
ส่วนการ process ตอนออกนั้น(pop ค่าออกจาก queue) ให้มั่วใช้ Regular Expression ในการตรวจสอบ
จะมีประสิทธิภาพดีและง่ายกว่าเยอะเลย ...!! หลังจากมั่วอยู่นาน


ตัวอย่าง  โจทย์คือต้องการเช็ค Z X C กดสามปุ่มนี้เรียงกัน โดยที่ลำดับมีความสำคัญ
ถ้าทำตรงนี้ได้ ก้อจะปล่อยอะโบ้เข็ดได้นะส่วนเรื่อง Regular Expression ค่อยไปมั่วกันอีกที

จากรูปด้านบนเป็น A B C ก้อขอให้เปลี่ยนเป็น Z X C แล้วกันนะ [เพราะปุ่มมันติดกันจะได้กดง่าย]

Regular Expression ขอ Z X C รูปด้านบนแปลงได้ดังนี้

Regex stringKenAction = new Regex("^Z*ZX*XC*C");

มั่งนะ 

  • ^ จุดเริ่มต้น
  • * แทนใดๆ
  • อักษรหนึ่งตัวแทน กูขออย่างน้อย 1 ตัว
 Queue<string> QueueJoy;

QueueJoy = new Queue<string>();


ต่อไปก้อสร้าง Queue เอาไว้เก็บ

if ((Key.IsKeyDown(Keys.Z))){

QueueJoy.Enqueue("Z");

}

Enqueue หรือ Push ค่าลงไป

if (stringKenAction.IsMatch(mergestring) == true)
                    {
                        // ปล่อยพลัง หรือ do something
                    }

ถ้า match ก้อทำไรตามใจ  ในกรณีนี้คือปล่อยพลังท่าไม้ตาย

เย้ๆ ได้แระ
ถ้าไงเดี๋ยวขอตัวไปลองปล่อยพลังก่อนนะค่ะ

จบแระค่ะ บายค่ะ เฮือก..!  งุงิ งุงิ

 

เอกสารอ้างอิง
Regular Expressions Usage in C#

Queue<T> Generic Class

(Regular Expression Syntax)


บริการห้องเช่า ห้องเช่า รายวัน ใกล้เซ็นทรัลลาดพร้าว พหลโยธิน 24
สนใจติดต่อ กดดูตัวอย่างห้องได้เลย

Comment



smilebig smileopen-mounthed smileconfused smilesad smileangry smiletonguequestionembarrassedsurprised smilewinkdouble winkcry

สงสัยอะเอาปุ่มเก็บใน queue ยังไง เก็บทุกครั้งที่กดเหรอ แบบนี้ก็เปลืองที่ (ถ้าเป็นแบบนี้ใช้ circular queue เก็บน่าจะประหยัดที่กว่า)

#1 By T!D on 2008-01-03 18:06

อ้อ อีกเรื่องครับ แล้วกดสองปุ่มพร้อมกัน ใน xna เช็กยังไงเหรอ

#2 By T!D on 2008-01-03 18:11

#1: เก็บยังไง : เก็บเป็น string ไปก้อได้งิ
เปลืองที่ : ไม่เปลืองหรอก แป๊ปเดียว ก้อลบแล้ว

#2: เช็คสองปุ่ม : ก้อ and เอานะ

ปล. 1.ใช้ circular ไม่รู้เหมือนกัน เพราะลองรับการทดแช่หรือเปล่า อีกอย่างใช้ไม่เป็นด้วย
2. ดูเพิ่มในนี้แล้วกานนะ

http://xnanoob.exteen.com/20080103/regular-expression

#3 By xnanoob on 2008-01-03 18:24

อ๋อ มันเป็นแบบนี้ นี่เองเหรอ ...

#4 By xna (58.8.116.221) on 2008-03-05 13:08