五子棋 day5-2

篇幅太长了加开一篇

第七步

棋局的分析关键在于分析棋型,在五子棋中,我们仅需要考虑一条线上的棋子分布,一个点同时属于4条线,如下图红线所示,其中交点为要考察的点:
在这里插入图片描述
由于五子棋仅需要考虑五个棋子成为一条线的情况,我们只需要考虑要考察的点周围5个格子范围内的点。

任务 7
实现棋型算法,通过服务器的检验。
访问http://xxx/step_07服务器会给你一个棋盘的坐标表示(board字段),以及一系列要考察的点的坐标(coord字段),坐标之间用逗号,隔开,整体用[]包围,事实上它是一个JSON的数组。

{"is_success": true, "board": "ghhggggfgigjhhfhiijjfghiihigjhkhhjgkjgffhfkgjijfiejdjeheidkfkikekdlfmgmfifnf", "coord": ["nk", "ok", "bn", "ef", "lk", "im", "gb", "fd", "ha"]}

请给出每个考察点的四条线上的棋型
~只考虑周围5个格子的范围
~用.表示空白位置,x表示黑棋,o表示白棋。
~每个考察点返回四个表示棋型的字符串
~所有考察点的棋型字符串按顺序返回,其中单个考察点的棋型字符串顺序、棋型字符串中棋子的顺序不做规定
~返回值写入ans字段,提交到http://xxx/step_07
如上例中,问题为:

{'board': 'HHJHKGIILFHJJFJJKFIFKEKHIGGILD', 'coord': ['IG']}

考察点IG的四条线上的棋型分别为

...ox.o..
....xo...
....x.x..
..oxxxxx.

上面的棋型按照下图中标出的顺序给出,不过你可以自己选择你觉得方便的顺序。
我们最后把所有的棋型字符串用逗号隔开,依次写入ans字段。

python处理json参考:https://blog.csdn.net/weixin_40636692/article/details/81212304
https://blog.csdn.net/cunjie3951/article/details/106921740
https://blog.csdn.net/pengjunlee/article/details/89280812
https://www.cnblogs.com/zzmmyy/p/11904148.html
字典嵌套列表:https://blog.csdn.net/qq_36222979/article/details/94364812

棋型考察:

import json


def draw_board():  # 棋盘初绘
    for i in range(15):
        board.append([])
        for j in range(15):
            board[i].append(".")


def print_board():  # 正常的打印棋盘
    for i in range(15):
        for j in range(15):
            print(board[i][j], end="")
        print()
    print()


def game_simulation():  # 棋局模拟
    flag = 1
    for i in range(0, len(step), 2):
        a = ord(step[i]) - 97
        b = ord(step[i + 1]) - 97
        if flag & 1 == 1:  # 棋子判断,单数黑棋”x“
            board[a][b] = "x"
        else:
            board[a][b] = "o"
        flag = flag + 1


def transverse_judge(i):  # 横向判断
    a = ord(i[0]) - 97
    b = ord(i[1]) - 97
    for j in range(-4, 5):
        if 0 <= b + j <= 14:
            print(board[a][b + j], end="")
        else:
            continue
    print(",", end="")


def portrait_judge(i):  # 纵向判断
    a = ord(i[0]) - 97
    b = ord(i[1]) - 97
    for j in range(-4, 5):
        if 0 <= a + j <= 14:
            print(board[a + j][b], end="")
        else:
            continue
    print(",", end="")


def left_leaning_judge(i):  # 左倾判断(\)
    a = ord(i[0]) - 97
    b = ord(i[1]) - 97
    for j in range(-4, 5):
        if 0 <= a + j <= 14 and 0 <= b + j <= 14:
            print(board[a + j][b + j], end="")
        else:
            continue
    print(",", end="")


def right_deviation_judge(i):  # 右倾判断(/)
    a = ord(i[0]) - 97
    b = ord(i[1]) - 97
    for j in range(-4, 5):
        if 0 <= a - j <= 14 and 0 <= b + j <= 14:
            print(board[a - j][b + j], end="")
        else:
            continue
    print(",", end="")


board = []
draw_board()
data = input()
dic = json.loads(data)  # 将 JSON 对象类型转换为 Python 字典
step = dic['board']  # 步型读入
check = dic['coord']  # 检查点读入
game_simulation()  # 棋局模拟
for k in check:
    transverse_judge(k)
    portrait_judge(k)
    left_leaning_judge(k)
    right_deviation_judge(k)

验证成功,四向判断的输出是为了提交验证,需要可视化时修改一下即可

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值