基于python实现五子棋【控制台版本】

基于python实现五子棋控制台版本

五子棋是一种古老而经典的策略棋类游戏,旨在让玩家通过在棋盘上落子,最先在横、竖、斜线上连成五子的玩家获胜。如果您想分享源码并展示您的编程技能,编写一个基于 Python 的五子棋控制台版本是一个很好的选择。
在这个项目中,您可以利用 Python 的数据结构和逻辑编写一个简单而有趣的五子棋游戏。您可以实现棋盘的绘制、落子规则的判断、胜负的检测等功能。通过这个项目,您不仅可以锻炼编程能力,还可以加深对游戏开发和算法设计的理解。

简单粗暴一点,两部分展示与源码。

展示与环境

  • PyCharm.
  • python3
    在这里插入图片描述

源码

# -*- coding: utf-8 -*-

finish = False # 游戏是否结束
flagNum = 1  # 当前下棋者标记
flagch = '*'  # 当前下棋者棋子
x = 0    # 当前棋子的横坐标
y = 0    # 当前棋子的纵坐标
print('\033[1;37;41m---------简易五子棋游戏(控制台版)---------\033[0m')
# 棋盘初始化
checkerboard=[]
for i in range(10):
    checkerboard.append([])
    for j in range(10):
        checkerboard[i].append('-')
def msg():
    # 输出最后胜利的棋盘
    print("\033[1;37;44m--------------------------------")
    print("   1  2  3  4  5  6  7  8  9  10")
    for i in range(len(checkerboard)):
        print(chr(i + ord('A')) + " ", end=' ')
        for j in range(len(checkerboard[i])):
            print(checkerboard[i][j] + " ", end=' ')
        print()
    print("--------------------------------\033[0m")
    # 输出赢家
    if (flagNum == 1):
        print('\033[32m*棋胜利!***\033[0m')
    else:
        print('\033[32mo棋胜利!***\033[0m')

while not finish:
    # 打印棋盘
    print("\033[1;30;46m--------------------------------")
    print("   1  2  3  4  5  6  7  8  9  10")
    for i in range(len(checkerboard)):
        print(chr(i + ord('A')) + " ", end=' ');
        for j in range(len(checkerboard[i])):
            print(checkerboard[i][j] + " ", end=' ')
        print()
    print("--------------------------------\033[0m")
    # 判断当前下棋者
    if flagNum == 1:
        flagch = '*'
        print('\033[1;37;40m请*输入棋子坐标(例如A1):\033[0m', end=' ') # 白字黑底
    else:
        flagch = 'o'
        print('\033[1;30;42m请o输入棋子坐标(例如J5):\033[0m', end=' ') # 黑字绿底
    # 输入棋子坐标
    str = input()
    ch = str[0] # 获取第一个字符的大写形式
    x = ord(ch) - 65
    y = int(str[1]) - 1
    # 判断坐标是否在棋盘之内
    if (x < 0 or x > 9 or y < 0 or y > 9):
        print('\033[31m***您输入的坐标有误请重新输入!***\033[0m')
        continue
    # 判断坐标上是否有棋子
    if (checkerboard[x][y] == '-'):
        if (flagNum == 1):
            checkerboard[x][y] = '*'
        else:
            checkerboard[x][y] = 'o'
    else:
        print('\033[31m******您输入位置已经有其他棋子,请重新输入!\033[0m')
        continue
    # 判断棋子左侧
    if (y - 4 >= 0):
        if (checkerboard[x][y - 1] == flagch
                and checkerboard[x][y - 2] == flagch
                and checkerboard[x][y - 3] == flagch
                and checkerboard[x][y - 4] == flagch):
            finish = True
            msg()

    # 判断棋子右侧
    if (y + 4 <= 9):
        if (checkerboard[x][y + 1] == flagch
                and checkerboard[x][y + 2] == flagch
                and checkerboard[x][y + 3] == flagch
                and checkerboard[x][y + 4] == flagch):
            finish = True
            msg()

    # 判断棋子上方
    if (x - 4 >= 0):
        if (checkerboard[x - 1][y] == flagch
                and checkerboard[x - 2][y] == flagch
                and checkerboard[x - 3][y] == flagch
                and checkerboard[x - 4][y] == flagch):
            finish = True
            msg()

    # 判断棋子下方
    if (x + 4 <= 9):
        if (checkerboard[x + 1][y] == flagch
                and checkerboard[x + 2][y] == flagch
                and checkerboard[x + 3][y] == flagch
                and checkerboard[x + 4][y] == flagch):
            finish = True
            msg()

    # 判断棋子右上方向
    if (x - 4 >= 0 and y - 4 >= 0):
        if (checkerboard[x - 1][y - 1] == flagch
                and checkerboard[x - 2][y - 2] == flagch
                and checkerboard[x - 3][y - 3] == flagch
                and checkerboard[x - 4][y - 4] == flagch):
            finish = True
            msg()

    # 判断棋子右下方向
    if (x + 4 <= 9 and y - 4 >= 0):
        if (checkerboard[x + 1][y - 1] == flagch
                and checkerboard[x + 2][y - 2] == flagch
                and checkerboard[x + 3][y - 3] == flagch
                and checkerboard[x + 4][y - 4] == flagch):
            finish = True
            msg()

    # 判断棋子左上方向
    if (x - 4 >= 0 and y + 4 <= 9):
        if (checkerboard[x - 1][y + 1] == flagch
                and checkerboard[x - 2][y + 2] == flagch
                and checkerboard[x - 3][y + 3] == flagch
                and checkerboard[x - 4][y + 4] == flagch):
            finish = True
            msg()

    # 判断棋子左下方向
    if (x + 4 <= 9 and y + 4 <= 9):
        if (checkerboard[x + 1][y + 1] == flagch
                and checkerboard[x + 2][y + 2] == flagch
                and checkerboard[x + 3][y + 3] == flagch
                and checkerboard[x + 4][y + 4] == flagch):
            finish = True
            msg()
    flagNum *= -1; # 更换下棋者标记
  • 14
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
五子棋是一种经典的棋类游戏,下面是一个简单的 Python 实现示例: ```python # 定义棋盘尺寸 BOARD_SIZE = 15 # 初始化棋盘 board = [[' ' for _ in range(BOARD_SIZE)] for _ in range(BOARD_SIZE)] # 定义玩家和电脑的棋子 player = 'X' computer = 'O' # 打印棋盘 def print_board(): for i in range(BOARD_SIZE): for j in range(BOARD_SIZE): print(board[i][j], end=' ') print() # 判断是否胜利 def check_win(row, col, piece): # 横向判断 count = 0 for i in range(row - 4, row + 5): if i < 0 or i >= BOARD_SIZE: continue if board[i][col] == piece: count += 1 if count >= 5: return True else: count = 0 # 纵向判断 count = 0 for j in range(col - 4, col + 5): if j < 0 or j >= BOARD_SIZE: continue if board[row][j] == piece: count += 1 if count >= 5: return True else: count = 0 # 斜向判断(左上至右下) count = 0 for k in range(-4, 5): i = row + k j = col + k if i < 0 or i >= BOARD_SIZE or j < 0 or j >= BOARD_SIZE: continue if board[i][j] == piece: count += 1 if count >= 5: return True else: count = 0 # 斜向判断(右上至左下) count = 0 for k in range(-4, 5): i = row + k j = col - k if i < 0 or i >= BOARD_SIZE or j < 0 or j >= BOARD_SIZE: continue if board[i][j] == piece: count += 1 if count >= 5: return True else: count = 0 return False # 主循环 def main(): while True: print_board() # 玩家落子 while True: row = int(input("请输入落子的行号(0-%d):" % (BOARD_SIZE - 1))) col = int(input("请输入落子的列号(0-%d):" % (BOARD_SIZE - 1))) if board[row][col] == ' ': board[row][col] = player break else: print("该位置已经有棋子,请重新输入!") # 判断玩家是否胜利 if check_win(row, col, player): print_board() print("恭喜你,你赢了!") break # 电脑落子 for i in range(BOARD_SIZE): for j in range(BOARD_SIZE): if board[i][j] == ' ': board[i][j] = computer break else: continue break # 判断电脑是否胜利 if check_win(i, j, computer): print_board() print("很遗憾,你输了!") break # 运行主循环 if __name__ == '__main__': main() ``` 这个简单的实现中,通过控制台输入行号和列号来落子,玩家执黑棋(X),电脑执白棋(O)。程序会检测每一步是否有玩家或电脑获胜,并在胜利后结束游戏。在棋盘上,空格代表空位,X代表黑棋,O代表白棋。 注意:这只是一个简单的实现示例,还可以进一步优化和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

wusp1994

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

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

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

打赏作者

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

抵扣说明:

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

余额充值