แก้ไขครั้งสุดท้ายโดย nooknazha เมื่อ 2018-6-22 17:41
[Renpy] 33. วิธี เพิ่ม- ลด คะแนนคำถาม (ScoreQuestion) แบบแสดงคะแนนที่หน้าหลัก
การตั้งคำถามที่มีการสะสมคะแนน จะเป็นการนำผลคะแนนที่ได้ไปเข้าสู่กระบวนการเงื่อนไขต่าง ซึ่งจะเป็นการกำหนดทิศทางการจบของเกมส์ว่าต้องการให้เกมส์จบแบบไหน
สำหรับวิธีการเพิ่ม-ลด คะแนน ด้วย Choice Menu จะไม่มีอะไรซับซัอนนะค่ะ แต่วิธีการที่จะให้แสดงผลรวมคะแนนที่ส่วนต่างๆของหน้าจอเกมส์นี่สิ มันจะมีอยู่หลายประเภทด้วยกัน เช่นให้แสดงที่หน้าจอหลักเป็นภาพ/เป็นแถบค่าพลัง หรือแสดงเป็นตัวเลข หรือ แสดงที่หน้าพิเศษแยกต่างหากในกรณีผู้เล่นจะสามารถเช็คผลรวมคะแนนของตนเองได้ก็ต่อเมื่อต้องคลิกที่ปุ่มเมนูพิเศษ(ต้องสร้างขึ้นเอง)จากหน้าเมนูหลักเข้าไปดูซึ่งโค๊ดการเขียนก็จะมีความซับซ้อนมากขึ้น
แต่ทั้งนี้ก็ขึ้นอยู่กับตัวผู้สร้างเอง... ว่าจะให้ผลรวมคะแนน หรือคะแนนที่สะสมนั่นไปแสดงผลอยู่ที่ส่วนไหน
ในบทความนี้ข้าพเจ้าจะแนะนำ 2 แบบคือ
แบบที่1 สั่งให้โปรแกรมแสดงตัวเลขคะแนนที่กรอบคำพูดสนทนา(เป็นวิธีที่ง่ายสุด)
แบบที่2 สร้าง ui สั่งให้แสดงผลคะแนนที่หน้าเกมส์หลักพร้อมภาพและแสดงความรู้สึกของตัวละคร ซึ่งจะเปลี่ยนไปตามผลรวมคะแนนที่ผู้เล่นทำได้ --------------------------------------------------------------------------------
แบบที่ 1
สั่งให้โปรแกรมแสดงตัวเลขคะแนนที่กรอบคำพูดสนทนา
ตัวอย่างการเขียนโค๊ด เพิ่ม-ลดคะแนน ที่ไฟล์ script.rpy
- init:
- $ b = Character('กวี', color="#f8f092")
- image kawii01 = "cha/kawii_01.png"
- image kawii02 = "cha/kawii_02.png"
- # เริ่มเกมส์
- label start:
- $ score = 0
- scene black
- show kawii01 at left with dissolve
- #คำถามที่ 1
- menu:
- b "พยัญชนะในภาษาอังกฤษตัว "ph" เมื่อออกเสียง ผสมกัน
- ในภาษาไทยจะเท่ากับพยัญชนะตัวอะไร ?"
-
- "ออกเสียงเป็นตัว ช.ช้าง":
- pass
- "ออกเสียงเป็นตัว ฟ.ฟัน":
- $ score += 1
- pass
- "ออกเสียงเป็นตัว พ.พาน และ ฮ.นกฮูก":
- pass
-
- #คำถามที่ 2
- menu:
- b "พยัญชนะในภาษาอังกฤษตัว "aew" เมื่อออกเสียง ผสมกัน
- ในภาษาไทยจะเท่ากับสระตัวอะไร ?"
-
- "สระ เ-" :
- $ score -= 1
- if score <= 0:
- $ score = 0
- pass
- "สระ แ-ว ":
- $ score += 1
- pass
- "สระ แ- ":
- $ score -= 1
- if score <= 0:
- $ score = 0
- pass
-
- #คำถามที่ 3 (คำถามสุดท้าย)
- menu:
- b "พยัญชนะในภาษาอังกฤษตัว "oei" เมื่อออกเสียง ผสมกัน
- ในภาษาไทยจะเท่ากับสระตัวอะไร ?"
-
- "สระ ไ- ":
- $ score -= 1
- if score <= 0:
- $ score = 0
- jump score
- "สระ เ-า":
- $ score -= 1
- if score <= 0:
- $ score = 0
- jump score
-
- "สระ เ-ย":
- $ score += 1
- jump score
- #---------สรุปผล--------------------
- label score:
- hide kawii01
- show kawii02 with dissolve
- b "คุณได้ [score!d] คะแนน!!!"
- if score == 0:
- #End lose
- b "คุณควรพยายามให้มากกว่านี้!"
- jump end_lose
-
- if score == 1:
- #End normal
- b "อย่างน้อยคุณก็มีความสามารถพอใช้!"
- jump end_normal
-
- if score == 2:
- #End happy
- b "คุณเป็นคนเก่งทีเดียว! "
- jump end_happy
- if score == 3:
- #End perfect!!!
- b "คุณนี่สุดยอดจริงๆ! "
- jump end_perfect
- return
คัดลอกไปที่คลิปบอร์ด
- โค๊ดด้านล่างนี้"pass" จะเป็นการสั่งให้โปรแกรมผ่านไปยังคำสั่งถัดไปต่างกับคำสั่ง "jump" ซึ่งจะเป็นการสั่งให้โปรแกรมกระโดดข้ามไปอ่านlabel ต่างๆ โดยไม่สนใจ label ต่างๆ ที่อยู่ก่อนหน้า - โค๊ดด้านล่างนี้ "[score!d]" จะเป็นการสั่งให้โปรแกรมแสดงคะแนนรวมสุดท้ายที่คำนวณได้ค่ะ
- b "คุณได้ [score!d] คะแนน!!!"
คัดลอกไปที่คลิปบอร์ด มาดูผลลัพธ์ที่ได้จากโค๊ดด้านบนกันค่ะ...
ตอบคำถามไปเรื่อยๆจนครบ (มี 3 คำถาม) เมื่อหมดคำถามแล้ว ตัวละครก็จะบอก "ผลคะแนน" ที่เราทำได้ในกรอบคำพูดสนทนาดังภาพด้านล่างค่ะ
---------------------------------------------------------------------
แบบที่ 2
สร้าง ui สั่งให้แสดงผลคะแนนที่หน้าเกมส์หลักพร้อมภาพและแสดงความรู้สึกของตัวละคร ซึ่งจะเปลี่ยนไปตามผลรวมคะแนนที่ผู้เล่นทำได้
ขั้นตอนที่1
ให้เตรียมภาพ2 ภาพคือ"ภาพพื้นหลัง" และ "ภาพแทนค่าคะแนน" หรือจะคลิกขวาที่ 2ภาพด้านล่างและเซฟไปใช้ก็ได้ค่ะ
1. ภาพพื้นหลัง score
2. ภาพหัวใจ
ขั้นตอนที่ 2
เปิดไฟล์options.rpy และนำโค๊ดนี้ไปใส่ไว้ที่ด้านล่างสุดค่ะ
CODE:
- #code modify-----------score_heart---------by nookfufu2
- init:
- $ max_score_heart = 3
- $ score_heart = 0
- python hide:
- def score_heart():
- if show_score:
- ui.image("menu/menu_heart.png",
- xpos=0.0, xanchor="left",
- ypos=0.0, yanchor="top")
- ui.text("กวี", size=20, xalign=0.02, yalign=0.015)
- ui.text("%d/%d" % (score_heart, max_score_heart), xalign=0.2,yalign=0.015, size=20)
- ui.text("score: ", xalign=0.02, yalign=0.05)
- ui.text("ความรู้สึก:", size=20, xalign=0.02, yalign=0.095)
-
- if score_heart == 0:
- ui.text("เฉยๆ", xalign=0.15,yalign=0.095, size=20)
- if score_heart == 1:
- ui.text("สนใจ", xalign=0.15,yalign=0.095, size=20)
- ui.image("menu/heart1.png",xalign=0.1, yalign=0.06)
- if score_heart == 2:
- ui.text("ชอบ", xalign=0.15,yalign=0.095, size=20)
- ui.image("menu/heart1.png",xalign=0.1, yalign=0.06)
- ui.image("menu/heart1.png",xalign=0.13, yalign=0.06)
- if score_heart == 3:
- ui.text("สนิท", xalign=0.15,yalign=0.095, size=20)
- ui.image("menu/heart1.png",xalign=0.1, yalign=0.06)
- ui.image("menu/heart1.png",xalign=0.13, yalign=0.06)
- ui.image("menu/heart1.png",xalign=0.16, yalign=0.06)
- config.overlay_functions.append(score_heart)
คัดลอกไปที่คลิปบอร์ด ขั้นตอนที่ 3
ให้เปิดไฟล์script.rpy ขึ้นมาและให้นำโค๊ดนี้ไปใส่ต่อ label start: ค่ะ
CODE:
ดูตัวอย่างการใส่โค๊ดไฟล์ options.rpy
ตัวอย่างการใส่โค๊ดไฟล์ script.rpy
จากโค๊ดด้านบน จะเห็นว่าข้าพเจ้ากำหนดเงื่อนไขการจบของเกมส์ไว้ด้วยซึ่งเราจะต้องสร้าง label ฉากจบแบบต่างๆไว้มารองรับ เช่น label จบแบบแย่ๆ /label จบแบบธรรมดา/ label จบแบบแฮปปี้ หรือ label จบแบบเพอเฟคสุดๆ
(ถ้าไม่สร้าง labelฉากจบแบบต่างๆรองรับเตรียมไว้ เมื่อโปรแกรมวิ่งมาถึงเงื่อนไข jumpมันจะเกิด error แจ้งว่าไม่มี label ฉากจบดังกล่าวในโปรแกรมค่ะ)
บันทึกไฟล์และรันโปรแกรม ก็จะได้ผลลัพธ์ดังนี้ค่ะ
ถ้าต้องการสร้างค่าคะแนนของตัวละครมากกว่า1 ตัวละครเราก็ต้องสร้างหน้ากาก ui แยกการทำงานตามจำนวนที่เราต้องการค่ะดังตัวอย่างโค๊ดด้านล่าง...........
- #-----------------------------------------------------------------------------
- #code modify-----------score_heart---------by nookfufu2--------11111111
- init:
- $ max_score_heart = 3
- $ score_heart = 0
- python hide:
- def score_heart():
- if show_score:
- ui.image("menu/menu_heart.png",
- xpos=0.1, xanchor="left",
- ypos=0.0, yanchor="top")
- ui.text("กวี", size=20, xalign=0.12, yalign=0.015)
- ui.text("%d/%d" % (score_heart, max_score_heart), xalign=0.3,yalign=0.015, size=20)
- ui.text("score: ", xalign=0.12, yalign=0.05)
- ui.text("ความรู้สึก:", size=20, xalign=0.13, yalign=0.095)
-
- if score_heart == 0:
- ui.text("เฉยๆ", xalign=0.25,yalign=0.095, size=20)
- if score_heart == 1:
- ui.text("สนใจ", xalign=0.25,yalign=0.095, size=20)
- ui.image("menu/heart1.png",xalign=0.205, yalign=0.06)
- if score_heart == 2:
- ui.text("ชอบ", xalign=0.25,yalign=0.095, size=20)
- ui.image("menu/heart1.png",xalign=0.205, yalign=0.06)
- ui.image("menu/heart1.png",xalign=0.235, yalign=0.06)
- if score_heart == 3:
- ui.text("สนิท", xalign=0.25,yalign=0.095, size=20)
- ui.image("menu/heart1.png",xalign=0.205, yalign=0.06)
- ui.image("menu/heart1.png",xalign=0.235, yalign=0.06)
- ui.image("menu/heart1.png",xalign=0.265, yalign=0.06)
- config.overlay_functions.append(score_heart)
- #-----------------------------------------------------------------------------
- #code modify-----------score_heart---------by nookfufu2--------22222222
- init:
- $ max_score_heart2 = 3
- $ score_heart2 = 0
- python hide:
- def score_heart():
- if show_score:
- ui.image("menu/menu_heart.png",
- xpos=0.36, xanchor="left",
- ypos=0.0, yanchor="top")
- ui.text("ปกิณกะ", size=20, xalign=0.41, yalign=0.015)
- ui.text("%d/%d" % (score_heart2, max_score_heart2), xalign=0.57,yalign=0.015, size=20)
- ui.text("score: ", xalign=0.4, yalign=0.05)
- ui.text("ความรู้สึก:", size=20, xalign=0.42, yalign=0.095)
-
- if score_heart2 == 0:
- ui.text("เฉยๆ", xalign=0.52,yalign=0.095, size=20)
- if score_heart2 == 1:
- ui.text("สนใจ", xalign=0.52,yalign=0.095, size=20)
- ui.image("menu/heart1.png",xalign=0.475, yalign=0.06)
- if score_heart2 == 2:
- ui.text("ชอบ", xalign=0.52,yalign=0.095, size=20)
- ui.image("menu/heart1.png",xalign=0.475, yalign=0.06)
- ui.image("menu/heart1.png",xalign=0.505, yalign=0.06)
- if score_heart2 == 3:
- ui.text("สนิท", xalign=0.52,yalign=0.095, size=20)
- ui.image("menu/heart1.png",xalign=0.475, yalign=0.06)
- ui.image("menu/heart1.png",xalign=0.505, yalign=0.06)
- ui.image("menu/heart1.png",xalign=0.535, yalign=0.06)
- config.overlay_functions.append(score_heart)
-
- #-----------------------------------------------------------------------------
- #code modify-----------score_heart---------by nookfufu2--------3333333
- init:
- $ max_score_heart3 = 3
- $ score_heart3 = 0
- python hide:
- def score_heart():
- if show_score:
- ui.image("menu/menu_heart.png",
- xpos=0.62, xanchor="left",
- ypos=0.0, yanchor="top")
- ui.text("วัฎฎะ", size=20, xalign=0.67, yalign=0.015)
- ui.text("%d/%d" % (score_heart3, max_score_heart3), xalign=0.85,yalign=0.015, size=20)
- ui.text("score: ", xalign=0.69, yalign=0.05)
- ui.text("ความรู้สึก:", size=20, xalign=0.71, yalign=0.095)
-
- if score_heart3 == 0:
- ui.text("เฉยๆ", xalign=0.80,yalign=0.095, size=20)
- if score_heart3 == 1:
- ui.text("สนใจ", xalign=0.80,yalign=0.095, size=20)
- ui.image("menu/heart1.png",xalign=0.74, yalign=0.06)
- if score_heart3 == 2:
- ui.text("ชอบ", xalign=0.80,yalign=0.095, size=20)
- ui.image("menu/heart1.png",xalign=0.74, yalign=0.06)
- ui.image("menu/heart1.png",xalign=0.77, yalign=0.06)
- if score_heart3 == 3:
- ui.text("สนิท", xalign=0.80,yalign=0.095, size=20)
- ui.image("menu/heart1.png",xalign=0.74, yalign=0.06)
- ui.image("menu/heart1.png",xalign=0.77, yalign=0.06)
- ui.image("menu/heart1.png",xalign=0.80, yalign=0.06)
- config.overlay_functions.append(score_heart)
คัดลอกไปที่คลิปบอร์ด ผลลัพธ์ที่ได้ก็จะออกมาเป็นดังนี้..........
***************************************
บทความโดย นุ้ก
ขอจบบทความแค่เพียงเท่านี้ แล้วพบกันใหม่บทความหน้าค่ะ ^^
(ขอสงวนสิทธิ์อนุญาตให้เผยแพร่เฉพาะในเว็บ www.graphicfufu.comเท่านั้น)
|