IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 五子棋(Python) -> 正文阅读

[Python知识库]五子棋(Python)

五子棋(Python)

效果图

五子棋

代码

import pgzrun

TITLE = "五子棋"
WIDTH = 640
HEIGHT = 480

backgroun = Actor("chess_background")  # 导入背景图片

chess_pieces = []  # 用来存放棋子
who_play = 0  # 轮到谁落子,默认白棋先落子
chessboard = [([-1] * 11) for i in range(11)]  # 用一个二维列表来充当棋盘
pos_x = -1  # 鼠标点击的x轴坐标
pos_y = -1  # 鼠标点击的y轴坐标
isFinish = False  # 判断游戏是否结束
color = ["red", "black"]  # 红色显示轮到谁落子


def draw():
    screen.clear()  # 清屏
    backgroun.draw()  # 画背景
    screen.draw.text("玩家1", (50, 220), fontsize=20, fontname='simhei', color=color[who_play % 2])
    screen.draw.text("白棋", (53, 260), fontsize=20, fontname='simhei', color="black")
    screen.draw.text("玩家2", (540, 220), fontsize=20, fontname='simhei', color=color[(who_play + 1) % 2])
    screen.draw.text("黑棋", (543, 260), fontsize=20, fontname='simhei', color="black")
    for i in range(11):
        screen.draw.line((120, 40 + 40 * i), (520, 40 + 40 * i), "black")
        screen.draw.line((120 + 40 * i, 40), (120 + 40 * i, 440), "black")
    for chess_piece in chess_pieces:
        chess_piece.draw()
    if isFinish:
        if dogfall(chessboard):
            screen.draw.text('旗鼓相当', (205, 175), fontsize=50, fontname='fzshuangqtjw_cu', color="red")
        elif who_play % 2 == 0:
            screen.draw.text('玩家2获胜', (205, 175), fontsize=50, fontname='fzshuangqtjw_cu', color="red")
        elif who_play % 2 == 1:
            screen.draw.text('玩家1获胜', (205, 175), fontsize=50, fontname='fzshuangqtjw_cu', color="red")
        screen.draw.text('重新开始', (240, 255), fontsize=40, fontname='fzshuangqtjw_cu', color="green")


def update():
    global pos_x, pos_y, isFinish  # 引用全局变量
    if not isFinish:
        t = who_play % 2  # 用来判断谁赢了
        # 判断横排是否五子连珠
        for i in range(pos_y - 4, pos_y + 1):
            if i >= 0 and i < 7 and chessboard[pos_x][i] == chessboard[pos_x][i + 1] == chessboard[pos_x][i + 2] == \
                    chessboard[pos_x][i + 3] == chessboard[pos_x][i + 4] != -1:
                if t:
                    isFinish = True
                else:
                    isFinish = True
        # 判断竖排是否五子连珠
        for i in range(pos_x - 4, pos_x + 1):
            if i >= 0 and i < 7 and chessboard[i][pos_y] == chessboard[i + 1][pos_y] == chessboard[i + 2][pos_y] == \
                    chessboard[i + 3][pos_y] == chessboard[i + 4][pos_y] != -1:
                if t:
                    isFinish = True
                else:
                    isFinish = True
        # 判断斜对角是否五子连珠
        for i, j in zip(range(pos_x - 4, pos_x + 1), range(pos_y - 4, pos_y + 1)):
            if i >= 0 and i < 7 and j >= 0 and j < 7 and chessboard[i][j] == chessboard[i + 1][j + 1] == \
                    chessboard[i + 2][j + 2] == chessboard[i + 3][j + 3] == chessboard[i + 4][j + 4] != -1:
                if t:
                    isFinish = True
                else:
                    isFinish = True
        # 判断反斜对角是否五子连珠
        for i, j in zip(range(pos_x - 4, pos_x + 1), range(pos_y + 4, pos_y - 1, -1)):
            if i >= 0 and i < 7 and j <= 10 and chessboard[i][j] == chessboard[i + 1][j - 1] == chessboard[i + 2][
                j - 2] == chessboard[i + 3][j - 3] == chessboard[i + 4][j - 4] != -1:
                if t:
                    isFinish = True
                else:
                    isFinish = True
        # 判断是否平局
        if dogfall(chessboard):
            isFinish = True


def on_mouse_down(pos, button):
    global who_play, pos_x, pos_y, isFinish, chess_pieces, chessboard
    # 当游戏未结束时,点击左键在相应的位置显示相应的棋子
    if button == mouse.LEFT and not isFinish:
        for i in range(11):
            for j in range(11):
                if abs(pos[0] - 120 - 40 * i) < 20 and abs(pos[1] - 40 - 40 * j) < 20:
                    pos_x = j
                    pos_y = i
                    if who_play % 2 == 0 and chessboard[j][i] == -1:
                        white_chess_piece = Actor("white_chess_piece")
                        white_chess_piece.left = 102 + 40 * i
                        white_chess_piece.top = 22 + 40 * j
                        chess_pieces.append(white_chess_piece)
                        who_play += 1
                        chessboard[j][i] = 0
                    elif who_play % 2 == 1 and chessboard[j][i] == -1:
                        black_chess_piece = Actor("black_chess_piece")
                        black_chess_piece.left = 102 + 40 * i
                        black_chess_piece.top = 22 + 40 * j
                        chess_pieces.append(black_chess_piece)
                        who_play += 1
                        chessboard[j][i] = 1
    # 判断是否点击了重新开始,如果点击了则将一切数据回归初始状态
    if isFinish:
        if button == mouse.LEFT and pos[0] > 240 and pos[0] < 400 and pos[1] > 255 and pos[1] < 300:
            chess_pieces.clear()
            who_play = 0
            pos_x = -1
            pos_y = -1
            chessboard = [([-1] * 11) for i in range(11)]
            isFinish = False


# 判断棋盘是否下满,是则平局
def dogfall(chessboard):
    for i in range(11):
        for j in range(11):
            if chessboard[i][j] == -1:
                return False
    return True


pgzrun.go()

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-04-24 09:24:12  更:2022-04-24 09:25:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:29:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码