《最强大脑第七季》之“黑白迭代”游戏代码(Python)

Python实现五子棋游戏完整教程 本文还有配套的精品资源,点击获取 简介:本项目通过使用Python编程语言来实现五子棋(Gomoku)游戏,旨在加深对Python基础知识的理解,包括变量、控制流、函数、类和对象。游戏的核心是棋盘状态管理和逻辑判断,通过棋盘类实现初始化、落子和胜负检查。游戏界面可以通过Turtle或pygame库实现,增加互动性。完成本项目不仅能够提升编程技能,还能学习到游戏设计的基本思路... 阅读详情

在看了上一期节目后,对黑白迭代这个项目的游戏产生了兴趣,也想自己玩玩,奈何没有渠道可以找到这个游戏,于是便自己尝试写了一个关于这个游戏的小程序。

一、游戏的基础设置

因为这个游戏的核心是方块,所以首先是给这个游戏一些基础的设定:背景和方块的大小,颜色等:

Settings.py

class Settings():
    """ 存储《黑白迭代》的所有设置的类 """

    def __init__(self):
        """ 初始化游戏的设置 """

        # 屏幕设置
        self.screen_width = 1200
        self.screen_height = 800
        self.bg_color = (230, 230, 230)

        # 白色方块设置
        self.white_square_width = 80
        self.white_square_height = 80
        self.white_square_color = 255, 255, 255

二、方块类

接下来就是创建游戏的核心方块,通过精灵(Sprite)建立一个class white_square类,里面包含了这个一个方块的起始位置,颜色等。通过draw_square方法来画出方块。

square.py

import pygame
from pygame.sprite import Sprite

class white_square(Sprite):
    """ 表示单个白色方块的类 """

    def __init__(self,si_settings, screen):
        """ 初始化白色方块并设置其初始位置 """
        super(white_square, self).__init__()
        self.screen = screen

        # 在(0,0)处创建一个表示白色方块的矩形,再设置正确的位置
        self.rect = pygame.Rect(0, 0, si_settings.white_square_width,
                                si_settings.white_square_height)
        # self.rect.x = (si_settings.screen_width - 8*si_settings.white_square_width)/2
        # self.rect.y = (si_settings.screen_height - 8*si_settings.white_square_height)/2
        self.rect.x = 280
        self.rect.y = 80

        # 存储白色方块的准确位置
        self.x = float(self.rect.x)

        self.color = si_settings.white_square_color

    def draw_square(self):
        """ 在屏幕上绘制白色方块 """
        pygame.draw.rect(self.screen, self.color, self.rect)

三、游戏中事件发生的函数

紧接着需要创建游戏的核心玩法。

  1. check_event:检测游戏过程中发生的事件,并且调用相应的函数;
  2. create_square:为游戏界面创建一行白色方块;
  3. create_fleet:创建白色方块群(8*8);
  4. change_color:将方块的颜色变为相反颜色(白->黑;黑->白);
  5. extend_mouse:当你点击一个白色方块时,将鼠标点击的范围扩大为其相邻方块的范围;
  6. check_button:检测单击了哪个方块;
  7. updata_screen:更新每次事件发生后,屏幕显示的方块群。

game_function.py

import sys
import pygame
from pygame.sprite import Group
from square import white_square

def check_events(white_squares):
    """ 响应按键和鼠标事件 """

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == pygame.MOUSEBUTTONDOWN:
            mouse_x, mouse_y = pygame.mouse.get_pos()
            check_button(white_squares, mouse_x, mouse_y)

def create_square(si_settings, screen, white_squares, square_number, row_number):
    """ 创建一个白色方块并将其加入当前行 """
    square = white_square(si_settings, screen)
    square_width = square.rect.width
    square.x = 280 + (square_width + 1) * square_number  # 白色方块间距为 1
    square.rect.x = square.x
    square.rect.y = 80 + (square.rect.height + 1) * row_number
    white_squares.add(square)

def create_fleet(si_settings, screen, white_squares):
    """ 创建 8*8 的白色方块群 """
    number_squares = 8
    number_rows = 8

    # 创建白色方块群
    for row_number in range(number_rows):
        for square_number in range(number_squares):
            create_square(si_settings, screen, white_squares,
                          square_number, row_number)

def change_color(square):
    """ 将方块自身以及其附近的方块变为相反颜色的方块 """
    if square.color == (255, 255, 255):
        square.color = 0, 0, 0
    elif square.color == (0, 0, 0):
        square.color = 255, 255, 255

def extend_mouse(mouse_x, mouse_y):
    """ 扩展鼠标单击的位置 """
    mouse = [(mouse_x, mouse_y - 81), (mouse_x - 81, mouse_y),
             (mouse_x, mouse_y),
             (mouse_x, mouse_y + 81), (mouse_x + 81, mouse_y)]
    return mouse

def check_button(white_squares, mouse_x, mouse_y):
    """ 检查单击了哪个方块及其相邻方块 """
    mouse = extend_mouse(mouse_x, mouse_y)
    for pos in mouse:
        for square in white_squares:
            if square.rect.collidepoint(pos[0], pos[1]):
                change_color(square)
                break

def updata_screen(si_settings, screen, white_squares):
    """ 更新屏幕上的图像,并切换到新屏幕 """
    # 每次循环时都重绘屏幕
    screen.fill(si_settings.bg_color)

    # 绘制编组中的每个方块
    for square in white_squares.sprites():
        square.draw_square()

    # 让最近绘制的屏幕可见
    pygame.display.flip()

四、游戏运行的主函数

import pygame
from pygame.sprite import Group
from settings import Settings
import game_function as gf

def run_game():
    # 初始化游戏并创建一个屏幕对象
    pygame.init()
    si_settings = Settings()
    screen = pygame.display.set_mode((si_settings.screen_width,
                                      si_settings.screen_height))
    pygame.display.set_caption("Black and White Iteration")

    # 创建白色方块编组
    white_squares = Group()

    # 创建白色方块群
    gf.create_fleet(si_settings, screen, white_squares)

    # 开始游戏的主循环
    while True:
        gf.check_events(white_squares)
        gf.updata_screen(si_settings, screen, white_squares)

run_game()

游戏的运行后的一些效果图片

初始界面:

单击其中一个方块后的图片:

节目中的第一题:

!!!转载请注明出处!!!

Qt黑白棋【ab剪枝、迭代加深】 用Qt写的界面,ai为独立的cpp文件,ai比较强,采用了alpha-beta剪枝 立即下载

相关推荐

用Python实现最强大脑.py

最强大脑游戏规则是用十秒钟记忆十个物品以及他们的编号,之后会清屏,然后弹出问题,根据提问回答五个物品的编号。 算法分析: 判断回答正确与否,如果正确,则答对的题数加1,重复以上步骤,直到答完五道题,显示答对的题数

puzzle(1312)黑白迭代、黑白无双

。。

nameofcsdn的博客 3272

最强大脑HTML5游戏源码

最强大脑HTML5游戏源码,运行需要服务器环境,已经反复测试,放心使用。

python解最强大脑: 黑白迭代

文章目录黑白迭代规则解法分析重要性质简化问题公式法合并多个公式推导公式高斯消元法可视化代码实现项目结构solve.pygui.pymain.py效果复杂度分析 本文思路参考https://zhuanlan.zhihu.com/p/152349573 黑白迭代规则 (已经看过的可以直接跳到下一部分了) B站视频: 最强大脑:B圈S圈层破圈突围赛,一对一挑战“黑白迭代” 解

stripe-python 5485

SMETANA 安装使用教程

关于SMETANA的安装和简单使用信息

qq_44940977的博客 1171

NX二次开发(python)-坯料尺寸(一)

一般在产品制造过程中,往往要判断一个模型在出模方向上的最小包容盒尺寸,在NX中可以用坯料尺寸命令实现,当然也有相应的代码实现,这或许可以帮助我们实现一些产品的坯料尺寸批量输出,节省人力。

dasfanfan的博客 819

用python 写一个倒计时,运行程序弹出页面框

打开后弹出框 ,输入整数,进行秒倒计时 点击查看作者原文

活到老学到老 9021

芯片设计中的STA实战:如何避免时序违例(含常见问题解析)

本文深入探讨了芯片设计中静态时序分析(STA)的实战应用,重点解析了如何避免时序违例。文章从STA的核心逻辑与约束制定出发,强调了将时序意识植入RTL编码与综合阶段的重要性,并详细介绍了后端物理实现中的时序收敛策略。同时,针对跨时钟域路径误报、多工艺角违例等常见问题提供了深度解析与调试技巧,旨在帮助IC设计工程师系统性地掌握时序分析与优化方法。

open4的博客 514

利用python wxpython库实现计时器 (秒表)

利用python wx库实现计时器

InferiorCoder的博客 4374

flowable工作流源码解析-DB访问

Flowable用了mybatis组件,又实现了自己的command和interceptor机制。具体是怎么实现的呢? 我们以Deployment操作为例,来看看它的调用链 调用端是Service接口, 它委托自己的commandExecutor去执行具体的Command. Command最终会调用到EntityManager,然后委托给ibatis的sqlsession来完成操作。 其中CommandExcutor调用command的地方有些复杂,我们展开看: CommandExecutor会维护一系

coobee的博客 2487

SOC设计必看!Tessent DRC检查中最容易踩的5个坑(附解决方案)

本文针对SOC设计中Tessent DRC检查的常见问题,详细分析了5个最易忽视的陷阱,包括时钟域交叉、扫描链虚连、多电压域规则等,并提供专业解决方案。特别针对芯片设计中的DFT验证难点,分享了经过验证的调试方法和Tessent工具使用技巧,帮助工程师提升DRC检查效率。

weixin_29280657的博客 496

最强大脑-黑白迭代

最强大脑-黑白迭代

myname114514的博客 261

FFmpeg + Qt 实现摄像头采集与 MP3 背景音乐 RTSP 推流

在直播或视频监控场景中,我们经常需要将摄像头画面与背景音乐混合后推送到 RTSP 服务器。本文将详细介绍如何使用Qt框架结合摄像头实时采集(Windows 下使用dshow,Linux 使用v4l2视频预览(显示为 QImage)视频 H.264 编码 + RTSP 推流从 MP3 文件读取音频,重采样为 AAC 编码并推流循环播放音频文件解决中文文件路径打开失败的问题文章将剖析每个技术环节的关键代码,并给出完整的类实现。

weixin_45397344的博客 504

python超级大脑游戏mooc_三人游超级大脑挑战

三人游超级大脑挑战这绝对是一款令你感觉到异常烧脑的手机游戏,游戏的规则十分简单,就是非常考验你的策略和脑力是否灵活,整个游戏是以智力闯关为主要玩法的,每一个关卡内都会有着很多的挑战和难题,充满了趣味的同时又具有很大的挑战,喜欢的伙伴们可以来下载挑战一下。三人游超级大脑挑战特点1、想知道你是否足够聪明吗,这个游戏可以满足你,多种充满挑战的关卡,让你展现自己的实力。2、如果你的大脑被荒废了许久,那么这...

weixin_39812577的博客 538

基于DPCNN实现电商情感分析任务

下载链接项目中使用的模型是DPCNN,在模型中我们定义了三个组件,分别是embedding层,卷积层和全连接层。Embedding层:将每个词生成对应的嵌入向量,就是利用一个连续型向量来表示每个词卷积层:提取语句中的语义信息Linear层:将结果映射成2大小用于二分类,即正反面的概率。

优快云 精品推荐 1629

AI大模型探索之路-认知篇1-全景透视:揭秘AIGC技术的进化之路

随着人工智能技术的突飞猛进,内容创作方式的发生了革命性的转变;从早期专业人员主导的内容生产,到现如今生成式人工智(AIGC)能创作时代;本篇文章主要讲解AIGC技术的演变历程。

寻道AI,探索AI无限可能! 1650

「python」2020十大Python函式库有哪些?快来看看~(1)

十大最强Python函式库,里面的东西相信你已经迫不及待想知道啦! 国外的机器学习与资料科学顾问公司「Tryolabs」每年底都会选出年度十大最强Python函式库。去年(2020)年尾不例外。 根据Tryolabs 提出的免责声明,2020 年他们在精选出10 大函式库时,在很大程度上是受到机器学习与数据科学的影响——尽管其中有几个确实对「非」数据科学的人士非常有用。 因此,除了10个入选的Python函式库之外,他们决定再从遗珠之憾中,挑出几个他们觉得同样重要的数据库,列入「荣誉表扬(Honorable

学海无涯苦作舟的博客 278

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

2020年最强Python库

蕾师师 发自 凹非寺量子位 报道 | 公众号 QbitAI2020年已经过去了,国外的一家专门提供Python服务的网站Troy Labs,盘点出了2020年发布的Python库T...

Python研究所 432

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

2020年最强Python库!

蕾师师 发自 凹非寺量子位 报道 | 公众号 QbitAI2020年已经过去了,国外的一家专门提供Python服务的网站Troy Labs,盘点出了2020年发布的Python库T...

Python研究所 770

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

最强 Python 库,年度 Top10 出炉!

点击????方“逆锋起笔”,公众号回复编程资源领取大佬们推荐的学习资料蕾师师 发自 凹非寺 量子位 报道2020年已经过去了,国外的一家专门提供Python服务的网站Troy Labs,盘点出...

weixin_38754349的博客 311

2020年最强Python库年度Top10出炉(上)

2020年最强Python库,年度Top10出炉(上) 1、Typer Typer跟FastAPI的原理相同,都是Python上用来构建API服务的一个高性能框架。 它是FastAPI的升级版,不仅能够准确地记录代码,还能够轻松地进行CLI验证。 Typer易于学习和使用,不需要用户阅读复杂的教程文档即可上手。支持编辑器(如VSCode)代码自动补全,提高开发人员的开发效率,减少bug的数量。 其次,Typer还能配合命令行神器Click使用,就可以利用Click的优点和插件,实现更复杂的功能。 2、Ri

qq_42992919的博客 339

抖音最强python_厉害了,这个牛逼!Python20行代码实现视频字符化

我们经常在B站,抖音等视频上看到一些字符鬼畜视频,主要就是将一个视频转换成字符的样子展现出来。看起来是非常高端,但是实际实现起来确是非常简单,我们只需要接触opencv模块,就能很快的实现视频字符化。但是在此之前,我们先看看我们实现的效果是怎样的:上面就是截取的一部分效果图,下面开始进入我们的主题。一、OpenCV的安装及图片读取在Python中我们只需要用pip安装即可,我们在控制台执行下列语句...

weixin_32163411的博客 954

谁是2020年最强Python库?年度Top10出炉

蕾师师 发自 凹非寺量子位 报道 | 公众号 QbitAI2020年已经过去了,国外的一家专门提供Python服务的网站Troy Labs,盘点出了2020年发布的Python库Top...

量子位 1243

谁是 2020 年最强 Python 库?年度 Top 10 出炉!

蕾师师 发自 凹非寺量子位 报道 | 公众号 QbitAI2020 年已经过去了,国外的一家专门提供 Python 服务的网站 Troy Labs,盘点出了 2020 年发布的 Pyt...

静觅 353
Silver97
博客等级 码龄9年 1粉丝 1原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值