锈湖桌游开发日志

  • 闲来无事发现邮箱里的桌游文件
  • 然后就有了做成插件的想法

rusty-lake-lizard

其实已经写了一部分代码了

2 个赞

这个桌游的场景、道具类的东西还蛮多,感觉开发会有很大的难度

听说开发要会画流程图,哥们就是不会画,就是玩 :laughing:

总之需要做的东西很多

要做的东西
  • 游戏房间系统

    • 同一个房间id的qq号进度要相同
      • 当前位置
      • 可以前往的房间
      • 拥有的道具
    • 同一个qq不能重复加入、创建房间
  • 地图移动

    • 目前可以前往的房间
      • 已经探索过的
      • 某个进度后会封锁房间
    • 当前位置
  • 搜查房间

    • 获取道具
    • 使用道具
    • 道具的唯一性
      • 部分道具使用后消失
      • 重复搜查只有一次有效
  • 查看道具

    • 详细信息
      • 图文
      • 提示道具间操作
    • 对着道具使用别的道具
  • 解谜

    • 对应某些场景的解锁
      • 隐藏房间
      • 可以通过探索的文字给予提示
    • 某些调查结果改变
      • 无事发生→可以探索
    • 产生道具
  • 剧情

    • 通过特定道具判断剧情进度
      • 钥匙
      • 谜题
      • 房间解锁
    • 在特定剧情点后无法回头
  • 待定

    • 当前进度下给予一定提示
      • 限定提示次数

希望能做完

1 个赞

目前已经完成的

数据库

image

直接拿时间戳当id还别有一番风味

游戏内房间搭建

image

感觉puzzlesolved没啥用,后面估计得改

道具描述

image

游戏房间的创建、加入、删除



移动

image

探索

image

物品

没想到吧其实已经写了蛮多了

1 个赞

为了剧情进度和互动的解锁,我又在数据库添加了新的字段,把没用的给删掉

数据库代码(省去了一部分判断)
  const existingPlayer = await ctx.database.get('rusty_lake_players', { userId: session.userId });

  await session.send('请输入新房间的名称:');

  const gameName = await session.prompt(10000);
  const gameId = `game-${Date.now()}`;

  const players = await ctx.database.get('rusty_lake_players', {});
  const maxId = players.reduce((max, player) => Math.max(max, parseInt(player.id, 10)), 0);
  const id = maxId + 1;

  await ctx.database.create('rusty_lake_games', {
    id: id.toString(),
    gameId: gameId,
    gameName,
    currentRoom: 'bedroom',
    inventory: [],
    visitedRooms: ['bedroom'],
    doneTasks: [],
  });

  await ctx.database.upsert('rusty_lake_players', [
    {
      id: id.toString(),
      gameId: gameId,
      userId: session.userId,
    },
  ]);

现在的数据库应该就是最后的样子了


除此之外也封装了一些用于增改数据库的函数,主要针对inventory和doneTasks,一个是拥有的物品,一个是达成的剧情点

然后就是无尽的if地狱

简单举例,其中一个房间的其中一个探索点

前路漫漫啊~要是能请我喝瓶可乐就好了~

1 个赞

好多 if 哦

1 个赞

给我用else if口牙

1 个赞