Thaigraph

 

   

ค้นหา
Thaigraph หน้าฟอรั่ม Ren'Py [renpy] วิธีทำตัวเลือกคำถามแบบ ...
ดู: 3532|ตอบ: 17
go

[renpy] วิธีทำตัวเลือกคำถามแบบกำหนดระยะเวลา (Timed choice)

Rank: 7Rank: 7Rank: 7

โพสต์เมื่อ 5-5-2013 13:38 |แสดงโพสต์ทั้งหมด
[renpy] วิธีทำตัวเลือกคำถามแบบกำหนดระยะเวลา (Timed choice)
เพื่อให้เกมส์มีอรรถรสมากยิ่งขึ้น สำหรับเกมส์แนวเนื้อเรื่อง บางสถานะการณ์ก็มีความจำเป็นที่จะต้องให้ผู้เล่นมีความรู้สึกกดดัน เมื่อถูกตัวละคร ตัวใดตัวหนึ่งตั้งคำถาม ซึ่งถ้าหากผู้เล่นตอบช้า หรืออาจจะไม่คลิกตอบเลย ก็จะเป็นการกำหนดให้ตัวละครในเกมส์มีปฏิสัมพันธ์ต่อผู้เล่นแตกต่างกันออกไป


เราจะแบ่งรูปแบบการกำหนดระยะเวลาได้ออกเป็น 2 กรณีเช่น
1. แบบไม่บอกให้ผู้เล่นรู้ตัว
  1. init:

  2.     $ e = Character('NOOKFUFU2', color="#c8ffc8")

  3. label start:
  4.     $ ui.timer(5.0, ui.jumps("menu1_slow")) #<-- 5.0 หมายถึงให้เวลาคิด 5 วินาที
  5.     menu:
  6.         "Choice 1":
  7.             hide countdown
  8.             e "เลือก 'Choice 1'"
  9.             jump menu1_end
  10.         "Choice 2":
  11.             hide countdown
  12.             e "เลือก 'Choice 2'"
  13.             jump menu1_end
  14.    
  15. label menu1_slow:
  16.     hide countdown
  17.     e "ทำไมถึงไม่ตอบ?"
  18.    
  19. label menu1_end:
  20.     e "อย่างน้อยคุณก็เลือกที่จะตอบ"

  21. return
คัดลอกไปที่คลิปบอร์ด
ผลลัพธ์ที่ได้.....


ถ้าผู้เล่นไม่คลิกเลือกคำตอบ ภายในเวลาที่กำหนด โปรแกรมก็จะวิ่งมาที่ label menu1_slow ตามที่เราตั้งไว้




2. แบบแสดงตัวเลขเพื่อให้ผู้เล่นรู้ และรีบเลือกคำตอบ
  1. init:
  2.   
  3.     # สร้างตัวแประของตัวละคร
  4.     $ e = Character('NOOKFUFU2', color="#c8ffc8")
  5.    
  6. init:
  7.     python:

  8.         def countdown(st, at, length=0.0):

  9.             remaining = length - st

  10.             if remaining > 2.0:
  11.                 return Text("%.1f" % remaining, color="#ffffff", size=72 , bold = True ), .1 #<----ถ้าตัวเลขมากว่า 2.0 ให้แสดงสี text เป็น "สีขาว"
  12.             elif remaining > 0.0:
  13.                 return Text("%.1f" % remaining, color="#ff0000", size=72, bold = True), .1#<----ถ้าตัวเลขต่ำกว่า 2.0 และไม่เท่ากับ 0.0 ให้แสดงสี text เป็น "สีแดง"
  14.             else:
  15.                 return anim.Blink(Text("0.0", color="#ff0000", size=72, bold = True)), None #<--- ถ้าตัวเลขเท่ากับ 0.0 ให้แสดงสี Text เป็น "สีแดง" และแสดงเป็นตัวแบบกระพริบ

  16.     # แสดงตัวเลข เริ่มนับถอยหลังที่ 10 วินาที.
  17.     image countdown = DynamicDisplayable(countdown, length=10.0)  #<---ตัวเลขเริ่มต้นจาก 10.0 วินาที และนับถอยหลังลงมาเรื่อยๆ
  18.    
  19. label start:
  20.     $ ui.timer(10.0, ui.jumps("not_choice")) #<---ให้เวลา 10.0 วินาที
  21.     show countdown at Position (xalign = 0.3, yalign = 0.1)
  22.     menu:
  23.         "เลือกคำตอบข้อ 1  ทันที":
  24.             hide countdown
  25.             e "You chose 'Choice 1' fast"
  26.             jump menu1_end
  27.         "เลือกคำตอบข้อ 2 ทันที":
  28.             hide countdown
  29.             e "You chose 'Choice 2' fast"
  30.             jump menu1_end
  31. return

  32. label not_choice:
  33.     hide countdown
  34.     e "ทำไมนายถึงไม่ยอมตอบคำถามฉัน?"
  35.     e "ฉันจะให้โอกาสนายตอบคำถามฉันอีกครั้ง"

  36.     $ ui.timer(10.0, ui.jumps("not_choice_slow")) #<---ให้เวลา 10.0 วินาที
  37.     show countdown at Position (xalign = 0.3, yalign = 0.1)
  38.     menu:

  39.         "เลือกคำตอบข้อ 1  ":
  40.             hide countdown
  41.             e "คุณเลือกข้อ 1 แบบลังเล"
  42.             jump menu2_end
  43.         "เลือกคำตอบข้อ 2  ":
  44.             hide countdown
  45.             e "คุณเลือกข้อ 2 แบบลังเล"
  46.             jump menu2_end

  47. label not_choice_slow:
  48.     hide countdown
  49.     e "ฉันไม่เคยเจอใครที่เฉื่อยชาเท่าคุณอีกแล้ว"
  50.     return
  51. label menu1_end:
  52.     e "อย่างน้อยนายก็ยอมตอบคำถามฉัน"
  53.     return
  54. label menu2_end:
  55.     e "อย่างน้อยนายก็ยอมตอบคำถามฉัน"
  56.     return
คัดลอกไปที่คลิปบอร์ด
ผลลัพธ์ที่ได้.....


ส่วนแบบอื่นก็แล้วแต่จะไปประยุกต์เอาเองนะค่ะ ^^"


[hide][/hide] โหลดไฟล์ตัวอย่างได้ที่นี่ค่ะ


ขอให้สนุกกับการสร้างเกมส์นะค่ะ
บทความโดย NOOKFUFU2

(ขอสงวนสิทธิ์ให้เผยแพร่เฉพาะในเว็บไทยกราฟเท่านั้น!!!)



ไฟล์แนบ: คุณจำเป็นต้องเข้าสู่ระบบก่อนจึงจะสามารถดูและดาวน์โหลดไฟล์แนบได้ หากยังไม่มีแอคเคานต์หรือยังไม่ได้เป็นสมาชิก กรุณาสมัครสมาชิก
บางบทความคุณจำเป็นต้องสมัครสมาชิกแบบ VIP และ SUPERVIP ถึงจะเข้าอ่านบทความได้

Rank: 1

โพสต์เมื่อ 8-5-2013 13:58 |แสดงโพสต์ทั้งหมด
ระบบนี้เอามาพลิกแพลงได้หลายอย่างมากๆๆ ตั้งแต่ตอบคำถาม ยันระบบต่อสู้เลยครับ


ขอบคุณมากๆครับ

Rank: 1

โพสต์เมื่อ 18-5-2013 05:38 |แสดงโพสต์ทั้งหมด
ขอสอบถามเพิ่มเติมครับ
ถ้าอยากให้ในscript เรา มี การกำหนดเวลาแบบแสดงตัวเลขรูปแบบอื่นๆ เอาใว้ใช้ในเหตุการณ์ต่างกัน  คือ 10วิ  5วิ 3วิ สามารถทำได้มั้ยครับ?

ที่ผมรู้เบื้องต้นคือเราไปแก้ตรงscript

init:
    python:

        def countdown(st, at, length=0.0):

            remaining = length - st

            if remaining > 2.0:
                return Text("%.1f" % remaining, color="#ffffff", size=72 , bold = True ), .1 #<----ถ้าตัวเลขมากว่า 2.0 ให้แสดงสี text เป็น "สีขาว"
            elif remaining > 0.0:
                return Text("%.1f" % remaining, color="#ff0000", size=72, bold = True), .1#<----ถ้าตัวเลขต่ำกว่า 2.0 และไม่เท่ากับ 0.0 ให้แสดงสี text เป็น "สีแดง"
            else:
                return anim.Blink(Text("0.0", color="#ff0000", size=72, bold = True)), None #<--- ถ้าตัวเลขเท่ากับ 0.0 ให้แสดงสี Text เป็น "สีแดง" และแสดงเป็นตัวแบบกระพริบ

    # แสดงตัวเลข เริ่มนับถอยหลังที่ 10 วินาที.
    image countdown = DynamicDisplayable(countdown, length=10.0)  #<--- ข้อ A สคริปต์คำสั่งที่ทำให้เลขเริ่มต้นที่เลข 10 และcountdown ไปเรื่อยๆ

label start:



$ ui.timer(10.0, ui.jumps("not_choice")) #<---ข้อ B เปลี่ยนจาก 10.0 วินาทีให้เป็นเวลาที่เรากำหนดในevent นั้นๆ
    show countdown at Position (xalign = 0.3, yalign = 0.1)
    menu:
        "เลือกคำตอบข้อ 1  ทันที":
            hide countdown

ทีนี้ปัญหาคือ เวลาใส่เลขใดๆไปในข้อB เพื่อทำให้เวลาในevent นั้นๆลดลงน้อยกว่า 10 วิ(ซึ่งได้ผลตามปกติ)
แต่ไม่ว่ายังไงมันก็จะขึ้นเลขเริ่มต้นที่เลข10 เพราะscript คำสั่งที่ตั้งไว้ข้อA บังคับให้เริ่มมาที่เลข10  


**ซึ่งต่อให้เปลี่ยนข้อAก็แสดงเลขได้แค่แบบเดียวอยู่ดี ใช้สลับหลายๆcountdown อย่างที่ต้องการไม่ได้**

เลยอยากทราบว่าจะทำยังไงถึงจะแบ่งcountdownแบบแสดงเลข เอาไว้ใช้ได้หลายๆรูปแบบในเกมครับ
เช่น
label start:

คำถามแรก (แสดง 10วิ )

คำถามที่สอง (แสดง 5วิ )

คำถามที่สาม (แสดง 3วิ )


return




ราวๆนี้น่ะครับ ไม่ทราบว่าscriptโปรแกรมนี้ทำได้รึเปล่าครับผม

ขอบคุณล่วงหน้านะครับ





Rank: 7Rank: 7Rank: 7

โพสต์เมื่อ 19-5-2013 21:19 |แสดงโพสต์ทั้งหมด
ตอบกระทู้ ruruner ตั้งกระทู้

ลองเอาไปประยุกต์ดูค่ะ  
  1. init:
  2.   
  3.     # สร้างตัวแประของตัวละคร
  4.     $ e = Character('NOOKFUFU2', color="#c8ffc8")
  5.    
  6. init:
  7.     python:
  8. #-----------------------------------[10 Second]------------------------------------------------------------
  9.         def countdown_10_Second(st, at, length=0.0):
  10.             remaining = length - st
  11.             if remaining > 2.0:
  12.                 return Text("%.1f" % remaining, color="#ffffff", size=72 , bold = True ), .1 #<----ถ้าตัวเลขมากว่า 2.0 ให้แสดงสี text เป็น "สีขาว"
  13.             elif remaining > 0.0:
  14.                 return Text("%.1f" % remaining, color="#ff0000", size=72, bold = True), .1#<----ถ้าตัวเลขต่ำกว่า 2.0 และไม่เท่ากับ 0.0 ให้แสดงสี text เป็น "สีแดง"
  15.             else:
  16.                 return anim.Blink(Text("0.0", color="#ff0000", size=72, bold = True)), None #<--- ถ้าตัวเลขเท่ากับ 0.0 ให้แสดงสี Text เป็น "สีแดง" และแสดงเป็นตัวแบบกระพริบ
  17.                
  18. #-----------------------------------[5 Second]------------------------------------------------------------
  19.         def countdown_5_Second(st, at, length=0.0):
  20.             remaining = length - st
  21.             if remaining > 2.0:
  22.                 return Text("%.1f" % remaining, color="#ffffff", size=72 , bold = True ), .1
  23.             elif remaining > 0.0:
  24.                 return Text("%.1f" % remaining, color="#ff0000", size=72, bold = True), .1
  25.             else:
  26.                 return anim.Blink(Text("0.0", color="#ff0000", size=72, bold = True)), None
  27.                
  28. #-----------------------------------[3 Second]------------------------------------------------------------
  29.         def countdown_3_Second(st, at, length=0.0):
  30.             remaining = length - st
  31.             if remaining > 2.0:
  32.                 return Text("%.1f" % remaining, color="#ffffff", size=72 , bold = True ), .1
  33.             elif remaining > 0.0:
  34.                 return Text("%.1f" % remaining, color="#ff0000", size=72, bold = True), .1
  35.             else:
  36.                 return anim.Blink(Text("0.0", color="#ff0000", size=72, bold = True)), None
  37.                
  38. #-----------------------------------[ Image ]------------------------------------------------------------
  39.     # แสดงตัวเลข เริ่มนับถอยหลังที่ 10 วินาที.
  40.     image countdown_10_Second = DynamicDisplayable(countdown_10_Second, length=10.0)  #<---ตัวเลขเริ่มต้นจาก 10.0 วินาที และนับถอยหลังลงมาเรื่อยๆ
  41.     image countdown_5_Second = DynamicDisplayable(countdown_5_Second, length= 5.0)  #<---ตัวเลขเริ่มต้นจาก 5.0 วินาที และนับถอยหลังลงมาเรื่อยๆ
  42.     image countdown_3_Second = DynamicDisplayable(countdown_3_Second, length= 3.0)  #<---ตัวเลขเริ่มต้นจาก 3.0 วินาที และนับถอยหลังลงมาเรื่อยๆ
  43.    
  44. #-----------------------------------[ Start ]------------------------------------------------------------
  45. label start:
  46.     $ ui.timer(10.0, ui.jumps("not_choice")) #<-------------------------------ให้เวลา 10.0 วินาที
  47.     show countdown_10_Second at Position (xalign = 0.3, yalign = 0.1)
  48.     menu:
  49.         "เลือกคำตอบข้อ 1  ทันที":
  50.             hide countdown_10_Second
  51.             e "You chose 'Choice 1' fast"
  52.             jump menu1_end
  53.             
  54.         "เลือกคำตอบข้อ 2 ทันที":
  55.             hide countdown_10_Second
  56.             e "You chose 'Choice 2' fast"
  57.             jump menu1_end
  58.     return
  59. label not_choice:
  60.     hide countdown_10_Second
  61.     e "ทำไมนายถึงไม่ยอมตอบคำถามฉัน?"
  62.     e "ฉันจะให้โอกาสนายตอบคำถามฉันอีกครั้ง"
  63.     $ ui.timer(5.0, ui.jumps("not_choice_slow")) #<-----------------------ให้เวลา 5.0 วินาที
  64.     show countdown_5_Second at Position (xalign = 0.3, yalign = 0.1)
  65.     menu:
  66.         "เลือกคำตอบข้อ 1  ":
  67.             hide countdown_5_Second
  68.             e "คุณเลือกข้อ 1 แบบลังเล"
  69.             jump menu2_end
  70.         "เลือกคำตอบข้อ 2  ":
  71.             hide countdown_5_Second
  72.             e "คุณเลือกข้อ 2 แบบลังเล"
  73.             jump menu2_end
  74. label not_choice_slow:
  75.     hide countdown_5_Second
  76.     e "ฉันไม่เคยเจอใครที่เฉื่อยชาเท่าคุณอีกแล้ว"
  77.     return
  78.    
  79. label menu1_end:
  80.     e "อย่างน้อยนายก็ยอมตอบคำถามฉัน"
  81.     return
  82.    
  83. label menu2_end:
  84.     e "อย่างน้อยนายก็ยอมตอบคำถามฉัน"
  85.     return
คัดลอกไปที่คลิปบอร์ด

Rank: 1

โพสต์เมื่อ 21-5-2013 11:14 |แสดงโพสต์ทั้งหมด
ขอบคุณมากๆครับคุณnook ใช่ที่ต้องการเลยครับ

Rank: 1

โพสต์เมื่อ 6-8-2015 18:26 |แสดงโพสต์ทั้งหมด

ขอบคุณมากค่ะ

Rank: 1

โพสต์เมื่อ 23-8-2015 14:46 |แสดงโพสต์ทั้งหมด
ขอบคุณครับบบ

Rank: 1

โพสต์เมื่อ 20-10-2015 22:04 |แสดงโพสต์ทั้งหมด
ขอบคุณค่า

Rank: 1

โพสต์เมื่อ 27-10-2015 23:25 |แสดงโพสต์ทั้งหมด
เอ่อผมอยากทราบว่าถ้าทำจับเวลาแล้วแสดงเป้นกลอดเวลาแมนตัวเลขทำได้ไหมครับ แบบเปลี่ยนจากตัวเลขเป้นหลอดเวลาแทนอะครับ

Rank: 7Rank: 7Rank: 7

โพสต์เมื่อ 29-10-2015 13:57 |แสดงโพสต์ทั้งหมด
ตอบกระทู้ Armacg ตั้งกระทู้

ลองค้นจากบทความเก่าๆดูนะค่ะ [renpy] วิธีทำ label Fight RPG  เอาไปประยุกต์ใช้ได้ค่ะ
คุณต้องเข้าสู่ระบบก่อนจึงจะสามารถตอบกลับ เข้าสู่ระบบ | สมัครสมาชิก


Thaigraph

GMT+7, 21-9-2019 08:25 , Processed in 0.729607 second(s), 22 queries .

Powered by Discuz! X1.5

© 2001-2010 Comsenz Inc. Thai Language by DiscuzThai! Team.

Top 10 Best Sellers in Clothing for 2017 Top 10 Best Sellers in Clothing Best Sellers in Clothing
Top 10 Best Sellers in Books reviewer 2017 Top 10 Best Sellers in Books Best Sellers in Books