nooknazha โพสต์ 2019-11-30 22:35:19

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


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

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

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


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

ในกรณีที่ผู้เล่นต่อจิ๊กซอภาพครบทุกชิ้น เกมส์จะวิ่งไปที่หน้า label win: พร้อมแสดงภาพหน้าตัวสมบูรณ์ และโชว์คำว่า "คุณชนะแล้ว"

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

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

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

init python:
    def piece_dragged(drags, drop):
      
      if not drop:
            return
      
      p_x = drags.drag_name
      p_y = drags.drag_name
      t_x = drop.drag_name
      t_y = drop.drag_name
      
      if p_x == t_x and p_y == t_y:
            renpy.music.play("Pickup_Coin.ogg", channel="sound")
            my_x = int(p_x)*100+25
            my_y = int(p_y)*100+25
            drags.snap(my_x,my_y)
            drags.draggable = False
            placedlist = True
            for i in range(6):
                for j in range(4):
                  if placedlist == False:
                        return
            return True
      return
      
screen jigsaw:
    python:
         ui.imagebutton("button.png", "button_hover.png", xalign=.01,yalign=.99 , clicked=ui.jumps("lose"))

    draggroup:
      
      for i in range(6):
            for j in range(4):
                $ name = "%s%s"%(i,j)
                $ my_x = i*100+50
                $ my_y = j*100+50
                drag:
                  drag_name name
                  child "blank_space_100x100.png"
                  draggable False
                  xpos my_x ypos my_y
            
            
      for i in range(6):
            for j in range(4):
                $ name = "%s%s piece"%(i,j)
                drag:
                  drag_name name
                  child imagelist
                  droppable False
                  dragged piece_dragged
                  xpos piecelist ypos piecelist
            
         
label puzzle:
    call screen jigsaw
    jump win

label start:
    scene blank_image
    menu:
      v "เรามาเล่นกันหน่อยไหม?"
      
      "เล่นสิ":
                scene blank_image
                image whole = "thaigraph_6X4_600x400.jpg"

                python:
                  mainimage = im.Composite((650, 450),(25, 25), "thaigraph_6X4_600x400.jpg")
                  piecelist = dict()
                  imagelist = dict()
                  placedlist = dict()
                  for i in range(6):
                        for j in range(4):
                            piecelist = #ปรับระยะกระจายของจิ๊กซอ
                            tempimage = im.AlphaMask(mainimage,"puzzle_pieces/%s_%s.png"%(j+1,i+1))
                            imagelist = im.Crop(tempimage, i*100,j*100, 150, 150)
                            placedlist = False
                jump puzzle
            
      "ไม่ดีกว่า":
            return

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

label lose:
    scene black
    v "คุณแพ้แล้ว"
return
***ไฟล์ต้นฉบับค่ะ เปิดด้วย renpy เวอร์ชั่น 6.18.3-sdk หรือสูงกว่า

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

หน้า: [1]
ดูในรูปแบบกติ: [Renpy] 74. วิธีแทรก มินิเกมส์ Jigsaw Puzzle