Project

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

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
ก็ คับ หลังสอบเสร็จผมก็เริ่มหาข้อมูลต่ออีกครั้ง ตอนนี้กำลังหาอยู่สองอย่างก็คือ เรื่อง Scripting Language ที่จะเอาไป Embeded ลงไปในตัวเกม กับ เรื่องของ GUI Widget น่ะครับ คงต้องทำเองแหง ๆ

ระบบ Script ที่อยากได้ อย่างน้อย ต้องมีฟีเจอร์ประมาณ
  1. ซัพพอร์ต Procedural หรือ/และ Object Oriented เพื่อความสะดวกในการ Reuse
  2. โค๊ดสามารถทำงานได้ ถึงแม้ว่าจะไม่ได้อยู่ใน Function/Method (เข้าใจมั้ยครับเี่นี่ย) คือตรงส่วนนี้ผมจะใช้ทำตัว Gameplay Script น่ะครับ แบบว่า ให้มันอ่านไฟล์สักไฟล์นึง แล้วให้ไปเรียก Function/Class/Method หรืออะไรก็ว่าไปจากไฟล์อื่น โดยว่าตัว VM จะรันเจ้าไฟล์นี้ตั้งแต่ต้นยันจบไฟล์ (หรือ จนกว่าจะสั่งให้ไปอ่านไฟล์อื่น)
  3. สามารถสั่งให้เริ่มทำงานจากบรรทัดไหนก็ได้ ไม่จำเป็นว่าต้องเป็นบรรทัดแรก เพื่อการ Save/Load เกมน่ะครับ
  4. ใช้ภาษาไทย/Unicode ได้
  5. ... ตรงนี้เพิ่มอะไรอีกดี
โดยส่วนตัว ตอนนี้ ยังไม่ได้เลือกภาษาอะไรเลย เพราะว่ายังไม่ค่อยมีประสพการณ์กับมันมากเท่าไหร่น่ะครับ คิดว่าจะลองดู ๆ ไปอีกสักหน่อยนึง แต่ตอนนี้ผมสนใจ Ruby กับ Python อยู่เป็นพิเศษน่ะคับ (เป็นพวกบ้าOO น่ะ) แต่ Lua ก็น่าสนเหมือนกันนะ

ทานใดอ่านแล้วมีความเห็นอะไรลองโพสต์เข้ามาแล้วกันเน้อ

:D

edit @ 2005/08/11 23:49:48

Arch ของเกมจีบหญิง

posted on 15 Jul 2005 00:02 by 9tawan  in Project
เฮ้อ ช่วงนี้ คิด ๆ ไปผมไม่อยากทำ Multi-Thread เลยน้า ~~~ คือ แบบว่าไม่ชำนาญน่ะครับ ก็เลยกะว่าคงไปใช้ Single Thread แบบเดิมที่ถนัดมากกว่าดีกว่า คือ ไอเดียเป็นประมาณนี้ครับ

ถ้าเป็น Multi-Thread เนี่ย ผมก็ต้องเขียนเป็น ประมาณว่า

ใน Drawing Thread นาคับ

while(true){
//Draw Whole Thing
//Recieve Input from user
}

แล้ว เราก็จะต้องมี Running Thread สำหรับเปลี่ยนภาพ ประมวลผล อะไรต่าง ๆ นา บลา ๆๆๆ กันไป แต่ ว่า ถ้าหากว่า Thread เดียว ก็จะกลายเป็นว่า
...
DrawString("xxxxx");
ChangeChara(someone);
//Do Some Logic operation
...
อะไรก็ว่ากันไป โดยที่ในคำสั่ง DrawString("xxx") เนี่ย จะ Quit ตามเงื่อนไข (อาจจะเป็นเมื่อวาดจนจบประโยค หรือ เมื่อคนเล่นคลิกเมาส์) เราก็จะเขียนประมาณเนี้ย

void DrawString(string input)
{
while(//some condition)
{
//draw everything here
//recieve input
}
}
แล้ว อะไรก็ว่ากันไป ~~~ มันก็มีข้อดีข้อเสียต่างกันอยู่เหมือนกันแฮะ อืม ๆๆ เอาแบบไหนดีนะ ?

(ปล. ใครจะรู้ว่า เกมแบบนี้เนี่ยง่ายที่สุดแล้วนะนี่)
:D


edit @ 2005/08/11 23:50:21