เรื่องสคริปท์ (ต่อ)

posted on 10 Aug 2005 18:31 by 9tawan  in Project
วันนี้ คะแนนวิชา Intro to Concurrency ออก เห็นแล้วตกใจ เฮ้ย เป็นไปได้ไง 49/50 เคยทำได้สูงสุดก็แค่ 18/20 (Intro Com Prog II) แต่ ดูไปดูมา อ้าวเฮ้ย เต็ม 90 ว่ะ (อ.เขียนของผมผิดคนเดียว) อะไรกัน เหอ ๆๆ

ตอนนั่งรถเมล์ก็นึกอะไรออกอย่าง ถ้าสามารถให้ตัว Script รันจากบรรทัดไหนก็ได้ (โดยการตัดสคริปท์ด้านบนออก) มันจะมีปัญหาแน่ ๆ สมมติว่า ...

if score<20 then
showScore()
#ทำอะไรสักอย่าง
run("win.scr")
else run("lose.scr")

แล้ว ถ้าผมรันจากบรรทัดที่ 2 ? จะเกิดอะไรขึ้นล่ะ else cause ที่ไม่ทราบที่มาก็จะสร้างปัญหาน่ะสิ (ก็ไม่รู้ว่ามาจาก else ไหนอ่ะ)

โจทย์ของผมก็คือ ต้องทำให้ตัวเกมมันสามารถเซฟจากจุดใดก็ได้ของเกม ตอนแรกคิดว่าจะแค่ข้ามบรรทัดด้านบนไปเฉย ๆ แต่ ดูจากข้างบนก็น่าจะรู้แล้วนะครับ ดังนั้นผมเลยต้องเปลี่ยนมาใช้วิธีทางโปรแกรมคือ ต้องทำตัวเก็บ State เก็บว่า ค่า state ต่าง ๆ ที่ผ่านมาในสคริปท์นั้น ๆ มีอะไรบ้าง อย่างเช่น

selectchoice = showSelectChoice()
if selectvalue == 0 then
stateA+=10
showText("ชั้นเกลียดคุณ");
selectchoice = showSelectChoice()
else
statusB += 20
showText("อย่ามาให้ชั้นเห็นหน้าอีก")
selectchoice = showSelectChoice()
if selectchoice == 0 then
#ทำอะไรก็ว่าไป

จะสังเกตได้ว่า ทางแยกส่วนใหญ่ของตัวเกมมาจากตัว user แทบทั้งนั้น ดังนั้นก็แค่เก็บว่าทำอะไรไว้บ้างลงไปใน linklist หรือใน stack เสร็จแล้วก็พอเซฟก็ให้เก็บค่าที่ทำไว้ จากนั้น พอถึงเวลาก็รันสคริปท์เพียงแต่ว่าจะไม่ถาม user รอบสองแต่ว่าจะใช้ค่าที่เก็บไว้แทน (เริ่มเป็นเรื่องใหญ่แล้วไง) คือ ตรงนี้ก็ไม่ต้องแสดงให้คนเล่นเห็น (อาจจะขึ้น Now Loading บังหน้าไปก็ได้ 555)

จริง ๆ มันยังมีปัญหาเกี่ยวกับพวกค่าตัวแปรที่ไม่ได้มาจาก widget (เพราะว่าค่าจาก widget สามารถใช้วิธีซิกแซกเอาค่าพวกนี้ออกมาได้ แต่จากตัวแประที่มาจากตัวสคริปท์เองจะลำบากกว่า) คิดว่าต้องออกแบบเรื่องการจัดการ state หรือพวกตัวแปรต่าง ๆ ให้ดีมาก ๆ ถึงจะเวิร์ค

อีกระบบที่ง่ายกว่า คือ บังคับให้ว่าเวลาเซฟให้เก็บแค่ค่าตัวแปรระบบบางตัว กับแค่ว่ารันสคริปท์อะไรอยู่ พอโหลดขึ้นมาก็รันสคริปท์ใหม่ตั้งแต่ต้น แต่จะขาดความคล่องตัวตรงนี้ไปเท่านั้นเอง (แต่ของมันง่ายกว่าเยอะ) สรุปว่าเอาไงดีน้า ~

มีความเห็นไงก็โพสต์ ๆ ได้เน้่อ

:D

edit @ 2005/08/11 23:34:59

Comment



smilebig smileopen-mounthed smileconfused smilesad smileangry smiletonguequestionembarrassedsurprised smilewinkdouble winkcry

Tweet

คิดว่าถ้าเราแปลงภาษาให้ jump ข้ามประโยคไปเมื่อเจอ else ล่ะ(ปกติเวลาทำงานในบล็อกหลัง if เสร็จก็มักจะเจอคำสั่ง jump แบบ unconditional อยู่แล้ว)

#1 By T!D on 2005-08-10 20:55

ถ้าเราสร้าง script เอง เราก็เขียนให้ข้าม else ไปอ่ะ เพราะไง ๆ บรรทัดที่ 2 มันก็อยู่ในเงื่อนไข if ที่เป็นจริงอยู่แล้ว แต่ถ้าใช้ script ของคนอื่นก็ตามเขาอ่ะมั๊งนะ

ผมคิดว่า save จากจุดไหนก็ได้ ไง ๆ ก็รอให้หมด 1 รอบเกมก่อนดีกว่าถึงจะค่อย save น่ะฮะ
(ผมก็กะจะทำแบบ save จุดไหนก็ได้เหมือนกัน -_-)

#2 By โหมด on 2005-08-10 22:30