和上一期不同的目标追踪入门不同的是,这期是自动追踪科学游戏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()
游戏将启动并显示窗口,运行文件你将看到自动追踪控制着蛇的移动,你可以调整速度或者是自动