构建 Plumbi:与 Reddit Devvit 一起玩的有趣益智游戏

您是否曾想过在 Reddit 中发挥您的创造力?借助 Reddit 的 **Devvit 框架**,您可以直接在平台内为用户构建交互式体验。在这篇博客中,我将分享我如何创建 Plumbi,这是一款简单但令人上瘾的益智游戏,玩家可以连接管道部件让水流动。

Plumbi 将解谜的乐趣与 Reddit 的社区驱动生态系统相结合,使用 Devvit 和 Redis 进行数据存储,提供无缝的游戏体验。

Plumbi 是什么?

Plumbi 是一款基于关卡的益智游戏,用户必须旋转并对齐网格上的管道部件以创建连续的水路。

Plumbi game on reddit

该游戏会跟踪进度、得分和完成时间,让用户在排行榜上相互竞争。它轻量级、易于使用,并且旨在直接集成到 Reddit 帖子和评论中。

点击这里玩游戏 Plumbi 游戏

为什么选择 Devvit?

Reddit 的 Devvit 框架允许开发人员创建在 Reddit 平台内无缝运行的应用程序和交互式面板。对于 Plumbi,Devvit 提供了:

**面板支持**:创建游戏界面。

用户交互:处理诸如旋转管件之类的输入。

**无缝集成**:使游戏在 Reddit 帖子中可用,让用户无需离开平台即可参与。

我如何建造 Plumbi

**1. 设置 Devvit 环境**

为了开始使用 Devvit,我按照官方文档设置了我的开发环境:

安装了 Devvit CLI。

`npm install -g devvit`

2.游戏逻辑

Plumbi 的核心是管理管道网格。下面是我实现它的方法:

**网格表示:**游戏网格是一个二维数组,其中每个单元格代表一个管道件,具有类型(直、弯)和方向等属性。

`const [gameBoard,setGameBoard] = useState(() => {

返回初始化GameBoard(currentLevelIndex);

});`

**管道旋转**:每根管道可以以 90 度为增量旋转。单击某根管道即可触发旋转功能:

`

导出函数 rotatePipe(pipeType:EmptyPipe):EmptyPipe {

开关(管道类型){

案例EmptyPipe ['═']:

返回 EmptyPipe['║'];

案例EmptyPipe ['║']:

返回EmptyPipe['═'];

案例EmptyPipe ['╔']:

返回 EmptyPipe['╗'];

案例EmptyPipe ['╗']:

返回 EmptyPipe['╝'];

案例EmptyPipe ['╚']:

返回 EmptyPipe['╔'];

案例EmptyPipe ['╝']:

返回 EmptyPipe['╚'];

案例EmptyPipe ['╠']:

返回 EmptyPipe['╦'];

案例EmptyPipe ['╣']:

返回 EmptyPipe['╩'];

案例EmptyPipe ['╦']:

返回 EmptyPipe['╣'];

案例EmptyPipe ['╩']:

返回 EmptyPipe['╠'];

默认:

返回管道类型;//对于不旋转的管道(如'╬')

}

}

`

**路径验证**:一个简单的遍历算法检查水是否可以从起点流到终点。

`

const checkForPath = (map: string[], x: number, y: number, direction: string, visited: boolean[][]): boolean => {

如果 (y < 0 || y >= map.length || x < 0 || x >= map[y].length) 返回 false;

如果 (visited[y][x]) 返回 false ;

访问过[y][x] = true;

const char = map[y][x];
  if (char === 'S' || char === 'F') return true;
  if (char in DirectionPipe) {
    if (char === direction) {
      return checkForPath(map, x + (direction === '═' ? 1 : 0), y + (direction === '║' ? 1 : 0), direction, visited);
    }
    return false;
  }
  return false;
};`

**3. 使用 Redis 存储游戏状态**

为了管理玩家数据、级别和排行榜,我使用了 Redis,因为它速度快、简单易用:

**玩家进度**:存储每个玩家的当前级别和游戏状态。

**排行榜**:使用 Redis 排序集根据完成时间对玩家进行排名。

`异步函数 awardPoints(上下文:Devvit.Context,用户名:字符串,levelIndex:数字){

const pointsForLevel = (levelIndex + 1) * 10; // 级别越高,奖励越多积分

等待 context.redis.zIncrBy('leaderboard',用户名,pointsForLevel);

返回 pointsForLevel;

}`

`

结论

使用 Reddit Devvit 构建 Plumbi 是一次有益的经历,结合了创造力和技术挑战。通过利用 Devvit 的功能和 Redis 的速度,我能够为 Reddit 用户创建一款引人入胜的游戏。

如果您是一名开发人员,希望将自己的想法带到 Reddit,请尝试一下 Devvit——它是一个构建社区驱动应用程序的绝佳平台!