# MUD开发过程总结

By [Yooma](https://paragraph.com/@yooma) · 2024-05-11

---

开发的游戏：
------

[https://mud.pixelaw.xyz/](https://mud.pixelaw.xyz/)

*   **PixeLAW Core**
    
*   paint、snake、2048、15puzzle、pop star
    

MUD的优点
------

在开发这些游戏中体验到的MUD的优点（以下仅对我们所使用到的方面进行评价，可能并不全面）：

*   **数据处理和同步的便利性**  
    在构建全链游戏时，智能合约的编写只是其中的一部分。然而，处理前端数据获取和页面渲染等任务却并非易事。传统的方法中，数据结构由合约定义，并存储在链上，而前端则需要通过RPC获取并处理这些数据，这既效率低下又复杂。然而，MUD框架提供了大量开箱即用的功能，利用标准化存储协议构建了熟悉的数据模型。这样它提供了一个索引器，使得前端程序可以轻松地获取链上数据并保持与链上数据的同步。这使得开发变得更加便捷和高效。
    
*   **减少开发成本和学习曲线**  
    另一个MUD框架的优点在于，如果不使用它，构建全链游戏将会面临巨大的挑战。以 pixeLAW 为例，从零开始构建前端、后端以及二者之间的交互，还需考虑合约中的访问权限控制和数据处理等方面，这将需要大量精力和时间。前端部分，本身对于前端不熟练的我，需要掌握如何构建页面、如何处理数据索引以及如何与智能合约进行交互等技能，这些都是需要付出学习成本的。而使用MUD框架，我只需专注于游戏逻辑功能的开发，极大地减少了开发成本和学习曲线。我可以专心且高效地发挥自己的专长，从而开发出一个完整的全链应用。
    
*   **自由选择前端框架**  
    最后，MUD框架的另一个优势在于，它并不限制我们在前端开发中使用的框架。根据项目需求和个人偏好，我们可以自由选择MUD所支持的优秀框架，如React或Vue等，来进行页面渲染，从而满足项目的需求。
    

开发过程遇到的限制
---------

**Solidity语言的限制**

在开发2048、15puzzle以及pop star等游戏时，我们发现需要使用数组来实现游戏的逻辑。然而，考虑到gas的消耗以及数据的储存，使用MUD框架后，其中的store功能会对数据进行存储，使得我们不再需要在合约中定义storage类型的数组来存放数据。尽管如此，在处理游戏逻辑时，我们仍然需要使用一些临时的数组变量，这些变量通常被定义为memory类型。然而，Solidity语言中，如果一个数组被定义为memory类型，则无法使用push操作向其添加数据。此外，由于游戏逻辑中某个场景无法确定数组的固定长度，因此我们不得不使用动态长度数组，这增加了开发的复杂度。

**对于MUD：**

在开发pop star过程中，我们计划使用二维数组。当我们获取到用户点击的位置后(x,y)，可以直接从二维数组中获取相应位置的值进行处理。然而，MUD框架的store配置并未包含对二维数组等复杂数据结构的支持，如struct、string\[\]和bytes\[\]等。因此，在开发过程中，我们不得不额外处理这些情况。尽管如此，这些限制对我们的开发影响并不是绝对巨大的。MUD框架提供的store功能以及前端的索引器等开箱即用的功能，仍然为我们的开发速度和成本带来了积极的影响。

[https://mud.dev/store/data-model#field-types](https://mud.dev/store/data-model#field-types)

---

*Originally published on [Yooma](https://paragraph.com/@yooma/mud)*
