コード例 #1
0
ファイル: gang_rule.py プロジェクト: zhaozw/mjserver
def testLuosihu():
    tileMgr = MTableTileFactory.getTableTileMgr(3, MPlayMode.LUOSIHU,
                                                MRunMode.CONSOLE)
    player = MPlayer('name', 0, 10000, 0)
    # [0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0]
    player.actionBegin([5, 6, 8, 18, 18, 18, 35, 18])
    player.actionPeng(18, [18, 18, 18], 2)

    gangRuler = MGangRule()
    gangRuler.setTableTileMgr(tileMgr)

    tiles = player.copyTiles()
    result = gangRuler.hasGang(tiles, 5, MTableState.TABLE_STATE_NEXT)
    print result
コード例 #2
0
ファイル: gang_rule.py プロジェクト: zhaozw/freetime5
def testHaerbin():
    tileMgr = MTableTileFactory.getTableTileMgr(4, MPlayMode.HAERBIN,
                                                MRunMode.CONSOLE)
    player = MPlayer('name', 0, 10000, 0)
    #pengObj = MPlayerTilePeng(7, [7, 7, 21], 10)
    #player.pengTiles.append(pengObj)
    # [0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0]
    player.actionBegin([5, 6, 8, 18, 18, 18, 35, 18])
    player.actionPeng(18, [18, 18, 18], 2)

    gangRuler = MGangRule()
    gangRuler.setTableTileMgr(tileMgr)

    tiles = player.copyTiles()
    result = gangRuler.hasGang(tiles, 5, MTableState.TABLE_STATE_NEXT,
                               {"seatId": player.curSeatId})
    print result
コード例 #3
0
def testDuoWinsProcessor():
    """
    测试一炮多响时,多个和牌的状态更新
    状态:
        0号位出牌,1号位2号位两个人可和牌,能一炮多响

    操作:
        2号位先和牌
        1号位再和牌

    预期:
        2号位胡牌结果先不确认
        1号位胡牌的和牌结果确认
        1/2号位同时胡牌
    """
    from majiang2.player.player import MPlayer
    from majiang2.table_tile.table_tile_factory import MTableTileFactory
    from majiang2.ai.play_mode import MPlayMode
    from majiang2.table.run_mode import MRunMode

    dp = MQiangGangHuProcessor(4)
    player3 = MPlayer('3', 1, 10003, 0)
    player3.setSeatId(3)
    player2 = MPlayer('2', 1, 10002, 0)
    player2.setSeatId(2)
    player1 = MPlayer('1', 1, 10001, 0)
    player1.setSeatId(1)
    player0 = MPlayer('0', 1, 10000, 0)
    player0.setSeatId(0)

    dp.players.append(player0)
    dp.players.append(player1)
    dp.players.append(player2)
    dp.players.append(player3)

    tableTileMgr = MTableTileFactory.getTableTileMgr(4, MPlayMode.PINGDU258,
                                                     MRunMode.CONSOLE)
    dp.setTableTileMgr(tableTileMgr)

    exInfoWin1 = MTableStateExtendInfo()
    winInfo1 = {'tile': 9, 'qiangGang': 1, 'gangSeatId': 0}
    exInfoWin1.appendInfo(MTableState.TABLE_STATE_QIANGGANG, winInfo1)
    dp.initProcessor(19, 1, MTableState.TABLE_STATE_QIANGGANG, exInfoWin1, 9)

    exInfoWin2 = MTableStateExtendInfo()
    winInfo2 = {'tile': 9, 'qiangGang': 1, 'gangSeatId': 0}
    exInfoWin2.appendInfo(MTableState.TABLE_STATE_QIANGGANG, winInfo2)
    dp.initProcessor(19, 2, MTableState.TABLE_STATE_QIANGGANG, exInfoWin2, 9)

    result2 = dp.updateProcessor(19, 2, MTableState.TABLE_STATE_QIANGGANG, 9,
                                 None)
    print 'result2:', result2
    print dp.processors

    autoSeatId = dp.hasAutoDecideAction(0, -1)
    print 'autoSeatId2:', autoSeatId

    result1 = dp.updateProcessor(19, 1, MTableState.TABLE_STATE_QIANGGANG, 9,
                                 None)
    print 'result1:', result1

    autoSeatId = dp.hasAutoDecideAction(0, -1)
    print 'autoSeatId1:', autoSeatId

    wins = [1, 2]
    result3 = dp.updateDuoHu(19, wins, MTableState.TABLE_STATE_QIANGGANG)
    print 'result3:', result3

    print dp.processors
コード例 #4
0
def testNormalUpdateProcessor():
    """
    测试吃碰杠的状态更新
    状态:
        同时可吃可碰
    操作:
        吃先同意
        碰后取消
    
    预期结果:
        自动响应吃
    
    """
    dp = MDropCardProcessor(4)
    player3 = MPlayer('3', 1, 10003, 0)
    player3.setSeatId(3)
    player2 = MPlayer('2', 1, 10002, 0)
    player2.setSeatId(2)
    player1 = MPlayer('1', 1, 10001, 0)
    player1.setSeatId(1)
    player0 = MPlayer('0', 1, 10000, 0)
    player0.setSeatId(0)

    dp.players.append(player0)
    dp.players.append(player1)
    dp.players.append(player2)
    dp.players.append(player3)
    dp.setCurSeatId(1)

    exInfoChi = MTableStateExtendInfo()
    exInfoChi.setExtend({"chi": [[1, 2, 3]]})
    dp.initProcessor(19, 2, MTableState.TABLE_STATE_CHI, exInfoChi, 9)

    exInfoPeng = MTableStateExtendInfo()
    exInfoPeng.setExtend({"peng": [[3, 3, 3]]})
    dp.initProcessor(19, 3, MTableState.TABLE_STATE_PENG, exInfoPeng, 9)

    dp.updateProcessor(19, 2, MTableState.TABLE_STATE_CHI, 3, [1, 2, 3])
    print dp.processors
    dp.resetSeatId(3)

    print dp.hasAutoDecideAction(1, -1)
コード例 #5
0
def testChiTingWinsProcessor():
    """
    测试多个和牌的状态更新
    状态:
        0号位出牌,1号位2号位两个人可和牌,不能一炮多响
        
    操作:
        2号位先和牌
        1号位再和牌
        
    预期:
        2号位胡牌结果先不确认
        1号位胡牌的和牌结果确认
    """
    dp = MDropCardProcessor(4)
    player3 = MPlayer('3', 1, 10003, 0)
    player3.setSeatId(3)
    player2 = MPlayer('2', 1, 10002, 0)
    player2.setSeatId(2)
    player1 = MPlayer('1', 1, 10001, 0)
    player1.setSeatId(1)
    player0 = MPlayer('0', 1, 10000, 0)
    player0.setSeatId(0)

    dp.players.append(player0)
    dp.players.append(player1)
    dp.players.append(player2)
    dp.players.append(player3)
    dp.setCurSeatId(1)

    exInfoWin0 = MTableStateExtendInfo()
    exInfoWin0.appendInfo(
        MTableState.TABLE_STATE_CHI & MTableState.TABLE_STATE_GRABTING, {
            "tile": 14,
            "pattern": [12, 13, 14],
            "ting": {}
        })
    dp.initProcessor(
        19, 0, MTableState.TABLE_STATE_CHI & MTableState.TABLE_STATE_GRABTING,
        exInfoWin0, 9)

    exInfoWin2 = MTableStateExtendInfo()
    exInfoWin2.appendInfo(MTableState.TABLE_STATE_HU, {"tile": 14})
    dp.initProcessor(19, 2, MTableState.TABLE_STATE_HU, exInfoWin2, 9)

    exInfoChi3 = MTableStateExtendInfo()
    exInfoChi3.appendInfo(MTableState.TABLE_STATE_CHI, {
        "tile": 14,
        " pattern": [12, 13, 14]
    })
    dp.initProcessor(19, 3, MTableState.TABLE_STATE_CHI, exInfoChi3, 9)

    result3 = dp.updateProcessor(19, 2, MTableState.TABLE_STATE_CHI, 9,
                                 [12, 13, 14])
    print 'result3:', result3
    print dp.processors

    result0 = dp.updateProcessor(
        19, 0, MTableState.TABLE_STATE_CHI & MTableState.TABLE_STATE_GRABTING,
        9, [12, 13, 14])
    print 'result0:', result0

    dp.resetSeatId(2)
    print dp.processors

    print dp.hasAutoDecideAction(1, -1)
コード例 #6
0
def testLouhuProcessor():
    """
    测试漏和牌的状态更新
    状态:
        0号位出牌,1号位漏胡2号位和牌
        
    操作:
        1号位漏和牌
        2号位和牌
        
    预期:
        1号位漏胡牌结果先不确认
        2号位胡牌的和牌结果确认
    """
    dp = MDropCardProcessor(4, MPlayMode.LUOSIHU)
    player3 = MPlayer('3', 1, 10003, 0)
    player3.setSeatId(3)
    player2 = MPlayer('2', 1, 10002, 0)
    player2.setSeatId(2)
    player1 = MPlayer('1', 1, 10001, 0)
    player1.setSeatId(1)
    player0 = MPlayer('0', 1, 10000, 0)
    player0.setSeatId(0)

    dp.players.append(player0)
    dp.players.append(player1)
    dp.players.append(player2)
    dp.players.append(player3)
    dp.setCurSeatId(0)

    exInfoWin1 = MTableStateExtendInfo()
    winInfo1 = {}
    exInfoWin1.appendInfo(MTableState.TABLE_STATE_PASS_HU, winInfo1)
    dp.initProcessor(19, 1, MTableState.TABLE_STATE_PASS_HU, exInfoWin1, 9)

    exInfoWin2 = MTableStateExtendInfo()
    winInfo2 = {}
    winInfo2['tile'] = 9
    exInfoWin2.appendInfo(MTableState.TABLE_STATE_HU, winInfo2)
    dp.initProcessor(19, 2, MTableState.TABLE_STATE_HU, exInfoWin2, 9)

    result1 = dp.updateProcessor(19, 1, MTableState.TABLE_STATE_PASS_HU, 9,
                                 None)
    print 'result1:', result1
    print dp.processors

    result2 = dp.updateProcessor(19, 2, MTableState.TABLE_STATE_HU, 9, None)
    print 'result2:', result2
    print dp.processors
コード例 #7
0
def testDuoWinsProcessor():
    """
    测试一炮多响时,多个和牌的状态更新
    状态:
        0号位出牌,1号位2号位两个人可和牌,能一炮多响

    操作:
        2号位先和牌
        1号位再和牌

    预期:
        2号位胡牌结果先不确认
        1号位胡牌的和牌结果确认
        1/2号位同时胡牌
    """
    dp = MDropCardProcessor(4, MPlayMode.LUOSIHU)
    player3 = MPlayer('3', 1, 10003, 0)
    player3.setSeatId(3)
    player2 = MPlayer('2', 1, 10002, 0)
    player2.setSeatId(2)
    player1 = MPlayer('1', 1, 10001, 0)
    player1.setSeatId(1)
    player0 = MPlayer('0', 1, 10000, 0)
    player0.setSeatId(0)

    dp.players.append(player0)
    dp.players.append(player1)
    dp.players.append(player2)
    dp.players.append(player3)
    dp.setCurSeatId(0)

    tableTileMgr = MTableTileFactory.getTableTileMgr(4, MPlayMode.LUOSIHU,
                                                     MRunMode.CONSOLE)
    dp.setTableTileMgr(tableTileMgr)

    exInfoWin1 = MTableStateExtendInfo()
    winInfo1 = {}
    winInfo1['tile'] = 9
    exInfoWin1.appendInfo(MTableState.TABLE_STATE_HU, winInfo1)
    dp.initProcessor(19, 1, MTableState.TABLE_STATE_HU, exInfoWin1, 9)

    exInfoWin2 = MTableStateExtendInfo()
    winInfo2 = {}
    winInfo2['tile'] = 9
    exInfoWin2.appendInfo(MTableState.TABLE_STATE_HU, winInfo2)
    dp.initProcessor(19, 2, MTableState.TABLE_STATE_HU, exInfoWin2, 9)

    result2 = dp.updateProcessor(19, 2, MTableState.TABLE_STATE_HU, 9, None)
    print 'result2:', result2
    print dp.processors

    autoSeatId = dp.hasAutoDecideAction(0, -1)
    print 'autoSeatId2:', autoSeatId

    result1 = dp.updateProcessor(19, 1, MTableState.TABLE_STATE_HU, 9, None)
    print 'result1:', result1

    autoSeatId = dp.hasAutoDecideAction(0, -1)
    print 'autoSeatId1:', autoSeatId

    wins = [1, 2]
    result3 = dp.updateDuoHu(19, wins, MTableState.TABLE_STATE_HU)
    print 'result3:', result3

    print dp.processors
コード例 #8
0
def testWinsProcessor():
    """
    测试多个和牌的状态更新
    状态:
        0号位出牌,1号位2号位两个人可和牌,不能一炮多响
        
    操作:
        2号位先和牌
        1号位再和牌
        
    预期:
        2号位胡牌结果先不确认
        1号位胡牌的和牌结果确认
    """
    dp = MDropCardProcessor(4, MPlayMode.JIXI)
    player3 = MPlayer('3', 1, 10003, 0)
    player3.setSeatId(3)
    player2 = MPlayer('2', 1, 10002, 0)
    player2.setSeatId(2)
    player1 = MPlayer('1', 1, 10001, 0)
    player1.setSeatId(1)
    player0 = MPlayer('0', 1, 10000, 0)
    player0.setSeatId(0)
    
    dp.players.append(player0)
    dp.players.append(player1)
    dp.players.append(player2)
    dp.players.append(player3)
    dp.setCurSeatId(0)
    
    exInfoWin1 = MTableStateExtendInfo()
    winInfo1 = {}
    winInfo1['tile'] = 9
    exInfoWin1.appendInfo(MTableState.TABLE_STATE_HU, winInfo1)
    dp.initProcessor(19, 1, MTableState.TABLE_STATE_HU, exInfoWin1, 9)
    
    exInfoWin2 = MTableStateExtendInfo()
    winInfo2 = {}
    winInfo2['tile'] = 9
    exInfoWin2.appendInfo(MTableState.TABLE_STATE_HU, winInfo2)
    dp.initProcessor(19, 2, MTableState.TABLE_STATE_HU, exInfoWin2, 9)
    
    result2 = dp.updateProcessor(19, 2, MTableState.TABLE_STATE_HU, 9, None)
    print 'result2:', result2
    print dp.processors

    result1 = dp.updateProcessor(19, 1, MTableState.TABLE_STATE_HU, 9, None)  
    print 'result1:', result1
    print dp.processors
コード例 #9
0
def testDuoWinsProcessor():
    """
    测试一炮多响时,多个和牌的状态更新
    状态:
        0号位出牌,1号位2号位两个人可和牌,能一炮多响

    操作:
        2号位先和牌
        1号位再和牌

    预期:
        2号位胡牌结果先不确认
        1号位胡牌的和牌结果确认
        1/2号位同时胡牌
    """
    from majiang2.player.player import MPlayer
    from majiang2.table_tile.table_tile_factory import MTableTileFactory
    from majiang2.ai.play_mode import MPlayMode
    from majiang2.table.run_mode import MRunMode

    dp = MQiangGangHuProcessor(4)
    player3 = MPlayer('3', 1, 10003, 0)
    player3.setSeatId(3)
    player2 = MPlayer('2', 1, 10002, 0)
    player2.setSeatId(2)
    player1 = MPlayer('1', 1, 10001, 0)
    player1.setSeatId(1)
    player0 = MPlayer('0', 1, 10000, 0)
    player0.setSeatId(0)

    dp.players.append(player0)
    dp.players.append(player1)
    dp.players.append(player2)
    dp.players.append(player3)

    tableTileMgr = MTableTileFactory.getTableTileMgr(4, MPlayMode.LUOSIHU, MRunMode.CONSOLE)
    dp.setTableTileMgr(tableTileMgr)

    exInfoWin1 = MTableStateExtendInfo()
    winInfo1 = {'tile': 9, 'qiangGang': 1, 'gangSeatId': 0}
    exInfoWin1.appendInfo(MTableState.TABLE_STATE_QIANGGANG, winInfo1)
    dp.initProcessor(19, 1, MTableState.TABLE_STATE_QIANGGANG, exInfoWin1, 9)

    exInfoWin2 = MTableStateExtendInfo()
    winInfo2 = {'tile': 9, 'qiangGang': 1, 'gangSeatId': 0}
    exInfoWin2.appendInfo(MTableState.TABLE_STATE_QIANGGANG, winInfo2)
    dp.initProcessor(19, 2, MTableState.TABLE_STATE_QIANGGANG, exInfoWin2, 9)

    result2 = dp.updateProcessor(19, 2, MTableState.TABLE_STATE_QIANGGANG, 9, None)
    print 'result2:', result2
    print dp.processors

    autoSeatId = dp.hasAutoDecideAction(0, -1)
    print 'autoSeatId2:', autoSeatId

    result1 = dp.updateProcessor(19, 1, MTableState.TABLE_STATE_QIANGGANG, 9, None)
    print 'result1:', result1

    autoSeatId = dp.hasAutoDecideAction(0, -1)
    print 'autoSeatId1:', autoSeatId

    wins = [1, 2]
    result3 = dp.updateDuoHu(19, wins, MTableState.TABLE_STATE_QIANGGANG)
    print 'result3:', result3

    print dp.processors