好久不见~ 最近的ChatGPT非常智能非常火爆,于是,我想让他帮我写个贪吃蛇游戏,最后附代码。
# 前言
ChatGPT是一个基于自然语言处理技术的AI模型,由OpenAI公司开发出来。它可以进行对话、问答、生成文本等多项任务,并且在众多自然语言处理领域都取得了卓越的成就。ChatGPT的出现不仅极大地促进了人工智能和自然语言处理的发展,还为普通用户提供了一种全新的与机器交互的方式。本文将探讨ChatGPT的功能以及应用,希望能够让更多的人了解并认识这一强大的自然语言处理模型。
我:利用python写个贪吃蛇游戏
ChatGPT:
import pygame
import random
# 初始化pygame
pygame.init()
# 设置窗口大小和标题
window_size = (400, 400)
game_window = pygame.display.set_mode(window_size)
pygame.display.set_caption("Snake Game")
# 定义颜色
white = (255, 255, 255)
green = (0, 255, 0)
black = (0, 0, 0)
# 定义贪吃蛇起始位置、长度、速度和方向
snake_position = [100, 50]
snake_body = [[100, 50], [90, 50], [80, 50]]
snake_speed = 10
snake_direction = "RIGHT"
# 定义食物初始位置和颜色
food_position = [random.randrange(1, 40) * 10, random.randrange(1, 40) * 10]
food_color = green
# 显示得分
score = 0
font = pygame.font.SysFont(None, 35)
# 游戏主循环
game_over = False
while not game_over:
# 处理事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_over = True
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
snake_direction = "UP"
elif event.key == pygame.K_DOWN:
snake_direction = "DOWN"
elif event.key == pygame.K_LEFT:
snake_direction = "LEFT"
elif event.key == pygame.K_RIGHT:
snake_direction = "RIGHT"
# 移动贪吃蛇
if snake_direction == "RIGHT":
snake_position[0] += snake_speed
elif snake_direction == "LEFT":
snake_position[0] -= snake_speed
elif snake_direction == "UP":
snake_position[1] -= snake_speed
elif snake_direction == "DOWN":
snake_position[1] += snake_speed
# 如果贪吃蛇碰到边缘,或者撞到自己的身体,游戏结束
if snake_position[0] >= window_size[0] or snake_position[0] < 0:
game_over = True
if snake_position[1] >= window_size[1] or snake_position[1] < 0:
game_over = True
for block in snake_body[1:]:
if snake_position == block:
game_over = True
# 当贪吃蛇吃到食物时,更新贪吃蛇的长度并重新生成食物位置
if snake_position == food_position:
food_position = [random.randrange(1, 40) * 10, random.randrange(1, 40) * 10]
snake_body.insert(0, list(snake_position))
score += 10
# 更新贪吃蛇身体块的位置列表,将头部加入最前面,将尾部删除
snake_body.insert(0, list(snake_position))
snake_body.pop()
# 绘制窗口
game_window.fill(black)
# 绘制贪吃蛇和食物
for position in snake_body:
pygame.draw.rect(game_window, white, pygame.Rect(position[0], position[1], 10, 10))
pygame.draw.rect(game_window, food_color, pygame.Rect(food_position[0], food_position[1], 10, 10))
# 绘制得分
score_text = font.render("Score: " + str(score), True, white)
game_window.blit(score_text, [5, 5])
# 更新屏幕
pygame.display.update()
# 退出pygame
pygame.quit()
他直接帮我写了100多行代码,并附上注释以及说明:运行该程序之后,应该就能看到一个简单的贪吃蛇游戏窗口。玩家可以通过箭头键控制贪吃蛇的移动方向,移动并吃掉食物,使得贪吃蛇身体越来越长,并得到相应的得分。如果贪吃蛇碰到边缘或者自己的身体,则游戏结束。
我:上面的游戏写的在高级些
ChatGPT:
import pygame
import random
class Snake:
def __init__(self, position, speed):
self.position = position
self.body = [position]
self.speed = speed
self.direction = "RIGHT"
def change_direction(self, direction):
if direction == "RIGHT" and not self.direction == "LEFT":
self.direction = "RIGHT"
elif direction == "LEFT" and not self.direction == "RIGHT":
self.direction = "LEFT"
elif direction == "UP" and not self.direction == "DOWN":
self.direction = "UP"
elif direction == "DOWN" and not self.direction == "UP":
self.direction = "DOWN"
def move(self):
if self.direction == "RIGHT":
self.position[0] += self.speed
elif self.direction == "LEFT":
self.position[0] -= self.speed
elif self.direction == "UP":
self.position[1] -= self.speed
elif self.direction == "DOWN":
self.position[1] += self.speed
self.body.insert(0, list(self.position))
self.body.pop()
def eat_food(self, food_position):
if self.position == food_position:
self.body.insert(0, list(self.position))
return True
return False
def check_collision(self, window_size):
if self.position[0] >= window_size[0] or self.position[0] < 0:
return True
if self.position[1] >= window_size[1] or self.position[1] < 0:
return True
for block in self.body[1:]:
if self.position == block:
return True
return False
class Food:
def __init__(self, position):
self.position = position
self.color = (0, 255, 0)
def randomize_position(self, window_size):
self.position = [random.randrange(1, window_size[0]//10) * 10, random.randrange(1, window_size[1]//10) * 10]
def draw(self, game_window):
pygame.draw.rect(game_window, self.color, pygame.Rect(self.position[0], self.position[1], 10, 10))
class Game:
def __init__(self):
pygame.init()
self.window_size = (400, 400)
self.game_window = pygame.display.set_mode(self.window_size)
pygame.display.set_caption("Snake Game")
self.white = (255, 255, 255)
self.black = (0, 0, 0)
self.font = pygame.font.SysFont(None, 35)
self.score = 0
def start(self):
snake = Snake([100, 50], 10)
food = Food([200, 200])
game_over = False
clock = pygame.time.Clock()
while not game_over:
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_over = True
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
snake.change_direction("UP")
elif event.key == pygame.K_DOWN:
snake.change_direction("DOWN")
elif event.key == pygame.K_LEFT:
snake.change_direction("LEFT")
elif event.key == pygame.K_RIGHT:
snake.change_direction("RIGHT")
snake.move()
if snake.check_collision(self.window_size):
game_over = True
if snake.eat_food(food.position):
food.randomize_position(self.window_size)
self.score += 10
self.game_window.fill(self.black)
for position in snake.body:
pygame.draw.rect(self.game_window, self.white, pygame.Rect(position[0], position[1], 10, 10))
food.draw(self.game_window)
score_text = self.font.render("Score: " + str(self.score), True, self.white)
self.game_window.blit(score_text, [5, 5])
pygame.display.update()
clock.tick(15)
pygame.quit()
if __name__ == "__main__":
game = Game()
game.start()
好家伙,他直接将贪吃蛇、食物和游戏分别封装为Snake、Food和Game类,使得不同功能的代码更好地组织在一起,增加了代码的可读性,并且也方便了代码扩展。同时,在碰撞检测、食物随机位置生成等方面也做了一些改进,让游戏更加完善和流畅。
这只不过是ChatGPT展示的冰山一角,你们说未来的ChatGPT会发展成什么样子,欢迎讨论!!!