บทความสอนกราฟิก

 ลืมรหัสผ่าน
 ลงทะเบียน
ค้นหา
ดู: 2831|ตอบกลับ: 0

[Renpy] 74. วิธีแทรก มินิเกมส์ Jigsaw Puzzle

[คัดลอกลิงก์]

272

กระทู้

272

โพสต์

979

เครดิต

ผู้ดูแลระบบ

Rank: 9Rank: 9Rank: 9

เครดิต
979
74_Insert_Jigsaw_minigame_01.jpg
[Renpy] 74. วิธีแทรก มินิเกมส์ Jigsaw Puzzle
เป็นโค๊ด "มินิเกมส์จิ๊กซอ" ที่ค้นเจอในบอร์ด lemmasoft โดยคุณ SusanTheCat พัฒนาไว้ แล้วข้าพเจ้าก็นำมาปรับแต่งเพิ่มเติมโดยใส่โค๊ดของตัวเองเข้าไปอีก เพื่อให้ตัวมินิเกมส์สมบูรณ์มากขึ้นนะคะ

โดยในโค๊ดที่ว่านี้จำเป็นต้องมีโฟลเดอร์ซึ่งใช้เป็นภาพต้นแบบชื่อว่า "puzzle_pieces" เพิ่มลงไปด้วยในโฟลเดอร์ "game" โค๊ดคำสั่งมินิเกมส์ถึงจะใช้ได้ ส่วนภาพที่จะประกอบก็จะมีประมาณนี้ค่ะ (ทั้งหมดมีให้โหลดในไฟล์ต้นฉบับ ท้ายบทความค่ะ)
74_Insert_Jigsaw_minigame_05.jpg
รูปแบบการทำงานของโค๊ดตัวเพิ่มเติมนี้ เมื่อเข้าเกมส์นี้จะเจอกับหน้าถามผู้เล่นว่าต้องการเล่นเกมส์นี้หรือไม่?

74_Insert_Jigsaw_minigame_02.jpg

ถ้าผู้เล่นเลือกคลิกที่คำตอบ "เล่นสิ" เกมส์ก็จะแสดงหน้ามินิเกมส์ "จิ๊กซอ" ขึ้นมา (ชิ้นส่วนภาพจะกระจายไปทั่วหน้าจอ ผู้เล่นจะต้องเรียงภาพให้เหมือนกับภาพต้นแบบด้านซ้านล่าง) และในกรณีที่ผู้เล่นไม่สามารถเล่นต่อได้ หรือต้องการออกจากหน้านี้ โดยไม่ต้องการเล่นให้จบ ก็สามารถคลิกที่ปุ่ม "EXIT" (ด้านซ้านล่างของหน้าจอเกมส์) เพื่อออกจากหน้ามินิเกมส์ได้ตลอดเวลา
74_Insert_Jigsaw_minigame_02_1.jpg
ในกรณีที่ผู้เล่นต่อจิ๊กซอภาพครบทุกชิ้น เกมส์จะวิ่งไปที่หน้า label win: พร้อมแสดงภาพหน้าตัวสมบูรณ์ และโชว์คำว่า "คุณชนะแล้ว"

74_Insert_Jigsaw_minigame_03.jpg
และในกรณีตรงข้าม คือถ้าผู้เล่นคลิกปุ่ม "EXIT" เพิ่มออกจากหน้นมินิเกมส์โดยไม่เล่นต่อให้จบ เกมส์ก็จะวิ่งไปที่หน้า label lose: ทันที พร้อมกับแสดงคำว่า "คุณแพ้แล้ว"

74_Insert_Jigsaw_minigame_04.jpg
มาดูโค๊ดขั้นตอนทั้งหมดกันเลยค่ะ หน้าตาก็จะประมาณนี้
(โค๊ดจะใส่ไว้ที่หน้า script.rpy เพื่อให้เข้าใจมากขึ้น ที่ท้ายบทความจะมีไฟล์ต้นฉบับให้โหลดไปเปิดดูได้ค่ะ)

  1. image blank_image = "blank_image_800x600.jpg"
  2. define v = Character('วิชชา', color="#f8f092")

  3. init python:
  4.     def piece_dragged(drags, drop):
  5.         
  6.         if not drop:
  7.             return
  8.         
  9.         p_x = drags[0].drag_name[0]
  10.         p_y = drags[0].drag_name[1]
  11.         t_x = drop.drag_name[0]
  12.         t_y = drop.drag_name[1]
  13.         
  14.         if p_x == t_x and p_y == t_y:
  15.             renpy.music.play("Pickup_Coin.ogg", channel="sound")
  16.             my_x = int(p_x)*100+25
  17.             my_y = int(p_y)*100+25
  18.             drags[0].snap(my_x,my_y)
  19.             drags[0].draggable = False
  20.             placedlist[int(p_x),int(p_y)] = True
  21.             for i in range(6):
  22.                 for j in range(4):
  23.                     if placedlist[i,j] == False:
  24.                         return
  25.             return True
  26.         return
  27.         
  28. screen jigsaw:
  29.     python:
  30.          ui.imagebutton("button.png", "button_hover.png", xalign=.01,yalign=.99 , clicked=ui.jumps("lose"))

  31.     draggroup:
  32.         
  33.         for i in range(6):
  34.             for j in range(4):
  35.                 $ name = "%s%s"%(i,j)
  36.                 $ my_x = i*100+50
  37.                 $ my_y = j*100+50
  38.                 drag:
  39.                     drag_name name
  40.                     child "blank_space_100x100.png"
  41.                     draggable False
  42.                     xpos my_x ypos my_y
  43.             
  44.             
  45.         for i in range(6):
  46.             for j in range(4):
  47.                 $ name = "%s%s piece"%(i,j)
  48.                 drag:
  49.                     drag_name name
  50.                     child imagelist[i,j]
  51.                     droppable False
  52.                     dragged piece_dragged
  53.                     xpos piecelist[i,j][0] ypos piecelist[i,j][1]
  54.             
  55.            
  56. label puzzle:
  57.     call screen jigsaw
  58.     jump win

  59. label start:
  60.     scene blank_image
  61.     menu:
  62.         v "เรามาเล่นกันหน่อยไหม?"
  63.         
  64.         "เล่นสิ":
  65.                 scene blank_image
  66.                 image whole = "thaigraph_6X4_600x400.jpg"

  67.                 python:
  68.                     mainimage = im.Composite((650, 450),(25, 25), "thaigraph_6X4_600x400.jpg")
  69.                     piecelist = dict()
  70.                     imagelist = dict()
  71.                     placedlist = dict()
  72.                     for i in range(6):
  73.                         for j in range(4):
  74.                             piecelist[i,j] = [renpy.random.randint(0, 600)+100, renpy.random.randint(0, 480)] #ปรับระยะกระจายของจิ๊กซอ
  75.                             tempimage = im.AlphaMask(mainimage,"puzzle_pieces/%s_%s.png"%(j+1,i+1))
  76.                             imagelist[i,j] = im.Crop(tempimage, i*100,j*100, 150, 150)
  77.                             placedlist[i,j] = False
  78.                 jump puzzle
  79.             
  80.         "ไม่ดีกว่า":
  81.             return

  82. label win:
  83.     scene black
  84.     show whole at Position(xalign=0.5,yalign=0.5)
  85.     v "คุณชนะแล้ว"
  86. return

  87. label lose:
  88.     scene black
  89.     v "คุณแพ้แล้ว"
  90. return
คัดลอกไปที่คลิปบอร์ด
***ไฟล์ต้นฉบับค่ะ เปิดด้วย renpy เวอร์ชั่น 6.18.3-sdk หรือสูงกว่า Thaigraph_Jigsaw_Puzzles.zip (603.32 KB, ดาวน์โหลดแล้ว: 422)
ขออภัย! คุณไม่ได้รับสิทธิ์ในการดำเนินการในส่วนนี้ กรุณาเลือกอย่างใดอย่างหนึ่ง ลงชื่อเข้าใช้ | ลงทะเบียน

รายละเอียดเครดิต

ข้อความล้วน|อุปกรณ์พกพา|ประวัติการแบน|GraphicFUFU

GMT+7, 2024-3-28 17:32 , Processed in 0.105342 second(s), 21 queries .

Powered by Discuz! X3.4 R20180101, Rev.59

© 2001-2017 Comsenz Inc.

ตอบกระทู้ ขึ้นไปด้านบน ไปที่หน้ารายการกระทู้