Skip to content

A party game designed for rhythm game player

Notifications You must be signed in to change notification settings

Gausbon/bet_on_me

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

别押我 (Bet On Me)

1 游戏简介

这是一款什么游戏?

你说得对,但是“别押我”是一款由北航BUAA澄韵音游社自主研发的一款冒险游戏。游戏发生在一群社恐玩家组成的幻想世界,在这里被玩家下注选中的高玩将被授予「怨种」,引导自爆之力。你将扮演一位名为「赌狗」的神秘角色,在自由地被音游暴打的过程中邂逅心机max、运气爆棚的音游巨佬,和他们一起梭哈积分,极限翻盘的同时,逐步发掘「all in」的真相。

正经版:“别押我”是一款由北航BUAA澄韵音游社开发的一款音游玩家线下(线上也行)面基策略游戏。一局游戏游玩时长约30min~1h。

在游戏中,所有玩家需一同游玩指定课题曲,在音游中取得更高的分数以获得更多的积分奖励。与此同时,玩家还可以观察场上的局势变化,在适当的时机下注大牛玩家以赢得更高的积分。

游玩时需要什么准备?

需要准备不会友尽的音游朋友(配置要求极高),给设备充好电,擦擦手,撒点痱子粉。准备好在打不到EX的时候断网。

游戏管理员需要能运行python的环境(当然不介意的话手算也可以)

注意:目前该游戏仅支持arcaea与phigros的课题曲抽取

2 游戏规则

由游戏管理员将有意向的玩家在程序中进行注册(玩家数量至少为2,6~10人效果最佳)。以下用n代表玩家数量

游戏开始时,由玩家集体决定游戏的回合数(5回合及以上最佳)。在完成指定的回合数后,游戏结束,积分最高者获得胜利。

由游戏管理员进行游戏初始化,详情请查看3.脚本使用

每个玩家将会获得初始值为0的积分。

每个回合分为事件抽取、课题抽取、下注、游玩、游玩结算、下注结算、结束阶段,共七个阶段。

2.1 事件抽取阶段

由游戏管理员抽取随机事件,若无特殊说明,事件仅在本回合内生效。随机事件详情请查看4.随机事件

由于事件为即时结算,因此事件不支持重新抽取。

2.2 课题抽取阶段

由游戏管理员随机抽取一个课题曲目,并让所有玩家确认是否能游玩该课题曲目,确认完毕后所有玩家游玩该曲目。

例如:游戏管理员抽到了dropdead [Present 9],接下来的阶段里所有玩家就要打开Arcaea,选好自己心仪的角色,开始摔死游玩指定曲目。

如果有玩家尚未解锁该曲目,游戏管理员可以重新抽取一个课题。

2.3 下注阶段

所有玩家在此阶段选择两种行为中的一种,并告诉游戏管理员:

  1. 下注,预测在游玩结算阶段后总分最高的玩家,下注分数范围为1至n的闭区间。在积分为负数的情况下也可以进行下注。请仔细阅读游玩结算阶段流程内容

注意,不可以对自己进行下注

  1. 不下注,需要向管理员说明不下注,否则会出现死锁。

玩家在下注阶段的行为不公开

2.4 游玩阶段

所有玩家游玩指定的课题并将成绩仅告诉管理员。(线下面基怎么办?link play?那就考验人性了

2.5 游玩结算阶段

玩家的分数公开,游戏管理员对课题游玩的成绩进行结算。本阶段的排名遵循以下规则:

  1. 当玩家A的课题成绩高于玩家B时,A的排名高于B;
  2. 当玩家A的课题成绩等于玩家B时,若A的积分低于B,则A的排名高于B;
  3. 若1与2皆不满足,则按照玩家id字典序排名(概率极小)

对于倒数第$k$名的玩家,其得分为$\max\left{0, k-\left\lfloor n/2\right\rfloor \right}$。例如当有7名玩家时,将玩家按照升序排名,依次获得0, 0, 0, 1, 2, 3, 4分

此外,每个玩家在下注阶段每被下注一次,在本阶段扣1分

例如:玩家A被玩家B下注了2分,被玩家C下注了1分,此时玩家A被下注了两,因此在此时扣掉两分。

2.6 下注结算阶段

玩家的下注结果公开,游戏管理员对下注的结果进行结算。

若玩家A在下注阶段对玩家B下注$x$分,当玩家B是此时总分最高的玩家之一时,玩家A获得$x$分;否则玩家A失去$x$分。

若玩家A未进行下注,则玩家A的积分在本阶段不变。

2.7 结束阶段

可能有随机事件在此时进行结算。

结束阶段后,若该回合不为最后一回合,则开始新的回合,否则结束游戏。

3 脚本使用

脚本在python3上进行开发,需要numpy库的支持。

3.1 游戏准备

以Arcaea为例,可在bet_game/init_arc.py下进行游戏的初始化。首先查看regular_quest

regular_quests = [
    '7', 1.0,
    '8', 2.0,
    ...
    'ban', 'dropdead',
    'ban', 'fallensquare',
    ...
]

regular_quest为一个偶数长度的列表,每两个变量代表一个请求,游戏管理员可根据玩家需要自定义请求。请求分为两类:

  1. 权重请求:设置难度所代表的权重(默认为1.0)。例如'8', 2.0,代表等级8的权重设为2,在随机生成中有更高概率出现

  2. 禁曲请求:禁掉指定id的课题曲。例如'ban', 'dropdead',则代表禁止dropdead出现在课题曲曲池当中。

除了上面两种请求外,管理员也可以通过调用game.enable()函数指定课题曲的曲包范围和难度范围。例如:

game.enable('core')     # 启用Eternal Core曲包
game.enable('rei')      # 启用Luminous Sky曲包
game.enable('ftr')      # 启用FTR难度

默认所有的曲包和难度都不启用。若需要启用的曲包较多,也可以调用game.enable_all()game.disable()使用,例如:

game.enable_all(en_package=True, en_difficulties=True)
# en_package为真表示启用所有曲包, en_difficulties为真表示启用所有难度
# 此时所有曲包和难度都已启用
game.disable('extend')  # 禁用World Extend曲包
game.disable('byd')     # 禁用BYD难度

3.2 游戏开始

在命令行中输入python进入python shell

如游玩arcaea课题曲,在命令行中输入from init_arc import *

如游玩phigros课题曲,在命令行中输入from init_phi import *

在命令行中输入add(id)即可添加玩家。例如添加玩家gausbon,则在命令行中输入add('gausbon')。玩家id长度不得超过15

游戏默认回合数为5,若需修改,则在命令行中输入reset(round)进行修改,例如只需要3回合,则输入reset(3)

将所有玩家添加完成后,输入start()开始游戏

3.2.1 事件抽取阶段

在命令行中输入event()即可抽取事件。例如:

>>> event()
-----------------------------------------------
Event: risk aversion
Players who lose bets will not be deducted points
-----------------------------------------------
Plaese start to draw the quest

事件可能会即时生效,因此不支持事件重新抽取

具体课题内容详见4.随机事件

3.2.2 课题抽取阶段

在命令行中输入quest()即可抽取事件。例如:

>>> quest()
-----------------------------------------------
turn: 1/5
The quest is conflict (siromaru + cranky) [Future 10]. 
Players are betting.

课题可以重新抽取,重复调用即可

当所有选手确认课题可以游玩时,使用verify()进行确认

3.2.3 下注阶段

在命令行中输入bet(id1, id2, stake)选择下注,输入bet(id1, None)选择不下注。

>>> bet('p11111', None) # p11111选择不下注
>>> bet('p22222', 'p11111', 2) # p22222对p11111下注2分

为节省游戏管理员工作量,玩家id查找支持前缀查找。

例如游戏内有p11111p22222两个玩家,则可以输入p1代表p11111玩家,因为所有玩家中仅p11111的id前缀为p1。但不可以输入p代表p11111玩家,因为两个玩家id的前缀都为p

>>> bet('p2', 'p1', 2) # p22222对p11111下注2分,前缀查找

在所有选手完成下注(或不下注)后,会弹出All players' bet are set的提示信息,指导游戏管理员进行下一个阶段。

>>> bet('p1',None)
>>> bet('p2',None)
>>> bet('p3','p1',1)
All players' bet are set

同一个玩家的下注操作可以重复进行,后进行的操作会覆盖先进行的操作

>>> bet('p1','p2',1) # p1对2下注2分
>>> bet('p1',None)   # p1不下注,覆盖上一条操作此时上一条下注命令作废

3.2.4 游玩阶段

在命令行中输入play(id, score)以下方式录入选手的游玩成绩。游玩阶段玩家id也支持前缀查找,见3.2.3

>>> play('p1', 9950000) # p111111的分数为9950000,前缀查找

在所有选手游玩结束后,会弹出All players' playing score are set的提示信息,指导游戏管理员进行下一个阶段。

>>> play('p1',0)
>>> play('p2',9950000)
>>> play('p3',9980000)
All players' playing score are set

同一个玩家的游玩操作可以重复进行,后进行的操作会覆盖先进行的操作

>>> play('p1', 9950000) # p111111的分数为9950000,前缀查找
>>> play('p1', 9970000) # p111111的分数为9970000,覆盖上一条操作

3.2.5 游玩、下注结算阶段

在命令行中输入result(),依次进行游玩、下注结算阶段。

>>> result()
-----------------------------------------------
turn: 1/5
Evaluating scores of SOUNDWiTCH (HATE) [Future 9+].
p1 (0+2-1=1) (result: 9990000) not betting
p2 (0+1=1) (result: 9980000) bets 2 point(s) on p3
p4 (0+0=0) (result: 9970000) not betting
p3 (0+0-1=-1) (result: 0) bets 1 point(s) on p1
-----------------------------------------------
turn: 1/5
Evaluating bet results.
p1 (1)
p3 (0)
p4 (0)
p2 (-1)

游玩结算阶段玩家信息展示格式为id(分数) (result: 游玩分数) 下注情况

例如p1 (0+2-1=1) (result: 9990000) not betting表示p1的玩家信息。(0+2-1)中:

  • 0代表结算前的积分

  • +2代表p1在游玩阶段排名第一,获得2分

  • -1代表p1被下注了一次(被p3下注),扣掉1分

下注结算阶段后,按照总分进行排名。

3.3 游戏结束

当所有回合结束时,程序会进行提醒并输出获胜者id

The game is over. Congrats to the winner:p1!

若想保留玩家重新开始,可以在命令行输入reset(round)重新进行游戏,也可以通过add(id)remove(id)进行玩家的增减。

4 随机事件

为增添游戏的随机性和趣味性,游戏中设计了多种随机事件,尝试着在不同的事件发生时采用不同的策略吧!

  • 绝对零分:玩家分数若为负数,则立刻置零

  • 福利时间:下注结算阶段,下注成功的玩家可以获得双倍奖励

  • 风险规避:下注结算阶段,下注失败的玩家不会扣除积分

  • 赢家通吃:游玩结算阶段,仅第一名玩家可以获得$\lceil n/2\rceil$积分,其余不获得积分

  • 正态分布:游玩结算阶段,排名为中位数玩家获得$\lfloor n/2\rfloor$积分,此后每向外一名获得积分数量减少1

  • 精准扶贫:所有分数最低的玩家立刻获得n积分

  • 不必犹豫:游玩结算阶段,成为下注目标的玩家不会被扣除积分

  • 交通事故:结束阶段,若x位玩家同时下注到了同一个玩家,则此x位玩家每人扣x-1分

  • 人气选手:结束阶段,被下注次数最多的玩家获得2*x分,x为该玩家的被下注次数

  • 下次一定:下个回合的事件抽取阶段抽取两个事件(若有冲突,则后一事件覆盖前一事件)

  • 你先别急:结束阶段,所有分数最低的玩家获得n积分

  • 跟着歌唱:游玩阶段,玩家需进行唱打

  • 无事发生:什么也没有发生

同时,对于不同的音乐游戏也有不同的课题。

arcaea课题:

  • 越慢越水:游玩阶段,玩家需在2.0以下流速进行游玩

  • 极速时刻:游玩阶段,玩家需使用最高速进行游玩

phigros课题:

  • 天翻地覆:游玩阶段,玩家需旋转设备180°进行游玩

  • 精准打击:游玩阶段,玩家需要上传游玩的accuracy而非分数

About

A party game designed for rhythm game player

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%