|
[Renpy] 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[0].drag_name[0]
- p_y = drags[0].drag_name[1]
- t_x = drop.drag_name[0]
- t_y = drop.drag_name[1]
-
- 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[0].snap(my_x,my_y)
- drags[0].draggable = False
- placedlist[int(p_x),int(p_y)] = True
- for i in range(6):
- for j in range(4):
- if placedlist[i,j] == 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[i,j]
- droppable False
- dragged piece_dragged
- xpos piecelist[i,j][0] ypos piecelist[i,j][1]
-
-
- 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[i,j] = [renpy.random.randint(0, 600)+100, renpy.random.randint(0, 480)] #ปรับระยะกระจายของจิ๊กซอ
- tempimage = im.AlphaMask(mainimage,"puzzle_pieces/%s_%s.png"%(j+1,i+1))
- imagelist[i,j] = im.Crop(tempimage, i*100,j*100, 150, 150)
- placedlist[i,j] = 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 หรือสูงกว่า
Thaigraph_Jigsaw_Puzzles.zip
(603.32 KB, ดาวน์โหลดแล้ว: 456)
|
|