DeepSeek几秒钟写的贪吃蛇代码!国产大模型就是强[特殊字符]!太牛了!
这段代码的作用是:监听玩家的键盘输入。根据输入改变蛇的移动方向。防止蛇反向移动(避免直接撞到自己)。在游戏结束后,忽略所有键盘输入。通过这段代码,玩家可以控制蛇的移动方向,而游戏逻辑会确保蛇不会做出无效的反向移动。真的很厉害呢!DeepSeek表示“文字无法正常显示通常与字体设置或渲染方式有关。import sys# 初始化Pygame# 游戏窗口尺寸# 颜色定义# 方块大小和移动速度FPS =
话不多说!来看代码!
我:请你用python写一个贪吃蛇游戏
DeepSeek:以下是一个使用Python和Pygame库实现的贪吃蛇游戏示例代码:
import pygame
import random
import sys
# 初始化Pygame
pygame.init()
# 游戏窗口尺寸
WIDTH = 640
HEIGHT = 480
# 颜色定义
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
# 方块大小和移动速度
CELL_SIZE = 20
FPS = 3
# 初始化窗口
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("贪吃蛇游戏")
clock = pygame.time.Clock()
# 蛇的初始设置
snake = [(WIDTH // 2, HEIGHT // 2)]
direction = (CELL_SIZE, 0)
# 食物初始位置
food = (random.randrange(0, WIDTH, CELL_SIZE),
random.randrange(0, HEIGHT, CELL_SIZE))
# 得分
score = 0
def draw_snake():
for index, pos in enumerate(snake):
color = GREEN if index == 0 else WHITE # 蛇头为绿色
pygame.draw.rect(screen, color, (pos[0], pos[1], CELL_SIZE, CELL_SIZE))
def generate_food():
while True:
new_food = (random.randrange(0, WIDTH, CELL_SIZE),
random.randrange(0, HEIGHT, CELL_SIZE))
if new_food not in snake:
return new_food
# 游戏主循环
running = True
game_over = False
while running:
# 事件处理
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if game_over:
continue
if event.key == pygame.K_UP and direction != (0, CELL_SIZE):
direction = (0, -CELL_SIZE)
elif event.key == pygame.K_DOWN and direction != (0, -CELL_SIZE):
direction = (0, CELL_SIZE)
elif event.key == pygame.K_LEFT and direction != (CELL_SIZE, 0):
direction = (-CELL_SIZE, 0)
elif event.key == pygame.K_RIGHT and direction != (-CELL_SIZE, 0):
direction = (CELL_SIZE, 0)
if not game_over:
# 移动蛇
new_head = (snake[0][0] + direction[0], snake[0][1] + direction[1])
# 碰撞检测
if (new_head in snake or
new_head[0] < 0 or new_head[0] >= WIDTH or
new_head[1] < 0 or new_head[1] >= HEIGHT):
game_over = True
else:
snake.insert(0, new_head)
# 吃食物检测
if snake[0] == food:
score += 1
food = generate_food()
pygame.display.set_caption(f"贪吃蛇游戏 - 得分: {score}")
else:
snake.pop()
# 绘制画面
screen.fill(BLACK)
# 绘制食物
pygame.draw.rect(screen, RED, (food[0], food[1], CELL_SIZE, CELL_SIZE))
# 绘制蛇
if not game_over:
draw_snake()
else:
# 游戏结束显示
font = pygame.font.Font(None, 74)
text = font.render("游戏结束!", True, WHITE)
screen.blit(text, (WIDTH // 2 - text.get_width() // 2, HEIGHT // 2 - text.get_height() // 2))
font = pygame.font.Font(None, 36)
text = font.render(f"最终得分: {score} 按任意键退出", True, WHITE)
screen.blit(text, (WIDTH // 2 - text.get_width() // 2, HEIGHT // 2 + 30))
pygame.display.flip()
clock.tick(FPS)
pygame.quit()
sys.exit()
这个游戏包含以下功能:
-
基本贪吃蛇游戏机制
-
蛇的移动控制(使用方向键)
-
食物生成和自动位置检测
-
碰撞检测(墙壁和自身)
-
得分系统
-
游戏结束画面
-
简单的图形界面
游戏规则:
-
使用方向键控制蛇的移动方向
-
吃到红色食物可以增长身体并得分
-
碰到墙壁或自己身体时游戏结束
-
游戏结束时会显示最终得分
运行这个程序需要安装pygame库,可以使用以下命令安装:
pip install pygame
这个实现包含了贪吃蛇游戏的核心逻辑,你可以通过修改以下参数来自定义游戏:
-
修改CELL_SIZE来改变蛇和食物的大小
-
调整FPS来改变游戏速度
-
修改颜色常量来改变游戏外观
-
调整WIDTH和HEIGHT来改变游戏窗口大小
游戏结束后,按任意键可以退出游戏。
下面是代码运行后的效果:
得分为0的情况:
似乎没有显示出"游戏结束!""最终得分""按任意键退出"等文字。
游戏进行中:
游戏结束:
来看看DeepSeek对代码的部分解释:
我:
if game_over:
continue
if event.key == pygame.K_UP and direction != (0, CELL_SIZE):
direction = (0, -CELL_SIZE)
elif event.key == pygame.K_DOWN and direction != (0, -CELL_SIZE):
direction = (0, CELL_SIZE)
elif event.key == pygame.K_LEFT and direction != (CELL_SIZE, 0):
direction = (-CELL_SIZE, 0)
elif event.key == pygame.K_RIGHT and direction != (-CELL_SIZE, 0):
direction = (CELL_SIZE, 0)
能解释一下这段代码吗?
DeepSeek:
这段代码是贪吃蛇游戏中的键盘事件处理逻辑,用于控制蛇的移动方向。它的作用是监听玩家的键盘输入,并根据输入改变蛇的移动方向。以下是对这段代码的详细解释:
代码结构
if game_over:
continue
if event.key == pygame.K_UP and direction != (0, CELL_SIZE):
direction = (0, -CELL_SIZE)
elif event.key == pygame.K_DOWN and direction != (0, -CELL_SIZE):
direction = (0, CELL_SIZE)
elif event.key == pygame.K_LEFT and direction != (CELL_SIZE, 0):
direction = (-CELL_SIZE, 0)
elif event.key == pygame.K_RIGHT and direction != (-CELL_SIZE, 0):
direction = (CELL_SIZE, 0)
逐行解释
-
if game_over: continue
-
如果游戏已经结束(
game_over
为True
),则跳过后续的键盘事件处理。 -
这意味着在游戏结束后,玩家按任何键都不会影响蛇的移动。
-
-
if event.key == pygame.K_UP and direction != (0, CELL_SIZE):
-
如果玩家按下了上方向键(
pygame.K_UP
),并且蛇当前的方向不是向下((0, CELL_SIZE)
)。 -
如果条件满足,将蛇的方向设置为向上(
(0, -CELL_SIZE)
)。 -
为什么需要检查当前方向?
-
这是为了防止蛇直接反向移动。例如,如果蛇正在向下移动,玩家按下上方向键,蛇会立即反向,这会导致蛇撞到自己,游戏结束。因此,需要禁止这种操作。
-
-
-
elif event.key == pygame.K_DOWN and direction != (0, -CELL_SIZE):
-
如果玩家按下了下方向键(
pygame.K_DOWN
),并且蛇当前的方向不是向上((0, -CELL_SIZE)
)。 -
如果条件满足,将蛇的方向设置为向下(
(0, CELL_SIZE)
)。
-
-
elif event.key == pygame.K_LEFT and direction != (CELL_SIZE, 0):
-
如果玩家按下了左方向键(
pygame.K_LEFT
),并且蛇当前的方向不是向右((CELL_SIZE, 0)
)。 -
如果条件满足,将蛇的方向设置为向左(
(-CELL_SIZE, 0)
)。
-
-
elif event.key == pygame.K_RIGHT and direction != (-CELL_SIZE, 0):
-
如果玩家按下了右方向键(
pygame.K_RIGHT
),并且蛇当前的方向不是向左((-CELL_SIZE, 0)
)。 -
如果条件满足,将蛇的方向设置为向右(
(CELL_SIZE, 0)
)。
-
方向表示
-
蛇的移动方向用一个二维元组
(x, y)
表示:-
(0, -CELL_SIZE)
:向上移动(y 坐标减少) -
(0, CELL_SIZE)
:向下移动(y 坐标增加) -
(-CELL_SIZE, 0)
:向左移动(x 坐标减少) -
(CELL_SIZE, 0)
:向右移动(x 坐标增加)
-
防止反向移动的逻辑
-
在每次按键事件中,代码会检查当前方向是否与按键方向相反。如果是相反方向,则忽略该按键。
-
例如:
-
如果蛇当前正在向右移动(
(CELL_SIZE, 0)
),玩家按下左方向键(pygame.K_LEFT
),代码会检查当前方向是否是(CELL_SIZE, 0)
。如果是,则忽略左方向键的输入,防止蛇反向移动。
-
总结
这段代码的作用是:
-
监听玩家的键盘输入。
-
根据输入改变蛇的移动方向。
-
防止蛇反向移动(避免直接撞到自己)。
-
在游戏结束后,忽略所有键盘输入。
通过这段代码,玩家可以控制蛇的移动方向,而游戏逻辑会确保蛇不会做出无效的反向移动。
真的很厉害呢!
DeepSeek表示“文字无法正常显示通常与字体设置或渲染方式有关。”下面是修改后的代码:
import pygame
import random
import sys
# 初始化Pygame
pygame.init()
# 游戏窗口尺寸
WIDTH = 640
HEIGHT = 480
# 颜色定义
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
# 方块大小和移动速度
CELL_SIZE = 20
FPS = 3
# 初始化窗口
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("贪吃蛇游戏")
clock = pygame.time.Clock()
# 蛇的初始设置
snake = [(WIDTH // 2, HEIGHT // 2)]
direction = (CELL_SIZE, 0)
# 食物初始位置
food = (random.randrange(0, WIDTH, CELL_SIZE),
random.randrange(0, HEIGHT, CELL_SIZE))
# 得分
score = 0
def draw_snake():
for index, pos in enumerate(snake):
color = GREEN if index == 0 else WHITE # 蛇头为绿色
pygame.draw.rect(screen, color, (pos[0], pos[1], CELL_SIZE, CELL_SIZE))
def generate_food():
while True:
new_food = (random.randrange(0, WIDTH, CELL_SIZE),
random.randrange(0, HEIGHT, CELL_SIZE))
if new_food not in snake:
return new_food
# 游戏主循环
running = True
game_over = False
while running:
# 事件处理
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if game_over:
continue
if event.key == pygame.K_UP and direction != (0, CELL_SIZE):
direction = (0, -CELL_SIZE)
elif event.key == pygame.K_DOWN and direction != (0, -CELL_SIZE):
direction = (0, CELL_SIZE)
elif event.key == pygame.K_LEFT and direction != (CELL_SIZE, 0):
direction = (-CELL_SIZE, 0)
elif event.key == pygame.K_RIGHT and direction != (-CELL_SIZE, 0):
direction = (CELL_SIZE, 0)
if not game_over:
# 移动蛇
new_head = (snake[0][0] + direction[0], snake[0][1] + direction[1])
# 碰撞检测
if (new_head in snake or
new_head[0] < 0 or new_head[0] >= WIDTH or
new_head[1] < 0 or new_head[1] >= HEIGHT):
game_over = True
else:
snake.insert(0, new_head)
# 吃食物检测
if snake[0] == food:
score += 1
food = generate_food()
pygame.display.set_caption(f"贪吃蛇游戏 - 得分: {score}")
else:
snake.pop()
# 绘制画面
screen.fill(BLACK)
# 绘制食物
pygame.draw.rect(screen, RED, (food[0], food[1], CELL_SIZE, CELL_SIZE))
# 绘制蛇
if not game_over:
draw_snake()
else:
# 游戏结束显示
# font = pygame.font.Font(None, 74)
# Windows系统常用中文字体
font_large = pygame.font.SysFont("simhei", 74) # 黑体
# font_large = pygame.font.SysFont("msyh", 74) # 微软雅黑
# font_large = pygame.font.SysFont("simsun", 74) # 宋体
text = font_large.render("游戏结束!", True, WHITE)
screen.blit(text, (WIDTH // 2 - text.get_width() // 2, HEIGHT // 2 - text.get_height() // 2))
# font_small = pygame.font.Font(None, 36)
font_small = pygame.font.SysFont("simhei", 36) # 黑体
# font_small = pygame.font.SysFont("msyh", 36) # 微软雅黑
# font_small = pygame.font.SysFont("simsun", 36) # 宋体
text = font_small.render(f"最终得分: {score} 按任意键退出", True, WHITE)
screen.blit(text, (WIDTH // 2 - text.get_width() // 2, HEIGHT // 2 + 30))
pygame.display.flip()
clock.tick(FPS)
pygame.quit()
sys.exit()
这下可以正常显示中文字体了!
更多推荐
所有评论(0)