和上一期不同的目标追踪入门不同的是,这期是自动追踪科学游戏hhh,话不多说,321上链接
一、项目背景
Snake游戏是一款经典的游戏,玩家需要控制一条蛇在屏幕上移动,吃掉食物并避免撞到自己的身体或墙壁。传统的Snake游戏通常需要玩家手动控制蛇的移动方向,而在本篇文章中,我们将介绍如何使用Python的pygame库来创建一个自动追踪目标的Snake游戏。通过自动追踪目标,游戏变得更加具有挑战性和趣味性。
二、准备工作
在开始之前,确保你已经安装了Python和pygame库。你可以使用以下命令通过pip安装pygame:
pip install pygame
三、创建游戏窗口:
接下来,我们需要初始化pygame并设置游戏窗口的参数。在Python脚本中,自定义一个python的文件,下面是窗口设置代码(头部可以调整为适应方块尺寸的自定义图片):
# 导入所需的库
import pygame # 导入pygame库
import time # 导入time库
import random # 导入random库
# 初始化pygame
pygame.init() # 初始化pygame
# 设置屏幕宽度和高度
dis_width = 800 # 设置屏幕宽度为800
dis_height = 600 # 设置屏幕高度为600
# 创建屏幕对象
dis = pygame.display.set_mode((dis_width, dis_height)) # 创建屏幕对象,设置宽度和高度
pygame.display.set_caption('Snake Game') # 设置窗口标题为'Snake Game'
# 设置游戏参数
snake_block = 10 # 设置贪吃蛇方块大小为10
snake_speed = 30 # 设置贪吃蛇移动速度为30
# 加载自定义图片
head_img = pygame.image.load('ball.PNG') # 加载自定义图片
head_img = pygame.transform.scale(head_img, (snake_block, snake_block)) # 调整图片大小以适应贪吃蛇方块大小
四、设置游戏元素及蛇的移动与追踪:
接下来,我们将设置游戏中的元素,包括蛇方块、食物方块以及蛇的初始位置和方向。在
# 定义贪吃蛇函数
def snake(snake_block, snake_list): # 定义贪吃蛇函数,接受贪吃蛇方块大小和贪吃蛇列表作为参数
for x in snake_list: # 遍历贪吃蛇列表
pygame.draw.rect(dis, (0, 255, 0), [x[0], x[1], snake_block, snake_block]) # 在屏幕上绘制贪吃蛇方块
# 定义游戏循环
def gameLoop(x1=1, y1=1): # 定义游戏循环函数
game_over = False # 初始化游戏结束标志为False
game_close = False # 初始化游戏关闭标志为False
# 初始化贪吃蛇位置
x1 = dis_width / 2 # 初始化贪吃蛇头部x坐标为屏幕宽度的一半
y1 = dis_height / 2 # 初始化贪吃蛇头部y坐标为屏幕高度的一半
x1_change = 0 # 初始化贪吃蛇x方向变化量为0
y1_change = 0 # 初始化贪吃蛇y方向变化量为0
snake_List = [] # 初始化贪吃蛇列表为空
Length_of_snake = 1 # 初始化贪吃蛇长度为1
# 随机生成食物位置
foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0 # 随机生成食物x坐标
foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0 # 随机生成食物y坐标
while not game_over: # 游戏未结束时循环
# 自动追踪食物
if x1 < foodx: # 如果贪吃蛇头部x坐标小于食物x坐标
x1_change = snake_block # 设置x方向变化量为贪吃蛇方块大小
y1_change = 0 # 设置y方向变化量为0
elif x1 > foodx: # 如果贪吃蛇头部x坐标大于食物x坐标
x1_change = -snake_block # 设置x方向变化量为贪吃蛇方块大小的负值
y1_change = 0 # 设置y方向变化量为0
elif y1 < foody: # 如果贪吃蛇头部y坐标小于食物y坐标
y1_change = snake_block # 设置y方向变化量为贪吃蛇方块大小
x1_change = 0 # 设置x方向变化量为0
elif y1 > foody: # 如果贪吃蛇头部y坐标大于食物y坐标
y1_change = -snake_block # 设置y方向变化量为贪吃蛇方块大小的负值
x1_change = 0 # 设置x方向变化量为0
# 更新贪吃蛇位置
x1 += x1_change # 更新贪吃蛇头部x坐标
y1 += y1_change # 更新贪吃蛇头部y坐标
# 绘制贪吃蛇和食物
dis.fill((50, 153, 213)) # 填充屏幕颜色
pygame.draw.rect(dis, (213, 50, 80), [foodx, foody, snake_block, snake_block]) # 绘制食物
snake_Head = [x1, 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 # 设置游戏关闭标志为True
snake(snake_block, snake_List) # 调用贪吃蛇函数绘制贪吃蛇
pygame.display.update() # 更新屏幕显示
# 绘制统计吃了多少球的小标志
font = pygame.font.Font(None, 25) # 设置字体和大小
text = font.render("Score: " + str(Length_of_snake - 1), True, (255, 255, 255)) # 渲染分数文本
dis.blit(text, (10, 10)) # 绘制分数文本到屏幕左上角
六、游戏循环及按钮设置
接下来,我们需要实现游戏的主循环,包括渲染游戏界面、处理事件、更新游戏状态和调用自动追踪函数及其按钮设置。在文件中继续添加以下代码:
# 在分数达到后暂停游戏并显示按钮的如下:
if Length_of_snake - 1 >= 88: # 如果分数达到88
# 显示通关提示
font = pygame.font.Font(None, 50) # 设置字体和大小
text = font.render("success!!!", True, (255, 255, 255)) # 渲染通关提示文本
dis.blit(text, (dis_width // 2 - 200, dis_height // 2 - 50)) # 绘制通关提示文本到屏幕中间
# 绘制重开和暂停按钮
continue_button = pygame.draw.rect(dis, (0, 255, 0),
(dis_width // 2 - 100, dis_height // 2 + 50, 100, 50)) # 绘制重开按钮
pause_button = pygame.draw.rect(dis, (255, 0, 0), (dis_width // 2, dis_height // 2 + 50, 100, 50)) # 绘制暂停按钮
# 绘制按钮文本
font = pygame.font.Font(None, 30) # 设置字体和大小
text = font.render("Reopen", True, (255, 255, 255)) # 渲染重开按钮文本
dis.blit(text, (dis_width // 2 - 80, dis_height // 2 + 65)) # 绘制重开按钮文本到屏幕中间
text = font.render("stop", True, (255, 255, 255)) # 渲染暂停按钮文本
dis.blit(text, (dis_width // 2 + 20, dis_height // 2 + 65)) # 绘制暂停按钮文本到屏幕中间
pygame.display.update() # 更新屏幕显示
while True: # 无限循环等待用户操作
for event in pygame.event.get(): # 遍历所有事件
if event.type == pygame.QUIT: # 如果事件类型为退出
pygame.quit() # 退出pygame
quit() # 退出游戏
if event.type == pygame.MOUSEBUTTONDOWN: # 如果事件类型为鼠标按下
mouse_pos = pygame.mouse.get_pos() # 获取鼠标位置
if continue_button.collidepoint(mouse_pos): # 如果鼠标点击了重开按钮
gameLoop(x1, y1) # 调用游戏循环函数,传入当前贪吃蛇头部坐标
break # 退出循环,重新开始游戏
elif pause_button.collidepoint(mouse_pos): # 如果鼠标点击了暂停按钮
pygame.quit() # 退出pygame
quit() # 退出游戏
七、游戏结束与退出
为了使游戏更加完整,我们还需要添加游戏结束和退出的逻辑。在文件中继续添加以下代码:
pygame.display.update() # 更新屏幕显示
# 更新食物位置
if x1 == foodx and y1 == foody: # 如果贪吃蛇头部坐标等于食物坐标
foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0 # 随机生成新的食物x坐标
foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0 # 随机生成新的食物y坐标
Length_of_snake += 1 # 贪吃蛇长度加1
time.sleep(snake_speed / 100000.0) # 控制游戏速度
pygame.quit() # 退出pygame
quit() # 退出游戏
gameLoop()
游戏将启动并显示窗口,运行文件你将看到自动追踪控制着蛇的移动,你可以调整速度或者是自动