nooknazha โพสต์ 2018-6-29 22:36:37

[Renpy] 52. วิธีสั่งให้โปรแกรมแสดง "วัน" และ "เดือน" Date Overlay

แก้ไขครั้งสุดท้ายโดย nooknazha เมื่อ 2018-6-29 22:41


52. วิธีสั่งให้โปรแกรมแสดง "วัน" และ"เดือน" Date Overlay

เกมส์ที่มีการกำหนดให้แสดง "วันที่"โดยมากจะเป็นเกมส์ที่มีรูปแบบจำลองการดำเนินชีวิตไปในแต่ละวัน วนเวียนซ้ำๆ เช่นตื่นนอน ไปทำงาน/เรียน กลับบ้าน และเข้านอน

ผู้สร้างเกมส์สามารถแทรกเงื่อนไข ที่จะทำให้เกิดเหตุการณ์แต่ละช่วงเวลามีความแตกต่างกันได้โดยการแทรกโค๊ด if -else เพิ่มเข้าไปซึ่งตรงส่วนนี้ข้าพเจ้าจะแนะนำวิธีการเขียนโค๊ดไว้ให้ในตอนท้ายของบทความค่ะ

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

และนอกจากนี้ประโยชน์ของการกำหนดให้แสดงวันที่ยังช่วยลดภาระในเรื่องการแต่งเนื้อเรื่องที่ซับซ้อนให้ลดลงดูเป็นระบบระเบียบมากขึ้น ทำให้มองเห็นทิศทางการจบของเกมส์ได้ง่ายขึ้น

ขั้นตอนที่ 1 ให้เตรียมภาพพที่จะนำมาใช้ทำเป็นพื้นหลังของวัน และเดือนค่ะขนาดกว้างประมาณ 250 x 50 pt บันทึกไฟล์เป็นสกุล .png

ขั้นตอนที่ 2
-เปิดไฟล์script.rpy ขึ้นมา และทรกโค๊ดก่อนlabelstart: ลงไปดังนี้ค่ะ(หรือถ้าไม่อยากให้มันดูเกะกะเกินไปก็เอาใส่ไว้ที่บรรทัดท้ายสุดของไฟล์ options.rpyก็ได้เหมือนกันค่ะ)

Code:
init:
    $ month = "มกราคม"
    $ day = 1

    python hide:
      def date_overlay():
            if show_date:
                ui.image("date_month.png",
                         xpos=0.0, xanchor="left",
                         ypos=0.0, yanchor="top")
               
                ui.text("วันที่ %d " % day + month , size=21, bold= True,
                  color="#ffffff",xpos=0.0,ypos=0.0)

      config.overlay_functions.append(date_overlay)
อธิบายโค๊ดนะค่ะ
- defdate_overlay(): เรียกใช้ฟังก์ชั่นชื่อ date_overlay
-if show_date: คือ ถ้า show_date = True (เป็นจริง)ให้ทำตามเงื่อนไขดังนี้
- "วันที่%d " % day + monthคือ ให้แสดงคำว่า"วันที่" แล้วตามด้วย %d (ตัวแปรที่มีรูปแบบเป็นตัวเลขใช้คำนวณ)ซึ่งก็คือตัวแปรของ day + month (ตัวแปรเดือนซึ่งมีค่า ="มกราคม")

- size=21 กำหนดขนาดของText
- bold=True คือโค๊ดที่กำหนดให้Text เป็นตัวหนา ถ้าไม่ต้องการก็ให้เอาออก
- xpos=0.0,ypos=0.0 ใช้ปรับตำแหน่งของภาพพื้นหลังวันที่และเดือน ที่จะให้แสดงบนหน้าจอเกมส์
- config.overlay_functions.append(date_overlay) เป็นกำหนดให้ฟังก์ชั่นชื่อdate_overlay มีผลกับหน้าจอเกมส์

ขั้นตอนที่ 3
- หลังจากlabel start: ให้ใส่โค๊ดเพิ่มลงไปดังนี้ค่ะ(เพื่อเปิดใช้งาน)$ show_date = Trueจากนั้นก็ให้นำโค๊ดด้านล่างนี้ไปใส่ไว้ที่ตำแหน่งท้ายๆของเกมส์เพิ่มเป็นการเพิ่มค่า(ตัวแปร)เลขวันที่ให้เพิ่มขึ้นทีละ +1)
$ day += 1 สำหรับรูปแบบเกมส์ที่จะต้องกำหนดให้มีเหตุการณ์ส่วนใหญ่จะเกิดขึ้นซ้ำๆ กันในแต่ละวันนั้นสิ่งที่ขาดไม่ได้ก็คือรูปแบบการเขียนโปรแกรมที่จะต้องทำให้มีการวนกลับมาซ้ำที่เดิมซ้ำๆ หลายๆรอบ

เราควรจะเขียนโปรแกรมให้มีการวนกลับมาที่ช่วงเวลาเดิมของแต่ละวันซ้ำๆกันโดยใช้ label และคำสั่ง jumpมาช่วย เพื่อให้ทำให้โปรแกรมวนซ้ำๆกลับมาที่เดิม

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

if day == 30: #<<----ถ้าวันที่ = 30 ให้ทำตามคำสั่งด้านล่าง
    return #<<----สั่งให้จบเกมส์ (กลับไปที่หน้า main menu)

else: #<<--- ถ้ายังไม่ถึงวันที่ 30
    $ day += 1 #<<---ขึ้นวันใหม่( date = date + 1)
    jump Morning #<<---กลับไปที่ label Morning ซ้ำใหม่อีกครั้ง

.....ตัวอย่างการเขียนโค๊ดดังที่กล่าวมาข้างต้นทั้งหมดก็จะประมาณนี้ค่ะ
(คลิกที่ภาพเพื่อดูแบบขนาดเต็ม)

(***ในตัวอย่างข้างบนนี้ข้าพเจ้ากำหนดให้วนลูบแค่ 2 รอบพอ ถ้ากำหนดให้ครบ 30 รอบ (30วัน)ล่ะก็ เทสโปรแกรมเหนื่อยแย่ คลิกเม้าส์มือหงิก

และอีกเรื่องที่ค้างไว้คือ การสร้างเงื่อนไขให้แต่ละช่วงเวลานั้นๆ ของแต่ละวันมีความแตกต่างกันออกไปบ้างตามแต่สถานการณ์ หรือแล้วแต่เหตุการณ์การเขียนโค๊ดก็จะประมาณนี้ค่ะ

ข้าพเจ้ายกตัวอย่างเหตุการณ์ที่มีโอกาสที่จะขึ้นในช่วงเวลาเช้าของแต่ละวันโดยใช้ตัวเลข "วันที่"มาเป็นตัวกำหนดเหตุการณ์ที่ตัวละครหลักจะต้องประสบ เมื่อถึงเวลาและช่วงเวลาที่กำหนด
label Morning: #กิจกรรมที่เกิดขึ้นในตอนเช้า
    scene black
    show viccha2 with dissolve

    if day == 2: #ถ้าวันที่ = 2 ให้ทำตามเงื่อนไขดังนี้
      jumpmeet_kawii

    if day == 5: #ถ้าวันที่ = 5 ให้ทำตามเงื่อนไขดังนี้
      jump meet_kawii_at_classroom

    if day == 12: #ถ้าวันที่ = 12 ให้ทำตามเงื่อนไขดังนี้
      jump meet_karin

    else: #ถ้าวันที่ ไม่เท่ากับ 2,5,12 ให้ทำตามคำสั่งดังต่อไปนี้
      b "ใส่เนื้อเรื่องปกติประจำวันที่เกิดขึ้นช่วงเช้า....................."

      jump Afternoon <---กระโดดไปที่ label ตอนบ่าย

ขอให้สนุกกับการสร้างเกมส์นะค่ะ^^"******************************
บทความโดย นุ้ก
ขอจบบทความแค่เพียงเท่านี้ แล้วพบกันใหม่บทความหน้าค่ะ ^^
(ขอสงวนสิทธิ์อนุญาตให้เผยแพร่เฉพาะในเว็บ www.graphicfufu.comเท่านั้น)
หน้า: [1]
ดูในรูปแบบกติ: [Renpy] 52. วิธีสั่งให้โปรแกรมแสดง "วัน" และ "เดือน" Date Overlay