这里我使用的是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再怎么厉害,它还是需要大数据做基础的,而这些数据对于乱码问题基本都归咎于编码问题,于是会给出很多关于修改编码的答案,那我们知道这里其实就是指系统字体的原因。
对于能替代的事情,一般是一些重复的事情,比如工厂流水线操作,这些未来都将被机器人代替,而对于需要人去干预才能做好的事情,还是没法代替的。