【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()
程序效果

在这里插入图片描述

发布了18 篇原创文章 · 获赞 73 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43499622/article/details/102915635