用python的turtle库做五子棋游戏(双人)

规则&简介

五子棋是一种源于中国的棋类游戏,起源可以追溯到几千年前的古代。据传说,五子棋起源于中国古代的战争时期,是将军们用来训练军事策略战术的一种游戏。五子棋的发展历史悠久,流传广泛,成为了中国文化的一部分。在中国,五子棋被广泛应用于学校教育智力开发休闲娱乐等领域。

随着时间的推移,五子棋也逐渐传播到了世界各地,成为了一种受欢迎的国际性棋类游戏。五子棋的历史背景丰富多彩,是中华文化的重要组成部分之一。五子棋是一种两人对弈的棋类游戏,目的是在棋盘上先将自己的五个棋子连成一线,或是阻止对手完成这个目标

摘自:百度安全验证

代码
import turtle

def set_chess(x,y,color):
    if board[x][y] != ' ':
        print('该位置已有棋子')
        print("")
        return False
    else:
        board[x][y] = color
        # printboard(board)
        return True

def check_win(board):
    for list_str in board:
        if ''.join(list_str).find('O'*5) != -1:
            print('恭喜白棋获胜')
            return True
        elif ''.join(list_str).find('X'*5) != -1:
            print('恭喜黑棋获胜')
            return True
    else:
        return False    

def check_win_all(board):
    board_c = [[] for line in range(29)]
    for x in range(15):
        for y in range(15):
            board_c[x+y].append(board[x][y])
    board_d =  [[] for line in range(29)]
    for x in range(15):
        for y in range(15):
            board_d[x-y].append(board[x][y])
    return check_win(board) or check_win([list(l) for l in zip(*board)]) or check_win(board_c) or check_win(board_d)

def check_input(t,letter):
    while True:
        while True:
            try:
                m = int(input('请输入棋子横坐标0-14:'))
                break
            except ValueError:
                print("您输入的不是数字,请重新输入!")
                print("")
                continue
        if m in range(15):
            print('输入成功!')
            print("")
        else:
            print('横坐标超出范围,请重新输入!')
            m = int(input('请输入棋子横坐标0-14:'))
        while True:
            try:
                n = int(input('请输入棋子纵坐标0-14:'))
                break
            except ValueError:
                print("您输入的不是数字,请重新输入!")
                print("")
                continue        
        if n in range(15):
            print('输入成功!')
            print("")
        else:
            print('纵坐标超出范围,请重新输入!')
            n = int(input('请输入棋子纵坐标0-14:'))
        if set_chess(m,n,letter):
            if letter == 'O':
                printchess(t,('black','white'),m,n)
            elif letter == 'X':
                printchess(t,('black','black'),m,n)
            break
        else:
            continue

def printchess(turtle,color,x,y):
    turtle.penup()
    turtle.goto(-195 + 30*y , 185 - 30*x)
    turtle.pendown()
    turtle.color(*color)
    turtle.begin_fill()
    turtle.circle(10)
    turtle.end_fill()

if __name__ == '__main__':
    t = turtle.Pen()
    t.speed(1000)
    t.ht()
    for i in range(16):
        t.penup()
        t.goto(-225, -i * 30 + 225)
        t.pendown()
        t.goto(225, -i * 30 + 225)
    for j in range(16):
        t.penup()
        t.goto(-225 + j * 30, 225)
        t.pendown()
        t.goto(-225 + j * 30, -225)
    board = [[' ']*15 for line in range(15)]
    turtle.ht()
    turtle.speed(500)
    for i in range(300):
        if i%2 == 0:
            print('白棋下棋')
            check_input(turtle,'O')
            if check_win_all(board):
                break
        else:
            print('黑棋下棋')
            check_input(turtle,'X')
            if check_win_all(board):
                break
    turtle.done()
运行结果

(仅用为做示例,勿喷)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值