“无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。

最近,我阅读了李刚大神编著的《疯狂Python讲义》一书,本书的4.6.3节是一个简易的五子棋游戏程序。原有程序功能尚不完善,仅实现了单方的下棋功能。我对该程序进行了修改完善,除了已有功能之外,还实现了如下功能:

1、用户可自定义棋盘大小。

用Python编写简易五子棋游戏_自定义


2、如果用户下棋的位置超出了棋盘大小,则提示重新输入。

用Python编写简易五子棋游戏_自定义_02


3、如果用户下棋的位置已有棋子,则提示程序输入。

用Python编写简易五子棋游戏_分隔符_03


4、用户可以中途退出下棋游戏。

用Python编写简易五子棋游戏_游戏_04


5、用户可以和电脑进行对弈,电脑为随机落子。

用Python编写简易五子棋游戏_分隔符_05


6、可以判断棋局的胜负,如果已分胜负,则退出游戏。

用Python编写简易五子棋游戏_字符串_06


程序源代码如下,请参考:

# 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")