python实现简易五子棋游戏(控制台版)

下面是详细的攻略:

python实现简易五子棋游戏(控制台版)

本文将介绍如何通过Python语言实现一个简易的五子棋游戏,主要使用Python基础语法和标准库函数,适合初学者或想进一步熟悉Python语法的人。游戏使用控制台进行展示,不涉及图形界面。

思路与实现

  1. 初始化棋盘

棋盘的使用采用二维列表来实现,棋盘大小为15*15,每格状态用0、1、2表示,0为无人占位,1为黑方占位,2为白方占位。

def init_board():
    board = []
    for i in range(15):
        row = []
        for j in range(15):
            row.append(0)
        board.append(row)
    return board
  1. 显示棋盘

使用for循环逐行输出棋盘,并根据棋盘状态在对应位置输出黑棋、白棋或空位。其中用到了转移字符\033[31m\033[37m来控制输出颜色。

def show(board):
    print(' ', end='')
    for i in range(15):
        print(chr(65+i), end='')
    print()
    for i in range(15):
        print(chr(65+i), end='')
        for j in range(15):
            if board[i][j] == 0:
                print('·', end='')
            elif board[i][j] == 1:
                print('\033[31m●\033[37m', end='')
            else:
                print('\033[37m●\033[37m', end='')
        print()
  1. 下棋操作

通过while循环获取用户输入的坐标点,如果该点未被占用,则根据当前下棋方确定占位状态,并更新棋盘。下棋方轮流切换。

def play(board, turn):
    while True:
        pos = input('请落子,格式如 A3:')
        row, col = ord(pos[0])-65, int(pos[1:])-1
        if board[row][col] == 0:
            board[row][col] = turn
            break
        else:
            print('该位置已经有子,请重新下棋!')
    return 3 - turn  # 切换下棋方,1为黑方,2为白方
  1. 判断胜负

通过两重for循环,分别判断横向、纵向、左斜向、右斜向是否存在五子连珠。如果存在,则返回对局方,否则返回0,表示继续对局。

def judge(board):
    for i in range(15):
        for j in range(15):
            if board[i][j] != 0:
                if j<=10 and board[i][j]==board[i][j+1]==board[i][j+2]==board[i][j+3]==board[i][j+4]:
                    return board[i][j]
                if i<=10 and board[i][j]==board[i+1][j]==board[i+2][j]==board[i+3][j]==board[i+4][j]:
                    return board[i][j]
                if i<=10 and j<=10 and board[i][j]==board[i+1][j+1]==board[i+2][j+2]==board[i+3][j+3]==board[i+4][j+4]:
                    return board[i][j]
                if i<=10 and j>=4 and board[i][j]==board[i+1][j-1]==board[i+2][j-2]==board[i+3][j-3]==board[i+4][j-4]:
                    return board[i][j]
    return 0
  1. 完整程序
def init_board():
    board = []
    for i in range(15):
        row = []
        for j in range(15):
            row.append(0)
        board.append(row)
    return board


def show(board):
    print(' ', end='')
    for i in range(15):
        print(chr(65+i), end='')
    print()
    for i in range(15):
        print(chr(65+i), end='')
        for j in range(15):
            if board[i][j] == 0:
                print('·', end='')
            elif board[i][j] == 1:
                print('\033[31m●\033[37m', end='')
            else:
                print('\033[37m●\033[37m', end='')
        print()


def play(board, turn):
    while True:
        pos = input('请落子,格式如 A3:')
        row, col = ord(pos[0])-65, int(pos[1:])-1
        if board[row][col] == 0:
            board[row][col] = turn
            break
        else:
            print('该位置已经有子,请重新下棋!')
    return 3 - turn


def judge(board):
    for i in range(15):
        for j in range(15):
            if board[i][j] != 0:
                if j<=10 and board[i][j]==board[i][j+1]==board[i][j+2]==board[i][j+3]==board[i][j+4]:
                    return board[i][j]
                if i<=10 and board[i][j]==board[i+1][j]==board[i+2][j]==board[i+3][j]==board[i+4][j]:
                    return board[i][j]
                if i<=10 and j<=10 and board[i][j]==board[i+1][j+1]==board[i+2][j+2]==board[i+3][j+3]==board[i+4][j+4]:
                    return board[i][j]
                if i<=10 and j>=4 and board[i][j]==board[i+1][j-1]==board[i+2][j-2]==board[i+3][j-3]==board[i+4][j-4]:
                    return board[i][j]
    return 0


def main():
    board = init_board()
    turn = 1
    while True:
        show(board)
        turn = play(board, turn)
        winner = judge(board)
        if winner:
            print('胜利者为:', '黑方' if winner==1 else '白方')
            break


if __name__ == '__main__':
    main()

示例

示例1:黑方落子

请落子,格式如 A3:B6
 A B C D E F G H I J K L M N O
A· · · · · · · · · · · · · · ·
B· · · · · ● · · · · · · · · ·
C· · · · · ○ · · · · · · · · ·
D· · · · · · · · · · · · · · ·
E· · · · · · · · · · · · · · ·
F· · · · · · · · · · · · · · ·
G· · · · · · · · · · · · · · ·
H· · · · · · · · · · · · · · ·
I· · · · · · · · · · · · · · ·
J· · · · · · · · · · · · · · ·
K· · · · · · · · · · · · · · ·
L· · · · · · · · · · · · · · ·
M· · · · · · · · · · · · · · ·
N· · · · · · · · · · · · · · ·
O· · · · · · · · · · · · · · ·
请落子,格式如 A3:

示例2:胜利者为白方

  A B C D E F G H I J K L M N O
A○ ○ ○ ○ ○ ○ ○ ○ · · · · · · ·
B· · · · · · · · · · · · · · ·
C· · · · · · · · · · · · · · ·
D· · · · · · · · · · · · · · ·
E○ ○ ○ ○ · · · · · · · · · · ·
F· · · · ○ · · · · · · · · · ·
G· · · · · ○ · · · · · · · · ·
H· · · · · · ○ · · · · · · · ·
I· · · · · · · ○ · · · · · · ·
J· · · · · · · · ○ · · · · · ·
K· · · · · · · · · · · · · · ·
L· · · · · · · · · · · · · · ·
M· · · · · · · · · · · · · · ·
N· · · · · · · · · · · · · · ·
O· · · · · · · · · · · · · · ·
胜利者为: 白方

以上就是Python实现简易五子棋游戏(控制台版)的完整攻略,希望能对你有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python实现简易五子棋游戏(控制台版) - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • python对两个数组进行合并排列处理的两种方法

    我来详细讲解一下“Python对两个数组进行合并排列处理的两种方法”。 方法一:使用内置函数sorted() 使用Python内置函数sorted()可以进行对两个数组进行合并排列处理。具体步骤如下: 首先将两个数组合并为一个新的数组用 ‘+’ 号连接。 对新的数组使用sorted()函数进行排序,得到排列后的新数组。 示例: a = [12, 5, 6, …

    python 2023年6月6日
    00
  • Python 斯皮尔曼等级顺序相关度

    Python 斯皮尔曼等级顺序相关度(Spearman’s Rank Correlation Coefficient)是一种衡量两个变量之间相关度的统计方法,它用于衡量两个变量之间的单调关系,即当一个变量下降时,另一个变量也下降,反之亦然。它对于异常值不太敏感,具有较好的鲁棒性和可靠性,适用于非线性数据和非正态分布数据的相关性分析。 下面是Python中使用…

    python-answer 2023年3月25日
    00
  • python 3调用百度OCR API实现剪贴板文字识别

    Python 3调用百度OCR API实现剪贴板文字识别 本文介绍如何使用Python 3调用百度OCR API实现剪贴板文字识别,同时提供了2个示例来展示如何调用OCR API以及如何通过Python将识别结果保存到文本文件。 前置条件 在使用本文提供的代码之前,您需要先完成以下事项: 注册百度OCR API并获取相应的API Key和Secret Key…

    python 2023年5月19日
    00
  • python 合并列表的八种方法

    Python合并列表的八种方法 在Python中,可以使用多种方法将两个或多个列表合并成一个列表。本文将详细讲解Python合并列表的八种方法,包括使用加号(+)运算符、使用extend()方法、使用append()方法、使用列表解析、使用for循、使用*操作符、使用chain()函数和使用numpy库中的concatenate()函数。并提供两个实例说明。…

    python 2023年5月13日
    00
  • 在Python中字符串、列表、元组、字典之间的相互转换

    在Python中,字符串、列表、元组和字典是常用的数据类型。在某些情况下,我们需要将它们之间进行相互转换。下面是完整攻略,其中包含有关如何在Python中进行字符串、列表、元组和字典之间的相互转换的详细信息。 字符串、列表、元组、字典的定义和创建 在Python中,字符串、列表、元组和字典都是常用的数据类型,它们的定义和创建方式如下: 字符串的定义和创建 在…

    python 2023年5月13日
    00
  • Python 正则模块详情

    Python正则模块详情 正则表达式是一种强大的文本处理工具,可以用于各种文本处理任务,如数据清洗、文本分析、信息提取等。在Python中,可以使用re模块来操作正达式。本攻略将详细讲解Python正则表达式的基本语法、常用函数和应用技巧,帮助读者速掌握正则表达式的用法。 正则表达式的基本语法 正则表达式由普通字符元字符组成的,用于匹配文中的模式。普通字符表…

    python 2023年5月14日
    00
  • 如何使用Python更新数据库中的数据?

    当需要更新数据库中的数据时,可以使用Python连接到数据库并执行SQL UPDATE语句。以下是使用Python更新数据库中的数据的完整攻略: 连接数据库 要连接到数据库,需要提供数据库的主机名、用户名、密码和数据库名称。可以使用以下代码连接MySQL: import mysql.connector mydb = mysql.connector.conne…

    python 2023年5月12日
    00
  • Python时间序列缺失值的处理方法(日期缺失填充)

    下面是对于”Python时间序列缺失值的处理方法(日期缺失填充)”的完整攻略: 问题描述 在处理时间序列数据时,经常会遇到缺失值的情况。如果数据中存在某些时间点没有数据,则称为缺失值。对于时间序列数据中的缺失值,需要进行填充处理,以保证其连续性和完整性。 数据准备 首先,我们需要准备一些时间序列数据,来演示如何处理时间序列缺失值。下面是一个示例数据,包含了1…

    python 2023年6月2日
    00
合作推广
合作推广
分享本页
返回顶部