用Python编写简易五子棋游戏

“无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。”
最近,我阅读了李刚大神编著的《疯狂Python讲义》一书,本书的4.6.3节是一个简易的五子棋游戏程序。原有程序功能尚不完善,仅实现了单方的下棋功能。我对该程序进行了修改完善,除了已有功能之外,还实现了如下功能:
1、用户可自定义棋盘大小。
在这里插入图片描述
2、如果用户下棋的位置超出了棋盘大小,则提示重新输入。在这里插入图片描述
3、如果用户下棋的位置已有棋子,则提示程序输入。
在这里插入图片描述
4、用户可以中途退出下棋游戏。
在这里插入图片描述
5、用户可以和电脑进行对弈,电脑为随机落子。
在这里插入图片描述
6、可以判断棋局的胜负,如果已分胜负,则退出游戏。
在这里插入图片描述
程序源代码如下,请参考:

# coding: utf-8

import random

# 定义棋盘的大小
BOARD_SIZE = int(input("请输入棋盘大小:"))
# 定义一个二维列表来充当棋盘
board = []
def initBoard() :
    # 把每个元素赋为"╋",用于在控制台画出棋盘
    for i in range(BOARD_SIZE) :
        row = ["╋"] * BOARD_SIZE
        board.append(row)

# 在控制台输出棋盘的方法
def printBoard() :
    # 打印每个列表元素
    for i in range(BOARD_SIZE) :
        for j in range(BOARD_SIZE) :
            # 打印列表元素后不换行
            print(board[i][j], end="")
        # 每打印完一行列表元素后输出一个换行符
        print()
# 打印棋盘
initBoard()
printBoard()
# 开始下棋游戏
inputStr = input("请输入您下棋的坐标(应以x,y的格式):\n")
while inputStr != None :
    # 将用户输入的字符串以逗号(,)作为分隔符, 分隔成2个字符串
    x_str, y_str = inputStr.split(sep = ",")
    # 如果输入的坐标为(99,99), 表示退出棋局
    if int(x_str)==99 and int(y_str)==99:
        print("您已放弃棋局, 再见!")
        break
    # 判断坐标的有效性
    if int(x_str)>BOARD_SIZE or int(y_str)>BOARD_SIZE:
        print("您放置棋子的位置不在棋盘之内, 请重新确认下棋位置!")
        printBoard()
        inputStr = input("请输入您下棋的坐标(应以x,y的格式):\n")
        continue
    # 判断对应位置是否已经放置了棋子
    if board[int(y_str)-1][int(x_str)-1]=="●" or board[int(y_str)-1][int(x_str)-1]=="X":
        print("该位置已有棋子, 请重新确认下棋位置!")
        printBoard()
        inputStr = input("请输入您下棋的坐标(应以x,y的格式):\n")
        continue
    # 把对应的列表元素赋为"●"
    board[int(y_str)-1][int(x_str)-1] = "●"
    # printBoard()
    # 电脑随机下棋
    # print("轮到计算机下棋了:")
    while True:
        y_index=random.randrange(BOARD_SIZE)+1
        x_index=random.randrange(BOARD_SIZE)+1
        # 判断对应位置是否已经放置了棋子
        if board[int(y_index)-1][int(x_index)-1]=="X" or board[int(y_index)-1][int(x_index)-1]=="●":
            continue
        board[int(y_index)-1][int(x_index)-1]="X"
        # printBoard()
        break
    # 判断是否已有胜负
    winflag = 0
    for i in range(BOARD_SIZE):
        for j in range(BOARD_SIZE):
            if board[i][j]=="●" and board[i+1][j]=="●" and board[i+2][j]=="●" and board[i+3][j]=="●" and board[i+4][j]=="●":
                print("●方已取得胜利!")
                winflag=1
            if board[i][j]=="●" and board[i][j+1]=="●" and board[i][j+2]=="●" and board[i][j+3]=="●" and board[i][j+4]=="●":
                print("●方已取得胜利!")
                winflag=1
            if board[i][j]=="●" and board[i+1][j+1]=="●" and board[i+2][j+2]=="●" and board[i+3][j+3]=="●" and board[i+4][j+4]=="●":
                print("●方已取得胜利!")
                winflag=1
            if board[i][j]=="●" and board[i-1][j+1]=="●" and board[i-2][j+2]=="●" and board[i-3][j+3]=="●" and board[i-4][j+4]=="●":
                print("●方已取得胜利!")
                winflag=1
            # 如果●方未取胜,再判断X方
            if winflag==0:
                if board[i][j]=="X" and board[i+1][j]=="X" and board[i+2][j]=="X" and board[i+3][j]=="X" and board[i+4][j]=="X":
                    print("X方已取得胜利!")
                    winflag=1
                if board[i][j]=="X" and board[i][j+1]=="X" and board[i][j+2]=="X" and board[i][j+3]=="X" and board[i][j+4]=="X":
                    print("X方已取得胜利!")
                    winflag=1
                if board[i][j]=="X" and board[i+1][j+1]=="X" and board[i+2][j+2]=="X" and board[i+3][j+3]=="X" and board[i+4][j+4]=="X":
                    print("X方已取得胜利!")
                    winflag=1
                if board[i][j]=="X" and board[i-1][j+1]=="X" and board[i-2][j+2]=="X" and board[i-3][j+3]=="X" and board[i-4][j+4]=="X":
                    print("X方已取得胜利!")
                    winflag=1
    printBoard()
    #如果已有胜负, 则退出棋局
    if winflag==1:
        break
    inputStr = input("请输入您下棋的坐标(应以x,y的格式):\n")

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知识的港湾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值