Danganronpa V3: Treasure hunter! Monolith Solver
Published: 2024-04-14 07:47:45

Danganronpa V3 : Killing Harmony เป็นเกมแนว Visual Novel สืบสวนสอบสวนพร้อมด้วยระบบศาลชั้นเรียนสุดมัน แต่ถึงอย่างนั้น ตัวเกมก็มาพร้อมมินิเกมให้เล่นแก้เบื่อด้วยเช่นกัน

หนึ่งในนั้นคือ Treasure hunter! Monolith มินิเกมสุดฮาร์ดคอร์ที่หลายๆคนไม่สามารถเก็บ Achievement ครบ 100% ได้ก็เพราะมัน!!

## Treasure hunter! Monolith Overview

![Overview](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/genhxmu4d9jfnc1qruiu.png)

มินิเกมนี้เราจะรับบทเป็นนักขุดสมบัติ โดยตัวเกมจะมีบล็อค 4 สี ซึ่งประกอบด้วย
1 - สีขาว
2 - สีชมพู
3 - สีเหลือง
4 - สีฟ้า

เราจะสามารถทำลายได้เฉพาะจุดที่บล็อคสีเดียวกันอยู่ติดกันตั้งแต่ 2 บล็อคขึ้นไปเท่านั้น ซึ่งทันทีที่เราทุบบล็อคในจุดนั้นไป บล็อคสีรอบๆที่อยู่ติดกับจุดที่เราเลือกทุบจะเปลี่ยนสีตามลำดับ 1 > 2 > 3 > 4 > 1

![ก่อนหลังทุบ](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7ydcp9rghvo2a1owk2ux.png)

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

![สมบัติที่เก็บได้แล้ว](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cew8df08na7pnm748rox.png)

เกมจะจบลงก็ต่อเมื่อไม่เหลือจุดที่เราจะทุบต่อไปได้ และจะคำนวนออกมาเป็นคะแนนของเรา

![No more move](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uzux67qrmye8moa9u9a6.png)

โดยตัวเกม Danganronpa V3 นั้นมาพร้อมกับ Achievement โดยเราจะต้องเล่นเกมนี้ในระดับความยาก'สูงสุด' โดยจะต้องได้แรงค์ S ซึ่งเท่ากับว่า นอกจากจะต้องทำลายบล็อคให้ได้มากที่สุดแล้ว เราต้องมีดวงให้สมบัติที่ซ่อนอยู่เกิดในจุดที่เราทุบบล็อคออกไปด้วย!!!

![monolith achievement](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ds1gt7d26kvnxjbo75sv.png)

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


## Solver
ก่อนอื่น ต้องขอบคุณ DanLeEpicMan เป็นอย่างสูงที่ปล่อยโปรแกรมตัวนี้ให้เราใช้กันได้แบบฟรีๆ
ซึ่งการใช้งานสามารถทำได้ง่ายๆ เพียง Download ตัว solver นี้ลงมาจาก [GitHub](https://github.com/DanLeEpicMan/UpdatedMonolithSolver
)

แต่การจะรันตัว Solver นี้ได้ เราจำเป็นจะต้องติดตั้ง Python ในเครื่องเสียก่อน ซึ่งวิธีการทำได้ตาม[ลิ้งนี้เลย](https://www.youtube.com/watch?v=5GzzGYTORo4)

**Step 1**
เมื่อเตรียมการเรียบร้อย ให้เราเปิด Command Prompt และทำการพิมพ์
`pip install opencv-python`
และ
`pip install pillow`
เพื่อติดตั้ง Library ที่จำเป็นในการรัน

**Step 2**
เข้าไปที่ File Exploror และทำการก็อบ Directory ของตัว solver ตัวอย่างเช่น Directory ของเรามีหน้าตาแบบนี้
`C:\Users\SleepP\Downloads\UpdatedMonolithSolver-main`

จากนั้นกลับมาหน้า Command Prompt และพิมพ์ [cd (Directoryที่ก็อบมา)] ตัวอย่างเช่น 
`cd C:\Users\SleepP\Downloads\UpdatedMonolithSolver-main`

**Step 3**
เปิดเกมและทำการแคปหน้าจอกระดานเกม ทำการเซฟรูปเอาไว้ในโปลเดอร์ screenshot โดยที่ห้ามให้เคอร์เซอร์เมาส์บังส่วนใดส่วนนึงของกระดานดังภาพตัวอย่าง

![Test Board](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hfl6jm40zlepocp90m70.png)

**Step 4**
ทำการพิมพ์คำสั่ง
`py start.py boardname`
เพื่อให้โปรแกรม Solver รันหา Solution ของกระดานของเรา โดยถ้ารูปกระดานที่เราเซฟมาตั้งชื่อเอาไว้ว่า testBoard ให้พิมพ์คำสั่งดังนี้
`py start.py testBoard`

**Step 5**
หลังจากใส่คำสั่งทุกอย่างเรียบร้อย ให้รอโปรแกรมประมวลผลสักครู่
![Run1](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n088thwhubmr9x7l2zhg.png)![Run2](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/askvdluomd9so16bqjnb.png)

หลังจากโปรแกรมรันเสร็จสมบูรณ์ หน้าจอ Command Prompt จะขึ้นตำแหน่งของบล็อคที่เราต้องทุบในกระดาน หรือเราสามารถเข้าไปที่โฟลเดอร์ Solution จะพบกับขั้นตอนที่สามารถเคลียร์กระดานได้มากที่สุดแบบเป็นรูปภาพ

![RunFin](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/acmsahi3cyxc9l8rv7hr.png)

**Step 6**
เพียงแค่เรานำขั้นตอนตาม Solution ไปเล่น เพียงเท่านี้เราก็จะสามารถเคลียร์มินิเกมตัวนี้ได้อย่างง่ายดายแล้ว!


## Behind the scene
เรามาดูกันเถอะว่า โปรแกรม Solver ตัวนี้มันทำงานยังไงกันนะ
โดยเราจะขอพูดถึงแค่ Algorithm ที่เกี่ยวข้องในส่วนที่ใช้ในการหา solution เท่านั้น
ซึ่งสามารถอ่านโค้ดตัวเต็มได้[ที่นี่](https://github.com/DanLeEpicMan/UpdatedMonolithSolver/blob/main/THM.py)

ตัว Solver นี้มีหลักการที่คล้ายกับ 8-Puzzle game ที่มีการใช้ A* Algorithm เข้ามาช่วยการการหา solution
```
def Heuristics(state, height, width, exhaustive_coords):
    """The Heuristics of a state are given as a sum of the cleared and apparent clearable nodes in the state"""
    H1 = np.sum(Clearable(state, height, width, exhaustive_coords))
    H2 = height * width - np.count_nonzero(state)

    H = H1 + H2

    return H

def Cost(depth):
    """The cost has been defined as the depth (positive) to slightly favor solutions with more steps as it is likely that these will clear more of the board """

    G = depth
    return G
```
จากโค้ดในข้างต้นเราจะได้เห็นว่า Heuristics Functions ของโปรแกรมนี้คือจำนวนบล็อคที่ยังเหลืออยู่ในกระดาน โดยมี cost คือจำนวนครั้งที่เราเลือกทุบบล็อค

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


## สรุป
Solver ตัวนี้เขียนขึ้นมาเพื่อมินิเกม Treasure hunter! Monolith โดยใช้ภาษา python ซึ่งมีการนำ A* Algorithm เข้ามาช่วยในการหา solution ที่สามารถทุบบล็อคออกไปได้มากที่สุด แต่ถึงอยากนั้น การที่สามารถทุบบล็อคออกไปได้เยอะก็ไม่ได้การันตีว่าเราจะได้แรงค์ S ไปครอบครอง

แต่อย่างไรก็ตาม นี่ก็เป็นโปรแกรม Solver ที่ทำให้เราเข้าใกล้ความจริงที่จะได้รับ Achievement นี้มาครอบครองไปอีก 1 ก้าว!

---

Source:
[Danganronpa V3: Killing Harmony](https://store.steampowered.com/app/567640/Danganronpa_V3_Killing_Harmony/)
[UpdatedMonolithSolver](https://github.com/DanLeEpicMan/UpdatedMonolithSolver/tree/main)