Python五子棋程序
Posted 阿汪先生
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python五子棋程序相关的知识,希望对你有一定的参考价值。
Python——五子棋程序练习与理解
(《疯狂Python讲义》练习)
最近入了本《疯狂Python讲义》来复习Python语法和学习数据可视化处理,被圈粉了,猛推!
书上的一个五子棋程序的完善和注解。
因为是书上的框架,不是完全原创,仅供学习参考,侵删。
程序代码
#阿汪先生的博客.ws
import random
import sys
# 定义棋盘的大小
BOARD_SIZE = int(input('请输入棋盘大小:'))
high = [] #保存纵坐标
wide = [] #保存横坐标
num = [] #斜方向上连续棋子个数
num1 = [] #水平方向上连续棋子个数
num2 = [] #竖直方向上连续棋子个数
# 定义一个二维列表来充当棋盘
board = []
def initBoard() :
# 把每个元素赋为"╋",用于在控制台画出棋盘
for i in range(BOARD_SIZE) :
#每行SIZE个
row = ["╋"] * BOARD_SIZE
#复制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() #打印棋盘
# 随机生成2位数字,并判断是否和手动输入相同(相同的话重新获取)
def randoms():
w,s = [random.randint(1, BOARD_SIZE) for j in range(1, 3)]
for i in range(len(wide)) :
if wide[i] == w and high[i] == s :
randoms()
else:
board[w - 1][s - 1]= "○"
# 判断五位数字是否相连
def sorts(num) :
#坐标升序排列
num.sort()
n = 0
j = 0
n = num[0] #棋子坐标的起始值/边界值/最小值
for i in num :
if i == n :
n = i + 1
j=j+1 #连续棋子数量
if j >= 5:
printBoard()
print('一方胜出,游戏结束')
sys.exit()
else:
n = i
n = n + 1
j = 1
def main():
while 1>0:
inputStr = input("请输入您下棋的坐标,应以x,y的格式:\\n")
if inputStr != None :
# 将用户输入的字符串以逗号(,)作为分隔符
x_str, y_str = inputStr.split(sep = ",")
# 把对应的列表元素赋为"●"。
board[int(x_str) - 1][int(y_str) - 1] = "●"
# 保存横坐标x_str和纵坐标y_str
wide.append(int(x_str))
high.append(int(y_str))
# 进行是否成功判断
#棋子个数大于5个开始判断
if len(wide) >= 5 :
for i in range(len(wide)) :
#斜方向上为△y/△x=1
if (wide[i]+int(y_str))/(high[i]+int(x_str)) == 1 :
# 横坐标保存
num.append(wide[i])
sorts(num)
#竖直方向上
if wide[i] == int(x_str):
#纵坐标保存
num1.append(high[i])
sorts(num1)
#水平方向上
if high[i] == int(y_str):
#横坐标保存
num2.append(wide[i])
sorts(num2)
#清空列表,否则只能判断连续操作上的5枚棋子
num.clear()
num1.clear()
num2.clear()
#随机函数生成棋子
randoms()
#打印棋盘
printBoard()
main()
程序效果
以上是关于Python五子棋程序的主要内容,如果未能解决你的问题,请参考以下文章