ChatGPT4写贪吃蛇游戏(Notion)[pygame的学习]

news2024/11/16 10:53:23

这里我使用的是Notion写出来的贪吃蛇,开始使用百度的文心一言来试下效果,生成了好几次的代码都是有bug,所以生成代码这块还得是ChatGPT。这篇主要就是了解下pygame库的一些方法,当然在没有安装这个库的,需要先安装,安装的时候还是一直都推荐的安装方法,带上国内镜像地址,这样下载速度快很多,本人喜欢带豆瓣镜像,在命令行执行如下命令:

pip install pygame -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

其中对于Notion在前面也有介绍,还跟百度的文心一言做了一下对比:
百度文心一言与Notion的比较(机器人通信的例子)
Notion的使用还是很方便的,有桌面客户端,登录一次之后,后期就不需要翻墙了。跟国内使用没有区别,推荐大家去体验。

代码来自Notion自动生成的,本人做了一些注释和修改,方便大家查阅,比如可以显示中文,使用自定义图片作为背景,而不是颜色填充。这里未修改之前的中文是乱码,需要注意的是这里的乱码不属于常规意义的编码问题,属于字体的问题。

font_style = pygame.font.SysFont(None, 30)

这种默认系统的字体,如果是中文就会显示乱码,于是指定系统里的一种字体:

font_style = pygame.font.Font('C:/WINDOWS/Fonts/simkai.ttf', 20)

贪吃蛇是一种比较简单的游戏,所以对于熟悉pygame库来说,是一种很好的入门示例,代码如下:

import pygame
import time
import random

pygame.init()

white = (255, 255, 255)
black = (0, 0, 0)
red = (255, 0, 0)
green = (0, 255, 0)
blue = (50, 153, 213)
# 游戏界面的宽高
dis_width = 600
dis_height = 400
dis = pygame.display.set_mode(size=(dis_width,dis_height)) #若size=(0,0)为全屏
pygame.display.set_caption('贪吃蛇')

clock = pygame.time.Clock() #每秒帧数(控制游戏的速度)

snake_block = 10 #蛇和食物的大小
snake_speed = 15 #蛇的频率或说速度

#font_style = pygame.font.SysFont(None, 30)
#显示中文
font_style = pygame.font.Font('C:/WINDOWS/Fonts/simkai.ttf', 20) 

# 绘制蛇(随着键盘操作,不断更新xy坐标位置)
def our_snake(snake_block, snake_List):
    for x in snake_List:
        pygame.draw.rect(dis, black, [x[0], x[1], snake_block, snake_block])

# 将游戏结束时的文字,绘制到屏幕1/6宽,1/3高的位置
def message(msg, color):
    mesg = font_style.render(msg, True, color)
    dis.blit(mesg, [dis_width / 6, dis_height / 3])

bg=pygame.image.load("D:/n.jpg")
def gameLoop():
    game_over = False
    game_close = False

    x1 = dis_width / 2
    y1 = dis_height / 2

    x1_change = 0
    y1_change = 0

    snake_List = []
    Length_of_snake = 1

    # 随机食物
    foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0
    foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0

    while not game_over:

        while game_close == True:
            #dis.fill(blue)
            dis.blit(bg,bg.get_rect())
            message("游戏结束!按大写Q键退出或者C键重新开始游戏", white)
            pygame.display.update()

            for event in pygame.event.get():
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_q:
                        game_over = True
                        game_close = False
                    if event.key == pygame.K_c:
                        gameLoop()
        
        # 按键事件下捕获上下左右键,注意方向
        for event in pygame.event.get():
            #右上角的关闭
            if event.type == pygame.QUIT:
                game_over = True
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                    x1_change = -snake_block
                    y1_change = 0
                elif event.key == pygame.K_RIGHT:
                    x1_change = snake_block
                    y1_change = 0
                elif event.key == pygame.K_UP:
                    y1_change = -snake_block
                    x1_change = 0
                elif event.key == pygame.K_DOWN:
                    y1_change = snake_block
                    x1_change = 0
        # 越界了,游戏结束
        if x1 >= dis_width or x1 < 0 or y1 >= dis_height or y1 < 0:
            game_close = True
        # 根据方向键进行坐标的更新
        x1 += x1_change
        y1 += y1_change
        #dis.fill(blue)
        bg=pygame.image.load("D:/n.jpg")
        dis.blit(bg,bg.get_rect())
        # 绘制食物
        pygame.draw.rect(dis, green, [foodx, foody, snake_block, snake_block])
        snake_Head = []
        snake_Head.append(x1)
        snake_Head.append(y1)
        snake_List.append(snake_Head)
        if len(snake_List) > Length_of_snake:
            del snake_List[0]

        # 首尾相连游戏结束
        for x in snake_List[:-1]:
            if x == snake_Head:
                game_close = True
        # 时刻更新蛇的状态
        our_snake(snake_block, snake_List)
        pygame.display.update()
        
        # 吃到食物,随机更新食物位置
        if x1 == foodx and y1 == foody:
            foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0
            foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0
            Length_of_snake += 1
            print("真棒!")

        clock.tick(snake_speed)

    pygame.quit()
    quit()

gameLoop()

 

 

修改背景为自定义图片:

 

当然还可以加一些音乐之类的,玩起来更有意思。

PS:说个题外话,很多人对于ChatGPT4的出现,产生了焦虑感,感觉会替代很多工作,甚至有人调侃首先就是代替了程序员的工作,在我看来是不会的,我一直保持一种乐观的看法,这种里程碑式的产品问世,大大提高了人们的工作效率,作为一种工具是不会将人代替的,当然会解雇一些人这个是肯定的。就以这个游戏代码为例来说明,如果说跨行业的来做程序,虽然可以运行,但需求是无止境的,就拿前面说的中文乱码的例子来说吧,如果只是寄希望于ChatGPT4,我想它也可能不会给出正确答案,因为ChatGPT4再怎么厉害,它还是需要大数据做基础的,而这些数据对于乱码问题基本都归咎于编码问题,于是会给出很多关于修改编码的答案,那我们知道这里其实就是指系统字体的原因。
对于能替代的事情,一般是一些重复的事情,比如工厂流水线操作,这些未来都将被机器人代替,而对于需要人去干预才能做好的事情,还是没法代替的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/438991.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【浅谈 new 与 delete】

目录&#xff1a; 前言new 与 delete内置类型自定义类型operator new 与 operator deletenew 和 delete 实现原理定位new 总结 前言 打怪升级&#xff1a;第39天 在C语言中&#xff0c;我们动态申请内存的方法是使用malloc函数&#xff0c;它的同胞兄弟还有calloc 和realloc&a…

php使用tcpdf,通过html生成的pdf文件,合同章(图片)错位?需要怎么解决

php使用tcpdf&#xff0c;通过html生成的pdf文件&#xff0c;合同章有错位&#xff1f;需要怎么解决&#xff1f; 1、html下的排版正确&#xff0c;如图&#xff1a; 2、html代码&#xff0c;如图 3、生成pdf后的文件&#xff0c;如图 $pdf->Image()&#xff0c;计算一下x、…

【QT】详细介绍Qt的窗口属性:Qt::WA_DeleteOnClose属性

目录 1. close()2. WA_DeleteOnClose属性3. 测试3.1 设置了 Qt::WA_DeleteOnClose 属性3.2 未设置 Qt::WA_DeleteOnClose 属性 4. 测试代码 1. close() 当我们创建一个窗口&#xff08;MainWindow, Widget, Dialog, QMessageBox, 等等&#xff09;后&#xff0c;我们一般会调用…

matlab绘制折线图基本操作

本篇博客主要总结matlab绘制折线图的基本操作&#xff0c;使用的函数是plot函数&#xff0c;关于plot的函数语法规则&#xff0c;这里不再赘述&#xff0c;可以参考matlab官方文档&#xff0c;https://ww2.mathworks.cn/help/matlab/ref/plot.html#d124e1037051&#xff0c;不看…

GIS开源库GEOS库学习教程(三):空间关系/DE-9IM/谓词

1、DE-9IM 要判断两个多边形的关系&#xff0c;实际上属于几何图形空间关系判断。几何图形并不只有多边形一种&#xff0c;它包括点、线、面构成的任何图形&#xff0c;两两之间相互关系也有很多种&#xff0c;因此空间关系非常复杂。根据前人的研究&#xff0c;总结出了DE-9IM…

图论经典A-Star(A*) Algorithm最短路径,networkx,Python(1)

图论经典A-Star(A*) Algorithm最短路径&#xff0c;networkx&#xff0c;Python&#xff08;1&#xff09; A-Star Algorithm&#xff0c;即为A*&#xff08;A星&#xff09;算法&#xff0c;图的最短路径。 &#xff08;1&#xff09;A-Star(A*)算法需要事先知道起点和终点才…

PhpStorm 2022.3.2消除顶部Windows窗口白色区域

问题图片&#xff1a; 解决方法&#xff1a;勾选Merge main menu with window title 效果图&#xff1a;

第三章:JavaScript 脚本语言(一)

一、简介 JavaScript是web页面中的一种脚本语言&#xff0c;由客户端浏览器解释执行。不需要编译&#xff0c;主要作用是将静态页面转换成用户交互的动态页面。 JavaScript主要有三大部分&#xff1a;ECMAScript (核心)&#xff0c;DOM&#xff08;文档对象模型&#xff09;&…

溯源取证-Linux内存取证 中难度篇

原谅我这么晚才出来文章&#xff0c;因为最近忙着录课&#xff0c;至于为啥没有基础篇&#xff0c;是因为靶场里没看见&#xff0c;哈哈 这个也是研究了好几个晚上才出来的东西&#xff0c;此处场景为linux环境下的rootkit病毒&#xff0c;我们通过这篇文章可以通过内存取证发…

Jmeter测试dubbo服务

1、什么是dubbo接口 Dubbo 接口是阿里巴巴开源的致力于提供高性能和透明化的RPC远程服务调用方案&#xff0c;以及SOA服务治理方案&#xff0c;dubbo框架告别了传统的web service的服务模式&#xff0c;进而改用provider和consumer模式进行服务。为什么是高性能的呢&#xff1f…

制作四个文件启动的镜像

一 环境搭建&#xff1a;vivado2018.3&#xff0c;petalinux2018.3&#xff0c; 1.petalinux环境设置 所使用的编译环境需要使用petalinux这个软件&#xff0c;《第五章Petalinux 的安装》里面的5.1-5.4。有详细的安装过程&#xff0c;按照第五章的顺序把环境搭建好。可以不装…

【PR 基础】新建序列

目录 一、新建序列 二、序列预设 三、设置 一、新建序列 在如下区域点击鼠标右键&#xff0c;选择 新建项目-》序列 或 点击工具栏中的文件-》新建-》序列 二、序列预设 &#xff08;1&#xff09;时基&#xff1a;就是指帧速率&#xff0c;也就是每秒播放帧的数量&#xf…

iOS Matter 操作证书签发方案

在 Matter 配网和操作中&#xff0c;为了信息交互的安全&#xff0c;在配网时&#xff0c;Commissioner自身需要完整的证书&#xff0c;同时需要向设备安装操作证书。 Matter 证书包含&#xff1a; RCA: 根证书 ICA: 中间证书&#xff0c;可选 NOC: 操作证书(注意有以下两种…

人工智能的前沿信息获取之使用文献数据库

人工智能的知识更新迭代非常迅速&#xff0c;因此对人工智能前沿的跟踪非常必要。本文主要介绍了使用文献数据库获取人工智能前沿信息的方法。 文献数据库是检索和下载论文的主要工具&#xff0c;对文献进行检索和下载的技巧在本科公共基础课《文献检索》或《信息检索》等类似…

家庭智能触摸面板开关一Homekit智能

触摸开关&#xff0c;即通过触摸方式控制的墙壁开关&#xff0c;其感官场景如同我们的触屏手机&#xff0c;只需手指轻轻一点即可达到控制电器的目的&#xff0c;随着人们生活品质的提高&#xff0c;触摸开关将逐渐将换代传统机械按键开关。 触摸开关控制原理 触摸开关我们把…

【ESP-IDF】介绍NVS

ESP-IDF是一款由乐鑫科技&#xff08;Espressif Systems&#xff09;开发的面向ESP32和ESP32-S系列芯片的开发框架&#xff0c;NVS&#xff08;Non-Volatile Storage&#xff09;是其中的一项功能。 NVS是一种用于在嵌入式系统中保存持久化数据的键值存储库。在ESP-IDF中&#…

虚拟化技术 — SR-IOV 单根 I/O 虚拟化

目录 文章目录 目录SR-IOVSR-IOV VEBSR-IOV VEPASR-IOV Multi-ChannelSR-IOV OvSSR-IOV 的应用使能 SR-IOV VFs挂在 VF 到 KVM 虚拟机中SR-IOV 的 NUMA 亲和性VF 的网络配置VFs Bonding SR-IOV 虚拟机的热迁移问题 SR-IOV 传统的 I/O 虚拟化方案需要 VMM 来捕获和模拟 VM 的 I…

400左右蓝牙耳机什么牌子音质好?400左右的无线蓝牙耳机推荐

过去几年苹果的AirPods深受大家欢迎&#xff0c;但要论最佳耳机&#xff0c;还要考虑佩戴类型&#xff0c;功能上又分降噪水平&#xff0c;甚至价格上也要实惠&#xff0c;毕竟对于不想太高预算来获得出色音质和舒适度的人来说&#xff0c;这也是他们心中的"最佳"产品…

Kubernetes那点事儿——调度策略

Kubernetes那点事儿——调度策略 前言一、静态Pod二、nodeSelector 节点选择器三、nodeName四、taint污点五、tolerations污点容忍六、容器资源限制七、nodeAffinity节点亲和性 前言 Kubernetes的强大之处离不开它的调度系统&#xff0c;它为Pod调度到某个Node上提供了多种方式…

Linux学习_设备树实现中断

Linux学习_设备树实现中断 中断层级结构设备树_中断控制器设备树_中断子节点驱动程序获取GPIO获取中断号申请中断中断处理函数 中断层级结构 就硬件而言&#xff0c;中断控制器指的就是GIC&#xff0c;但是实际在软件上&#xff0c;图中的GPIO等我们也称之为中断控制器。 外部…