非图博弈会话分析
nonogram-analysis的Python项目详细描述
非图分析
nonogram是一个益智游戏,在这个游戏中,网格中的单元格必须根据网格边上的数字着色或留空,以显示隐藏的图片。在
nongram Analysis是一个Python库,用于为完成非程序的玩家打分。在
非图线索
非图的线索表示非图的每一列和每一行用一个或多个空格隔开的一列或一行的标记组的长度。在
例如:
║ | 1 | | 3 | 1 | | | 2 ║ ║ 6 | 3 | 6 | 1 | 1 | 1 | 3 | 2 ║ ║ 1 | 1 | 1 | 2 | 1 | 6 | 1 | 1 ║ ========+===+===+===+===+===+===+===+===+ 6 ║ X | X | X | X | X | X | | ║ --------+---+---+---+---+---+---+---+---+ 1 2 1 ║ X | | X | X | | | | X ║ --------+---+---+---+---+---+---+---+---+ 8 ║ X | X | X | X | X | X | X | X ║ --------+---+---+---+---+---+---+---+---+ 3 2 ║ X | X | X | | | X | X | ║ --------+---+---+---+---+---+---+---+---+ 8 ║ X | X | X | X | X | X | X | X ║ --------+---+---+---+---+---+---+---+---+ 1 1 1 1 ║ X | | X | | | X | | X ║ --------+---+---+---+---+---+---+---+---+ 1 2 ║ | | | X | | X | X | ║ --------+---+---+---+---+---+---+---+---+ 4 1 1 ║ X | X | X | X | | X | | X ║ ========+===+===+===+===+===+===+===+===+
我们使用Backus–Naur Form (BNF)定义以下语言来声明非程序的线索:
^{pr2}$以上非图的线索是:
6-1,1-3-1,6-1,3-1-2,1-1-1,1-6,3-1,2-2-1|6,1-2-1,8,3-2,8,1-1-1-1,1-2,4-1-1
nongram Analysis支持类NonogramClues
来构建非程序的线索。在
例如:
>>>fromnonogram.analysisimportNonogramClues>>>nonogram_clues=NonogramClues.from_string('1-1,1-1,2|2,1,3')
非程序动作
我们定义以下Backus–Naur Form(BNF)来描述玩家在非程序单元上执行的操作的语法:
action ::= action_type "-" cell_x "-" cell_y "-" action_time action_time ::= integer action_type ::= "F" | "M" | "C" cell_x ::= integer cell_y ::= integer
项cell_x
和cell_y
表示非图矩阵中单元的位置。非图的原点(0, 0)
位于矩阵的最左上方。在
术语action_time
表示UNIX timestamp的一个变体,即自Unix纪元(1970年1月1日00:00:00 UTC)以来经过的毫秒数减去闰秒。在
术语action_type
表示玩家可能采取的不同行动:
F
:填充单元格M
:标记单元格以指示它是空的C
:清除单元格
例如:
F-5-3-1586485456389
表示填充非图的单元格(5, 3)
的操作,由玩家在2020年4月10日星期五上午02:24:16.389执行:
║ | | | | | | | ==+===+===+===+===+===+===+===+... ║ | | | | | | | --+---+---+---+---+---+---+---+... ║ | | | | | | | --+---+---+---+---+---+---+---+... ║ | | | | | | | --+---+---+---+---+---+---+---+... ║ | | | | | X | | --+---+---+---+---+---+---+---+... : : : : : : : : . . . . . . . .
nongram Analysis支持类NonogramClues
来构建玩家在非程序上执行的操作。在
例如:
>>>fromnonogram.analysisimportNonogramAction>>>nonogram_actions=NonogramAction.from_strings('F-0-0-1593160278088,F-0-1-1593160279070,M-0-1-1593160279246,F-0-2-1593160281156,F-1-2-1593160281839,F-2-2-1593160282492,F-1-0-1593160284516,F-1-1-1593160285415,M-1-1-1593160285586,F-2-1-1593160288354')
无图游戏会话
nongram Analysis支持类NonogramSession
为试图求解非图的玩家构建游戏会话。此类的构造函数接受以下参数:
user
:一个对象User
,表示播放非程序的玩家。在start_time
:对象datetime.datetime
,表示非程序游戏会话开始的时间。在clues
:对象列表NonogramClues
对应于给玩家解决的非图的线索。在actions
:表示播放器执行的操作的对象列表NonogramActions
。在
例如:
>>>importdatetime>>>fromnonogram.analysisimportNonogramSession>>>nonogram_session=NonogramSession(>>>...None,>>>...datetime.datetime(2020,6,26,8,31,14,729000,tzinfo=datetime.timezone.utc),>>>...nonogram_clues,>>>...nonogram_actions)>>>print(str(nonogram_session))XX...XXXX>>>nonogram_session.is_solvedTrue>>>calculate_nonogram_score(nonogram_session)>>>0.5152905198776758
- 项目
标签: