 |
บุคคลทั่วไป: 2
ไม่มีสมาชิกขณะนี้
สมาชิกทั้งหมด: 43
ยังไม่ยืนยัน: 0
สมาชิกล่าสุด: anyka
|
 |
|
|
Renpy Programming คำสั่งเบื้องต้นในการเขียน ตอนที่ 7 (ตอนจบ) (operator (นิพจน์และเครื่องหมาย), if, while, animetion)
|
|
 |
กลับมาแล้วคร้าบ......เป็นไงกันมั่งครับ ช่วงนี้แสนสุขสบายเนื่องจากออกจากงานเก่ามารับงานนอกเองแล้ว ก็ถึงกระนั้นก็พยายามหางานใหม่อยู่เหมือนกันตอนนี้ เห็นว่าว่างๆอย่างงี้ก็เห่อะงานก็มีมาเรื่อยๆเหมือนกันแต่สบายใจกว่ามากเลยเพราะมีอิสระกว่างานบริษัทตั้งเยอะ เสียอย่างเดียวสวัสดิการไม่มีนี่แหล่ะยังไงก็ต้องหางานใหม่ให้ได้ ส่วนจะเป็นงานอะไรแบบไหนก็คงต้องมาดูกันอีกทีแล้วล่ะ เอาล่ะหลังจากบ่นเสร็จแล้วเรามาดูเกี่ยวกับเนื้อหาของบทนี้กันดีกว่า สำหรับส่วนนี้นั้นจะเป็นส่วนสุดท้ายของเรื่องคริปเบื้องต้นแล้วนะครับ ซึ่งเมื่อคุณอ่านมาจนเถึงจุดนี้แล้วก็หมายความว่าคุณสามารถที่จะสร้างเกมส์อย่างง่ายเล่นเองได้แล้วครับ (ซึ่งเนื้อหาหลังจากนี้ไปจะเป็นการประยุกต์ในระดับยากแล้วล่ะครับ ยากในระดับที่ผมเองยังงงๆเลยอ่ะ - -) เนื้อหาในบทนี้ก็ได้แก่
- operator (นิพจน์และเครื่องหมาย)
- if
- while
- animetion
operator (นิพจน์และเครื่องหมาย) อืม.....จริงๆแล้วผมต้องขึ้นหัวข้อนี้ก่อนในบทแรกๆแลยล่ะแต่เนื่องจากว่าลืมอ่ะนะ ช่างเห่อะเรามาดูกันเลยครับว่าเนื้อหาในหัวข้อนี้มันเป็นยังไง operator นั้นพูดตรงๆก็คือเครื่อหมายน่ะแหล่ะครับไม่ว่าจะเป็นบวกลบคูณหาร แต่จะมีบางตัวที่จะมีลักษณะการใช้งานแตกต่างออกไปจากปกติหน่อยเท่านั้นเองครับ โดยเครื่องหมายต่างๆกมีดังนี้ครับ
() --------> วงเล็บ
+ --------> บวก
- --------> ลบ
* --------> คูณ
/ --------> หาร
** --------> ยกกำลัง
= --------> เท่ากับ(ใช้ในการกำหนดค่า)
% --------> MOD เป็นการหารแต่จะเอาเศษไม่เอาคำตอบ
+= , -= , = , /= --------> เป็นการ +,-,*, / โดยกระทำการจากค่าเดิมที่มีอยู่แล้วกับค่าใหม่ เช่น $ B =2 , $ C = 3
$ B += C --------> $ B จะมีค่าเท่ากับ 5 พูดง่ายๆก็คือคำสั่งนี้เป็นรูปย่อของ $ B = B + C ก็ว่าได้ครับ
or --------> เป็นนิพจน์ที่ใช้ในประโยคเงื่อนไขครับ จะให้ค่าเป็น true เมื่อมีค่าใดค่าหนึ่งเป็น true
and --------> เป็นนิพจน์ที่ใช้ในประโยคเงื่อนไขครับ จะให้ค่าเป็น true เมื่อมีทุกค่าเป็น true
== --------> เท่ากับ(ใช้ในการเปรียบเทียบค่า) เป็นนิพจน์ที่ใช้ในประโยคเงื่อนไขครับ
<> --------> ไม่เท่ากับ(ใช้ในการเปรียบเทียบค่า) เป็นนิพจน์ที่ใช้ในประโยคเงื่อนไขครับ
< , > , <= , >= --------> น้อยกว่า , มากกว่า , น้อยกว่าเท่ากับ , มากกว่าเท่ากับตามลำดับ เป็นนิพจน์ที่ใช้ในประโยคเงื่อนไขครับ
สำหรับการเรียงลำดับการทำงานของเครื่องหมายนั้นเราสามารถเรียงลำดับได้ดังนี้
() ----> ** ----> * ----> / ----> + ----> - ----> = ----> += ----> *= ----> /= ----> -= ----> %=
หมายเหตุ ให้แน่ใจควรใช้วงเล็บดีกว่าจะได้ไม่มั่ว
if คำสั่ง if เป็นคำสั่งทางทางเลือกครับ การทำงานเหมือนกับคำสั่ง menu เลยล่ะเพียงแต่คำสั่งmenuจะมีทางเลือกให้เราเลือก แต่คำสั่งifนี้มันจะกระทำเองโดยอัตโนมัติครับ มีหลักการใช้งานดังนี้
"if" python_expression":"
Codeบรรทัดที่xxx.......
..................................
["elif" python_expression":"
Codeบรรทัดที่xxx.......
..................................]
["else"":"
Codeบรรทัดที่xxx.......
..................................]
หมายเหตุ
-โดยที่ python_expression นั้นหมายถึงประโยคเงื่อนไขครับ
-หากเราต้องการจะเปรียบเทียบว่ามีค่าเท่ากันหรือไม่ใน python_expression เช่น
if points = 10: <--------- error แน่ๆครับไม่สามารถเขียนในรูปแบบนี้ได้
if points == 10: <--------- เราจำเป็นที่จะต้องเขียนในรูปแบบนี้ครับถึงจะรันผ่าน
-คำสั่ง elif ย่อมาจากคำว่า else if นะคร้าบบบบบบ
-"elif" python_expression":"นั้นเราสามารถที่จะเรียกขึ้นมากี่ครั้งก็ได้
-"elif" python_expression":" และ "else"":" จะมีหรือไม่ก็ได้
-เครื่องหมาย : ต้องอยู่ชิดติดกับ python_expressionหรือ else ด้วยครับไม่งั้น error ลูกเดียว
ตัวอย่างการใช้งาน
if points >= 10:
e "ถ้าค่า points มีค่ามากกว่าหรือเท่ากับ 10 จะแสดงข้อความนี้"
elif points >= 5:
e "ถ้าค่า points มีค่ามากกว่าหรือเท่ากับ 5จะแสดงข้อความนี้"
else:
e "ถ้าค่า points มีค่าไม่ครงกับเงื่อนไขใดเลยจะแสดงข้อความนี้"
while อีกหนึ่งคำสั่งพื้นฐานที่จำเป็นอีกคำสั่งหนึ่งครับโดยจะทำการตรวจสอบเงื่อนไขครับ ถ้ายังอยู่ในเงื่อนไขก็จะทำการวนทำในคำสั่งนั้นต่อไปเรื่อยๆจนกว่าจะออกนอกเงื่อนไขครับ มีหลักการใช้งานดังนี้
"while" python_expression ":"
Codeบรรทัดที่xxx.......
..................................]
หมายเหตุ
- python_expression นั้นหมายถึงประโยคเงื่อนไขครับ
- เครื่องหมาย : ต้องอยู่ชิดติดกับ python_expression ด้วยครับไม่งั้น error ลูกเดียว
- Code คำสั่งที่อยู่ภายใน while นั้นเราจำเป็นที่จะต้องล่นรรทัดเข้ามาอีก 3 วรรคเพื่อบ่งบอกให้โปรแกรมรู้ว่าเป็นส่วนที่ต้องกระทำในคำสั่ง while
ตัวอย่างการใช้งาน
while (B < 3):
"ค่าของBมีค่าเท่ากับ %(B)d ซึ่งยังน้อยกว่า 3 อยู่"
$ B+=1
"ค่าของBมีค่าเท่ากับ %(B)d ซึ่งบรรทัดนี้จะแสดงขึ้นมาค่า B มีค่ามากกว่า 3 ซึ่งก็คือออกจากลูปแล้ว"
animetion ต่อมาก็จะเป็นฟังก์ชั่นเกี่ยวกับอนิเมชั่นครับจริงๆแล้วมีมากมายหลายตัวเลยล่ะครับเพียงแต่ว่าผมจะยกมาแค่ที่ใช้บ่อยๆเท่านั้นนะครับ โดยที่มีหลักการเรียกใช้งานพื้นๆดังนี้ครับ
image ชื่อตัวแปร = ฟังก์ชั่น animation
โดยมีฟังก์ชั่นต่างๆดังนี้
Animation เริ่มต้นด้วยฟังก์ชั่นที่เข้าใจง่ายๆก่อนล่ะครับ ฟังก์ชั่นนี้เป็นฟังก์ชั่นที่ใช้สร้างอนิเมชั่นแบง่ายๆเหมือนกับการสร้างรูปภาพ . gifน่ะแหล่ะครับซึ่งจะวนกลับไปที่รูปแรกใหม่เมื่อแสดงหมดทุกรูปแล้ว โดยที่เรานำรูปมาเรียงต่อกันจากนั้นก็กำหนดระยะเวลาในการแสดงผลของภาพในแต่ละเพรมลงไปก็สามารถใช้งานได้แล้วครับ มีหลักการใช้งานดังนี้
Animation (image1, time1 , image2, time2, image...,time.....)
โดยพารามิตอร์แต่ละตัวมีหน้าที่ดังนี้
image ------> รูปภาพที่เราต้องการ รูปภาพต้องอยู่ภายใน นะครับ
time ------> เวลาที่ต้องการให้รูปนั้นแสดงอยู่ มีหน่วยเป็นวินาที
ตัวอย่างการใช้งาน
image animation = Animation ("frame_1.png", 0.25,"frame_2.png", 0.25,"frame_3.png", 0.25)
anim.TransitionAnimation ฟังก์ชั่นนี้เหมือนกับฟังก์ชั่น Animation ทุกประการเพียงแต่ว่าจะมีเรื่องของTransition เข้ามาด้วยครับ (ผมคงจะไม่ขออธิบายเรื่อง Transition อีกรอบนะครับหากอยากรู้เรื่องนี้เพิ่มเติมกรุณาหาอ่านเพิ่มเติมได้ ที่นี่ ครับ) มีหลักการใช้งานดังนี้
anim.TransitionAnimation (image1, time1, Transition1,........... )
โดยพารามิตอร์แต่ละตัวมีหน้าที่ดังนี้
image ------> รูปภาพที่เราต้องการ รูปภาพต้องอยู่ภายใน นะครับ
time ------> เวลาที่ต้องการให้รูปนั้นแสดงอยู่ มีหน่วยเป็นวินาที
Transition ------> รูปแบบในการตัดฉากหรือขึ้นฉากใหม่
ตัวอย่างการใช้งาน
image my_animation = anim.TransitionAnimation("frame1.png", 2.0, dissolve,"frame2.png", 2.0, dissolve)
anim.Blink ฟังก์ชั่นนี้จะเป็นการบังคับให้รูปกระพริบครับ โดยที่เราสามารถกำหนดลักษณะการกระพริบได้ มีหลักการใช้งานดังนี้
anim.Blink (image, on, off, rise, set, high, low, offset, anim_timebase)
โดยพารามิตอร์แต่ละตัวมีหน้าที่ดังนี้
image ------> รูปภาพที่เราต้องการ รูปภาพต้องอยู่ภายใน นะครับ
on ------> ระยะเวลาที่ต้องการให้รูปแสดงอยู่ ถ้าไม่กำหนดค่าดีฟอลจะเป็น 0.5 วินาที
off ------> ระยะเวลาที่ต้องการให้รูปหายไป ถ้าไม่กำหนดค่าดีฟอลจะเป็น 0.5 วินาที
rise ------> ระยะเวลาที่ต้องการให้รูปเด่นชัดขึ้นมา ถ้าไม่กำหนดค่าดีฟอลจะเป็น 0.5 วินาที
set ------> ระยะเวลาที่ต้องการให้รูปจางหายไป ถ้าไม่กำหนดค่าดีฟอลจะเป็น 0.5 วินาที
high ------> ความเข้มสูงสุด ถ้าไม่กำหนดค่าดีฟอลจะเป็น 1.0
low ------> ความเข้มต่ำสุด ถ้าไม่กำหนดค่าดีฟอลจะเป็น 1.0
offset ------> กำหนดการกระพริบในตอนเริ่มต้นว่าจะเข้มสุดหรือไม่เข้มหรือเข้มกลางๆโดยเราจะกำหนดเป็นระยะเวลา
anim_timebase= true/false ------> เป็น true เมื่อต้องการใช้ค่าเวลาดีฟอล(โดยปกติค่านี้เป็น true อยู่แล้ว) เป็น false เมื่อเราต้องการกำหนดค่าเอง
ตัวอย่างการใช้งาน
image ctc = anim.Blink("arrow.png"))
นอกจากนี้เรายังสามารถใช้ร่วมกันกับฟังก์ชั่น Text เพื่อแสดงผลเป็นตัวอักษรกระพริบได้อีกด้วย
image blinking text = anim.Blink(Text("Blink", color="#ff0", size=72))
anim.SMAnimation เป็นคำสั่งที่ไว้สำหรับสร้างชุดของ animetion ขึ้นมา เช่น การกระพริบตาของตัวละคร , การขยับปากของตัวละคร รวมไปถึงการขยับของ background เป็นต้น โดยปกติจำเป็นที่จะต้องใช้ร่วมกับฟังก์ชั่น anim.State , anim.Edge ด้วย มีหลักการใช้งานดังนี้
anim.SMAnimation (initial, *args)
โดยพารามิตอร์แต่ละตัวมีหน้าที่ดังนี้
initial ------> ชื่อของเฟรมที่เราต้องการจะเริ่มต้น ต้องอยู่ใน
*args ------> ชุดของ animetion ซึ่งต้องประกอบด้วยฟังก์ชั่น anim.State และ anim.Edge ครับ โดยที่ฟังก์ชั่นแต่ละตัวมีหลักการทำงานดังนี้
anim.State ------> เป็นฟังก์ชั่นที่ใช้กำหนดชื่อเฟรมของรูปภาพที่กำหนดในเฟรมนั้นๆ มีหลักการใช้งานเบื้องต้นดังนี้
anim.State (name, image)
โดยพารามิตอร์แต่ละตัวมีหน้าที่ดังนี้
name ------> ชื่อของเฟรม ต้องอยู่ใน
image ------> ภาพที่ต้องการให้โหลดเข้ามา
anim.Edge ------> เป็นฟังก์ชั่นที่คอยจัดการเกี่ยวกับเฟรมของ animetion ครับ เช่น การเปลี่ยนเฟรมเป็นต้น มีหลักการใช้งานดังนี้
anim.Edge (old, delay, new, trans)
โดยพารามิตอร์แต่ละตัวมีหน้าที่ดังนี้
old ------> ชื่อของเฟรม(จุดของเฟรม)ที่ต้องการย้ายไป
delay ------> เวลาที่ใช้ในการเปลี่ยนเฟรม
new ------> ชื่อของเฟรม(จุดของเฟรม)ที่เป็นจุดหมายของการย้าย
trans ------> กำหนดคำสั่ง transition เพื่อใช้ในการแสดงของรูปภาพ จะกำหนดหรือไม่ก็ได้
ตัวอย่างการใช้งาน
image blinking = anim.SMAnimation("a",
anim.State("a", "eileen_happy.png"),
anim.Edge("a", 1.0, "b", dissolve),
anim.State("b", "eileen_vhappy.png"),
anim.Edge("b", 1.0, "a",dissolve)
)
หมายเหตุ ข้อแตกต่างระหว่างฟังก์ชั่น anim.SMAnimation และฟังก์ชั่น Animation แม้จะให้ผลออกมาเหมือนกันก็ตาม นั้นก็คือ ฟังก์ชั่น Animation เหมาะแก่การสร้างอนิเมชั่นแบบง่ายๆเพียงรูปไม่กี่เฟรมเท่านั้นเนื่องจากรูปแบบการเรียกใช้งานนั้นค่อนข้างกินทรัพยากร ต่างจากฟังก์ชั่น anim.SMAnimation ซึ่งถึงจะมีการเรียกใช้งานที่ซับซ้อนกว่าแต่ก็กินทรับยากรน้อยกว่าและยังสามารถที่จะกำหนดเวลาในการเปลี่ยนเฟรมได้อีกด้วย เช่น ภาพการกระพริบตาในฟังก์ชั่น Animation เราอาจจะต้องโหลดรูปเดียวกันซ้ำๆกันลงมาใส่ลงในฟังก์ชั่นนี้เพื่อให้ได้อนิเมชั่นที่สมบูรณ์แต่หากเราใช้งานฟังก์ชั่น anim.SMAnimation เราอาจจะโหลดรูปภาพเพียงไม่กี่ภาพลงมาในฟังก์ชั่นนี้ก็ได้เนื่องจากลดการซ้ำซ้อนของรูปที่เราจะโหลด ซึ่งจะทำให้ลดการกินทรัพยากรของเคริ่องไปอีกทางนึงด้วยครับ
anim.Filmstrip อีกหนึ่งฟังกชั่นที่ส่งเสริมความมักง่าย (5555) จะกล่าวอย่างง่ายๆเลยนะครับ โดยปกติการสร้างภาพอนิเมชั่นนั้นจะต้องทำการเรียงรูปภาพหลายภาพมาต่อกันเป็นเฟรมๆตามระยะเวลาที่เรากำหนดแต่คำสั่งนี้จะเป็นการใช้รูปภาพเพียงรูปภาพเดียวจากนั้นก็จะทำการแบ่งพื้นที่ในการแสดงภาพออกมาเป็นภาพเล็กๆหลายๆภาพแล้วนำไปประกอบกันเป็นอนิชั่นขึ้นมาครับ(ก็เหมือนกับภาพคาแรคเตอร์ใน RO นั่นแหล่ะ)
anim.Filmstrip (image, framesize, gridsize, delay, frames=None, loop=True)
โดยพารามิตอร์แต่ละตัวมีหน้าที่ดังนี้
image ------> รูปภาพที่ต้องการสร้าง
framesize ------> ขนาดของรูปที่เราจะตัดออกมาแสดง (กว้าง,สูง)
gridsize ------> กำหนดตารางที่จะซอยรูปใหญ่ออกเป็นรูปเล็กๆ เช่น ถ้าต้องการแบ่งภาพเล็กๆ 2 ภาพ ก็จะต้องสร้างตารางแบบ 2คอลัม1 แถว (colums, rows )
หมายเหตุ การกำหนดgridsize ต้อง ให้สัมพันธ์กับ framesize ด้วยนะครับ ถ้าหากคำนวณแล้วพื้นที่มันเกินไปจากพื้นที่ที่เรามีไม่ว่ากว้างกว่าหรือยาวกว่าเนี่ยะ error ลูกเดียวเลยนะครับ
delay ------> ระยะเวลาของเฟรมต่อ 1 เฟรม มีหน่วยเป็นวินาที
frames=None ------> จำนวนเฟรมทั้งหมดในอนิเมชั่นนั้น ถ้าเป็น None ค่าดีฟอลจะเป็น colums คูณ rows เฟรม
loop=True/false ------> กำหนดการวนลูป
ตัวอย่างการใช้งาน
image ctc = anim.Filmstrip("sakura.png", (20, 20), (2, 1), .30, xpos=760, ypos=560, xanchor=0, yanchor=0)
SnowBlossom ต่อมาก็จะขอกล่าวถึงในฟังก์ชั่นสุดท้ายครับ ซึ่งฟังก์ชั่นนี้จะเป็นฟังก์ชั่นที่จะสร้าง animetion ในลักษณะที่เป็นเหมือนหิมะหรือกลีบดอกไม้โปรยลงมาครับ มีหลักการใช้งานดังนี้
SnowBlossom (image, count=10, border=50, xspeed=(20, 50), yspeed=(100, 200), start=0, fast=true/false , horizontal=true/alse)
โดยพารามิตอร์แต่ละตัวมีหน้าที่ดังนี้
image ------> รูปที่ต้องการโปรยลมา
count=10 ------> จำนวนรูปที่จะโปรยลงมาต่อหนึ่งเฟส(หนึ่งชุดการโปรย)โดยประมาณ(อาจจะน้อยกว่ากำหนดเล็กน้อย)
border=50 ------> ระยะห่างของในแต่ชุดการโปรย เช่น border=50 หมายความว่า เมื่อโปรยไปแล้ว 1 ชุด(สัมพันธ์กับตัวแปรcount ) จะทิ้งช่วงไปอีก 50 พิกเซล ถึงจะโปรยชุดต่อไปใหม่ เป็นต้น
xspeed=(20, 50) / 20 ------> ความเร็วในแนวแกน X มีหน่วยเป็นพิกเซลต่อวินาที สามารถกำหนดได้ 2 ลักษณะคื่อเป็นแบบตัวแปรเดียวและ 2 ตัวแปร แบบตัวแปรเดียวก็กำหนดเป็นแค่ความเร็วธรรมดา ส่วนแบบ 2 ตัวแปร จะเป็นการจัดสรรค์วิถีของความเร็วในแนวแกน X พูดง่ายๆก็คือวิถีการวิ่งจะถูกแบ่งออกเป็น 2 แนวเช่น (20, 50) วิถีนึงจะวิ่งด้วยความเร็ว 20 และอีกวิถีนึงจะวิ่งด้วยความเร็ว 50 เป็นต้น จะมีค่าเป็นบวกหรือลบก็ได้แต่ถ้ามีค่าเป็นลบวิถีจะวิ่งกลับข้างกันนะครับ
yspeed=(100, 200) / 20 ------> ความเร็วในแนวแกน Y มีหน่วยเป็นพิกเซลต่อวินาที สามารถกำหนดได้ 2 ลักษณะคื่อเป็นแบบตัวแปรเดียวและ 2 ตัวแปร แบบตัวแปรเดียวก็กำหนดเป็นแค่ความเร็วธรรมดา ส่วนแบบ 2 ตัวแปร จะเป็นการจัดสรรค์วิถีของความเร็วในแนวแกน Y พูดง่ายๆก็คือวิถีการวิ่งจะถูกแบ่งออกเป็น 2 แนวเช่น (20, 50) วิถีนึงจะวิ่งด้วยความเร็ว 20 และอีกวิถีนึงจะวิ่งด้วยความเร็ว 50 เป็นต้น จะมีค่าเป็นบวกหรือลบก็ได้แต่ถ้ามีค่าเป็นลบวิถีจะวิ่งกลับข้างกันนะครับ
start=0 ------> จำนวนเวลาที่จะเริ่มโปรยภาพมีหน่วยเป็นวินาที(เวอร์ชั่นเก่าๆไม่มีตัวนี้นะไปลองในเวอร์ชั่นใหม่สุดจะดีกว่า)
fast = True /False ------> เป็นการกำหนดจุดเกิดของรูป เป็น True จะเกิดแบบ random ณ จุดใดก็ได้ที่ส่วนบนสุดหรือล่างสุดของจอภาพ เป็น False จุดเกิดจตายตัว
horizontal= True/False ------> เป็น True จะเป็นการกำหนดให้จุดเกิดจะอยู่ที่ซ้ายสุดหรือขวาสุดของจอ เป็น false จะเกิดที่บนสุดหรือล่างสุดของจอ
ตัวอย่างการใช้งาน
image snowblossom = SnowBlossom(anim.Filmstrip("sakura.png", (20, 20), (2, 1), .15), fast=True)
จะเห็นว่าเราสามารถประยุกต์ใช้ฟังก์ชั่นที่เกี่ยวกับอนิเมชั่น (ตามที่ขีดเส้นใต้) ร่วมกับฟังก์ชั่น SnowBlossom ได้อีกด้วย
หลังจากที่นั่งแปลและทดลองมานานแสนนานในที่สุดก็อธิบายจนหมดสักที หวังว่าจากบทความที่ผมเขียนขึ้นมาจะมีประโยชน์สำหรับบางท่านไม่มากก็น้อยนะครับ สำหรับเรื่องข้อสงสัยต่างๆในบทความที่ผมสอนไปแล้วก็สามารถตั้กระทู้ถามได้นะครับ(สมัครก่อนนะเฟ้ย...) ส่วนเนื้อหาในบทต่อไปนั้นก็จะเป็นในระดับที่ประยุกต์มากขึ้นไปมากกว่านี้ครับซึ่งก็ค่อนข้างยากที่เดียวเลยครับ เอาเป็นว่าหลังจากนี้ไปแล้วเนื้อหาอาจจะต้องรอนานหน่อยนะครับถึงจะออกมาสักที
|
 |
 |
โดย vashiya
เมื่อ February 16 2008 16:30:05
(754) อ่าน พิมพ์
|
 |
|
 |
© 2007 - 2010 thaiaat.com
|
 |
 |
|
Powered by v6.00.109 ฉ 2003-2005
Theme Elephant v1.00
|
|
 |