Skip to content

0xdiymax/OutlawVoyage

 
 

Repository files navigation

Outlaw Voyage 逆境无赖

1. 项目简介

  • 游戏名称:Outlaw Voyage 逆境无赖
  • 项目背景:项目的灵感来源于《赌博默示录》(Kaiji),这是一部日本动漫。在这部作品中,有一个高度策略性的“石头剪刀布”的游戏。
  • 目标用户:在这部动漫中可以看到:囚徒困境/联合坐庄/抢庄/黑吃黑/预判敌人的预判等处境或策略,可以说堪称web3入门教材。我们相信在web3中喜欢这样智斗游戏的朋友,都是我们的目标用户。

2. 核心玩法

  • 游戏规则:简单的说,每位玩家起始有石头剪刀布3种手牌各4张,共12张牌,以及代表credit的星星3颗。在有限时间内,玩家通过使用卡牌来进行传统的石头剪刀布的游戏。通过每轮check-set-open的流程来判断输赢。赢方会获得输方下注的星星。
  • 游戏目标:玩家在有限时间内,用掉所有手牌,并持有3颗或更多星星。没有其他规则限定。
  • 特色机制

3. 技术架构

  • 区块链平台:首发Web3URL
  • 智能合约:hardhat
  • 前端技术栈:React, Next.js, Shadcn-ui, Tailwind CSS, Wagmi

4. 功能模块

  • 游戏界面:描述游戏的主要界面和用户交互设计。 - 待更新
  • 游戏流程:从玩家进入游戏到游戏结束的完整流程描述。 - 待更新
  • 奖励与激励DEMO中的奖池分配

5. 开发与测试

  • 开发进度:当前项目的开发进度和重要里程碑。- 更新完贴过来

  • 测试计划:- 待更新

6. 团队介绍

7. 未来计划


链接部分展开


----- 原作规则 -----

《赌博默示录》(Kaiji)是一部日本漫画,由福本伸行创作,后来被改编成动画和电影。在这部作品中,有一个非常著名的游戏叫做“石头剪刀布”(E-Card),这是一个高度策略性的游戏,规则如下:

基本规则:

  1. 卡牌种类:游戏使用三种卡牌,分别代表“石头”、“剪刀”和“布”。
  2. 卡牌数量:每种卡牌各有4张,总共12张。
  3. 游戏目标:玩家需要在有限的回合内赢得尽可能多的回合。
  4. 出牌方式:玩家在每个回合同时出示一张卡牌,决定使用“石头”、“剪刀”还是“布”。使用过的牌进入废牌堆,不可再次使用。
  5. 胜负判定:根据“石头剪刀布”的传统规则判定胜负。
  6. 公开信息:全场每种卡牌的余量和剩余时间。

特殊规则:

  1. 信用点:玩家在游戏开始时3个信用点(Credits),每个回合的胜负会影响信用点的增减。
  2. 加倍卡:游戏中还有一种特殊的“加倍卡”(Doubler),使用这张卡可以在一个回合中将胜负的信用点翻倍。
  3. 最终胜利:信用点大于3,且手牌必须全部用完。
  4. 允许交易:卡牌和星星可以私下进行买卖和交换。

游戏流程:

  1. 准备阶段:玩家检查自己的卡牌,决定初始策略。
  2. 出牌阶段:玩家在每个回合同时出示一张卡牌。
  3. 判定阶段:根据出牌结果判定胜负,并计算信用点的增减。
  4. 策略调整:玩家根据前一回合的结果调整策略,准备下一回合的出牌。
  5. 结束阶段:当所有回合结束后,手牌数量为0且信用点大于3的玩家们完成了游戏任务。

----- 初稿思路 -----

  1. 为了实现游戏中玩家的牌不会在合约中暴露,所有牌采取线下本地存储,链上验证。
  2. 为了实现游戏中玩家可以自由交易卡牌和星星,添加telegram id,使得玩家可以私聊并交易。
  3. 为了使得作弊多开的成本大于收益,设定入场金的部分需要交给庄家,或者滚入下场牌局。
  4. 为了隐藏玩家手牌,采取线下生成文件+hash验证的方式
  5. 开局记录玩家的所有手牌hash,并登记归属,结尾的时候再验证玩家的牌是(4石4剪4布)
  6. 交换牌需要通过交易所确认,登记归属的交换。
  7. 如果有人骗牌,可能出现双花,需要验证每个hash只被用了一次。用过之后牌就无效了。
  8. 玩家列表只有昵称和TG ID,星星数量是点开玩家才能看到的。这是为了避免星最多和星最少的玩家成为活靶子。

----- DEMO版简化说明 -----

  1. demo版只有1艘船(1个船班)
  2. demo版的这艘船不用计时开始,只需要写一个开始游戏的按钮
  3. demo版的换牌全都在tg上,链下传输,可防止偷看
    • 未来应升级ethStorage的pocket,类似每个玩家有独立的w3drive
  4. demo版的明文暂定txt文件,卡牌类型+随机码
    • 升级pocket之后不需要时间戳,demo版只有一艘船,也暂时不加时间戳
  5. demo版的换牌交易页面暂时只考虑1张牌换1张牌的情况
  6. demo版暂定【交易页面】无法防止玩家骗牌(说换剪刀,实际传锤子)
    • 这个功能待定,实际情况应该确实是可以骗牌的
    • 实际升级玩家口袋pocket之后,这个问题也不复存在了
  7. demo版暂时只设单牌互换
    • 暂时不设星星与牌的交换/交易
    • 暂时不设关于星星的交换/交易

----- DEMO中的奖池分配 -----

30%庄家奖池,70%赢家奖池。赢家奖池按星星数量比例。庄家奖池先累计后期再定。赢家定义:只有星星大于等于三颗,且无手牌的玩家满足赢家定义。任何不满足的玩家的星星作废。

*举例:*

假如在一个船班上有100个玩家参与游戏,入场金10元。

- 总奖池1000元
- 庄家奖池300元
- 赢家奖池700元
- 全场星星总数300颗

假如有40个玩家满足赢家定义,他们总共有200颗星星,另外100颗星星随输家作废。

每个赢家所得=赢家拥有的星星数/200*赢家奖池的700元

----- 升级建议1:玩家口袋pocket -----

缘起:

目前版本的设计是玩家的牌和星星在玩家本地磁盘储存并用HASH验证

这样做的弊端是每回合游戏需要先上传HASH,再上传TXT,形成两次交互,体验不好

同时所有牌在本地,玩家容易混淆自己用过的牌和没用过的牌

且在游戏结尾无法保证所有玩家都愿意把手中剩余的牌TXT上传给游戏,会产生流局

方案:

可能会需要ZK等知识技术才能解决


----- 升级建议2:船只 -----

船只建议

暂定三艘船:新手号/希望号/复活号

暂定船班等大家玩几把之后再决定船班/游戏时长怎么定

新手号:

  • 更低入场金
  • 更短游戏时间
  • 可以加入instruction
  • 每轮发船,编号递增1

希望号:

  • 开司所在的船
  • 适合熟手
  • 每轮发船,编号递增1

复活号:

  • 复活号成立条件
    • 需统计流局奖池,前期当流局奖池金额大于历史奖池时开启复活号
    • 未来升级后应不存在流局,可考虑从庄家奖池中取固定金额回馈输家
  • 可选入围标准
    • 总胜率太低
    • 总损失入场金太大
    • 犯规出局次数小于2
    • 满足条件的玩家可进入复活号
  • 复活号不需要另外缴纳入场金,可以瓜分流局入场金奖池或部分庄家奖池

----- 升级建议3:上链 -----

目前暂定:

  • 1%的总奖池进入DEX流动池,增加深度
    • 关于比例的建议:基数小的时候比例大,等基数大了再比例小
  • 29%的总奖池为庄家奖池
  • 70%的总奖池为赢家奖池
    • 赢家奖池按星星占比分配给赢家
  • 庄家奖池的钱总是质押3个月,利息归项目方,每3个月开启复活号
    • 此处以3个月为例,随实际情况缩短
    • 可能太复杂了,待定
  • 庄家奖池的70%进入复活号奖池
  • 庄家奖池的20%进入希望号加码船班
  • 庄家奖池的10%进入新手号加码船班

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 70.1%
  • Solidity 28.4%
  • CSS 1.3%
  • JavaScript 0.2%