IT干货网

Python井字棋游戏

shihaiming 2022年09月17日 编程设计 88 0

在这里插入图片描述

1.先进行数据建模

    # 游戏棋盘 
    theBoard = {
   'top-L': '', 'top-M': '', 'top-R': '', 
                'mid-L': '', 'mid-M': '', 'mid-R': '', 
                'low-L': '', 'low-M': '', 'low-R': '' 
                } 
    # 棋盘坐标 
    print("----------棋盘坐标---------------") 
    print('top-L|top-M|top-R') 
    print('mid-L|mid-M|mid-R') 
    print('low-L|low-M|low-R') 
 
    # 打印棋盘 
    print("----------实际棋盘---------------") 
    print(theBoard['top-L'] + '|' + theBoard['top-M'] + '|' + theBoard['top-R']) 
    print('-+-+-') 
    print(theBoard['mid-L'] + '|' + theBoard['mid-M'] + '|' + theBoard['mid-R']) 
    print('-+-+-') 
    print(theBoard['low-L'] + '|' + theBoard['low-M'] + '|' + theBoard['low-R']) 

效果如下:
在这里插入图片描述
有了棋盘建模了,那么我们就需要写逻辑了,让棋盘动起来

2.使用逻辑让数据动起来

完整代码如下:

def printBoard(theBoard): 
    pd = 1  # 我方和敌方 
    while True: 
        # 效验棋盘是否满了 
        checkerboard_count = 9  # 井字游戏棋盘棋子的个数是9 
        for v in theBoard.values(): 
            v = v.strip()  # 去除空格 
            if v != '' and len(v) > 0: 
                checkerboard_count -= 1 
        if checkerboard_count == 0: 
            print("棋盘已满游戏结束---平局") 
            return None 
 
        print("请" + str(pd) + "号选手输入下棋位置:") 
        str_v = input() 
        # 判断是否有这个棋子的坐标 
        if str_v not in theBoard.keys(): 
            print("----对不起没有此棋子坐标请从新输入:") 
            continue 
 
        # 判断棋子是否已经存在 
        if theBoard[str_v].strip()!='' or len(theBoard[str_v].strip())>0: 
            print("已下过次棋-请从新选择下棋位置") 
            continue 
 
 
        if pd == 1: 
            theBoard[str_v] = 'O' 
        else: 
            theBoard[str_v] = 'X' 
        print(theBoard['top-L'] + '|' + theBoard['top-M'] + '|' + theBoard['top-R']) 
        print('-+-+-') 
        print(theBoard['mid-L'] + '|' + theBoard['mid-M'] + '|' + theBoard['mid-R']) 
        print('-+-+-') 
        print(theBoard['low-L'] + '|' + theBoard['low-M'] + '|' + theBoard['low-R']) 
        win = pd_win(theBoard) 
        if win == 'X': 
            print("2号选手胜利-游戏结束") 
            return None 
        elif win == 'O': 
            print("1号选手胜利-游戏结束") 
            return None 
        # 转换为2|1号选手 
        if pd == 1: 
            pd = 2 
        elif pd == 2: 
            pd = 1 
 
 
def pd_win(theBoard): 
 
    # 效验是否胜利 
    win_chess = [[0, 4, 8], [2, 4, 6], [0, 1, 2], [3, 4, 5], [6, 7, 8], [0, 3, 6], [1, 4, 7], [2, 5, 8]] 
    for i in win_chess:  # 每次执行一次可能性 
        pd_board_3 = 0  # 记录子循环次数 
        record1 = 0  # X成绩记录 
        record2 = 0  # O成绩记录 
        for k, v in theBoard.items(): 
            if pd_board_3 in i: 
                if v == 'X': 
                    record1 += 1 
                if v == 'O': 
                    record2 += 1 
            pd_board_3 += 1 
        if record1 == 3: 
            return 'X' 
        elif record2 == 3: 
            return 'O' 
 
 
if __name__ == '__main__': 
    # 游戏棋盘 
    theBoard = {
   'top-L': '', 'top-M': '', 'top-R': '', 
                'mid-L': '', 'mid-M': '', 'mid-R': '', 
                'low-L': '', 'low-M': '', 'low-R': '' 
                } 
    # 棋盘坐标 
    print("----------棋盘坐标---------------") 
    print('top-L|top-M|top-R') 
    print('mid-L|mid-M|mid-R') 
    print('low-L|low-M|low-R') 
 
    # 打印棋盘 
    print("----------实际棋盘---------------") 
    print(theBoard['top-L'] + '|' + theBoard['top-M'] + '|' + theBoard['top-R']) 
    print('-+-+-') 
    print(theBoard['mid-L'] + '|' + theBoard['mid-M'] + '|' + theBoard['mid-R']) 
    print('-+-+-') 
    print(theBoard['low-L'] + '|' + theBoard['low-M'] + '|' + theBoard['low-R']) 
 
    # 提示 
    print("井字棋规则: 选手分为1号选手和二号选手, 一号选手先下棋(自行分配)----游戏即将开始") 
    # 用户输入 
    printBoard(theBoard) 

效果演示

在这里插入图片描述
在这里插入图片描述
至于其他可能性我都写了,这里就不一一展示了
比如: 棋盘满了----(ok),重复下棋----(ok),平局—(ok)


本文参考链接:https://huanmin.blog.csdn.net/article/details/121224634
评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

Java反射机制是什么及怎么实现