使用Python的pygame库实现自动追踪目标的Snake游戏

和上一期不同的目标追踪入门不同的是,这期是自动追踪科学游戏,话不多说,321上链接

一、项目背景

  • Snake游戏是一款经典的游戏,玩家需要控制一条蛇在屏幕上移动,吃掉食物并避免撞到自己的身体或墙壁。传统的Snake游戏通常需要玩家手动控制蛇的移动方向,而在本篇文章中,我们将介绍如何使用Python的pygame库来创建一个自动追踪目标的Snake游戏。通过自动追踪目标,游戏变得更加具有挑战性和趣味性。 

 二、准备工作

你可以使用以下命令通过pip安装pygame:

pip install pygame

三、创建游戏窗口:

接下来,我们需要初始化pygame并设置游戏窗口的参数。

# 导入所需的库
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  # 初始化游戏结束标志为Falsegame_close = False  # 初始化游戏关闭标志为False# 初始化贪吃蛇位置x1 = dis_width / 2  # 初始化贪吃蛇头部x坐标为屏幕宽度的一半y1 = dis_height / 2  # 初始化贪吃蛇头部y坐标为屏幕高度的一半x1_change = 0  # 初始化贪吃蛇x方向变化量为0y1_change = 0  # 初始化贪吃蛇y方向变化量为0snake_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方向变化量为0elif x1 > foodx:  # 如果贪吃蛇头部x坐标大于食物x坐标x1_change = -snake_block  # 设置x方向变化量为贪吃蛇方块大小的负值y1_change = 0  # 设置y方向变化量为0elif y1 < foody:  # 如果贪吃蛇头部y坐标小于食物y坐标y1_change = snake_block  # 设置y方向变化量为贪吃蛇方块大小x1_change = 0  # 设置x方向变化量为0elif 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  # 设置游戏关闭标志为Truesnake(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()  # 退出pygamequit()  # 退出游戏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()  # 退出pygamequit()  # 退出游戏

效果显示:

 

七、游戏结束与退出

为了使游戏更加完整,我们还需要添加游戏结束和退出的逻辑:

   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  # 贪吃蛇长度加1time.sleep(snake_speed / 100000.0)  # 控制游戏速度pygame.quit()  # 退出pygamequit()  # 退出游戏gameLoop()

效果显示:(点击红色按钮直接退出)

 

  • 游戏将启动并显示窗口,运行文件你将看到自动追踪控制着蛇的移动,
  • 你可以调整速度或者是自动

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/645931.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

校园跑腿小程序源码系统+代取快递+食堂超市代买+跑腿 带完整的安装代码包以及搭建教程

随着移动互联网的普及&#xff0c;人们越来越依赖于手机应用来解决日常生活中的各种问题。特别是在校园内&#xff0c;由于快递点距离宿舍较远、食堂排队人数过多等情况&#xff0c;学生对于便捷、高效的服务需求愈发强烈。在此背景下&#xff0c;校园跑腿小程序源码系统应运而…

蓝桥杯备赛 week 3 —— 高精度(C/C++,零基础,配图)

目录 &#x1f308;前言&#xff1a; &#x1f4c1; 高精度的概念 &#x1f4c1; 高精度加法和其模板 &#x1f4c1; 高精度减法和其模板 &#x1f4c1; 高精度乘法和其模板 &#x1f4c1; 高精度除法和其模板 &#x1f4c1; 总结 &#x1f308;前言&#xff1a; 这篇文…

Linux/Academy

Enumeration nmap 首先扫描目标端口对外开放情况 nmap -p- 10.10.10.215 -T4 发现对外开放了22,80,33060三个端口&#xff0c;端口详细信息如下 结果显示80端口运行着http&#xff0c;且给出了域名academy.htb&#xff0c;现将ip与域名写到/et/hosts中&#xff0c;然后从ht…

【12.PWM输出】蓝桥杯嵌入式一周拿奖速成系列

系列文章目录 蓝桥杯嵌入式系列文章目录(更多此系列文章可见) PWM输出 系列文章目录一、STM32CUBEMX配置二、项目代码1.main.c --> PWMOutputProcess 总结 一、STM32CUBEMX配置 STM32CUBEMX PA6 ->TIM16_CH1; PA7-> TIM17_CH1 预分频设置为79,自动重装载设置999PWM输…

PyQtGraph 之PlotCurveItem 详解

PyQtGraph 之PlotCurveItem 详解 PlotCurveItem 是 PyQtGraph 中用于显示曲线的图形项。以下是 PlotCurveItem 的主要参数和属性&#xff1a; 创建 PlotCurveItem 对象 import pyqtgraph as pg# 创建一个 PlotCurveItem curve pg.PlotCurveItem()常用的参数和属性 setData(…

资源管理核心考点梳理

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 PMP - 资源管理核心考点梳理 资源管理包括人力资源和实物资源管理。学习的重点是人力资源的管理&#xff0c;这一章是考试的重点章节&#xff0c;在新考纲中&#xff0c;“人”这一模块在题目种的比例是42%。 01 …

14.块参照的旋转(BlockReference)

愿你出走半生,归来仍是少年&#xff01; 环境&#xff1a;.NET FrameWork4.5、ObjectArx 2016 64bit、Entity Framework 6. 在排水管网数据的编图时&#xff0c;时常会遇见针对雨水箅等进行旋转。由于数据存储在数据库内&#xff0c;通过CAD自带的旋转功能只能变更图面而无法…

SVG 矩形 – SVG Rectangle (3)

简介 rect 元素用于创建 SVG 矩形和矩形图形的变体。有六个属性决定矩形在屏幕上的形状和位置 x, y – 矩形左上角的 x, y 坐标width、height – 矩形的宽度和高度rx、ry – 矩形角的 x 和 y 半径 如果没有设置 x 和 y 属性&#xff0c;则矩形的左上角放置在点 (0,0) 处。 如…

Python 中的多进程(01/2):简介

一、说明 本文简要而简明地介绍了 Python 编程语言中的多处理&#xff08;多进程&#xff09;。解释多处理的基本信息&#xff0c;如什么是多处理&#xff1f;为什么用多处理&#xff1f;在python中怎么办等。 二、什么是多处理&#xff1f; 多处理是指系统同时支持多个处理器的…

C语言第八弹---一维数组

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 一维数组 1、数组的概念 2、⼀维数组的创建和初始化 2.1、数组创建 2.2、数组的初始化 2.3、数组的类型 3、⼀维数组的使用 3.1、数组下标 3.2、数组元素…

Vscode配置python代码开发

文章目录 1. 配置python运行环境2. 常用插件说明3. Vscode配置文件说明3.1 setting.json配置说明3.2 launch.json配置说明 4. 远程开发5. 其他配置 1. 配置python运行环境 安装python插件&#xff1a;点击VSCode左侧边栏中的扩展图标&#xff08;或按 CtrlShiftX&#xff09;&a…

从方法论到最佳实践,深度解析企业云原生 DevSecOps 体系构建

作者&#xff1a;匡大虎 引言 安全一直是企业上云关注的核心问题。随着云原生对云计算基础设施和企业应用架构的重定义&#xff0c;传统的企业安全防护架构已经不能够满足新时期下的安全防护要求。为此企业安全人员需要针对云原生时代的安全挑战重新进行系统性的威胁分析并构…

深度视觉目标跟踪进展综述-论文笔记

中科大学报上的一篇综述&#xff0c;总结得很详细&#xff0c;整理了相关笔记。 1 引言 目标跟踪旨在基于初始帧中指定的感兴趣目标( 一般用矩形框表示) &#xff0c;在后续帧中对该目标进行持续的定位。 基于深度学习的跟踪算法&#xff0c;采用的框架包括相关滤波器、分类…

Rust 通用代码生成器莲花发布红莲尝鲜版二十视频,支持 Nodejs 21,18 和 14

Rust 通用代码生成器莲花发布红莲尝鲜版二十视频&#xff0c;支持 Nodejs 21,18 和 14 Rust 通用代码生成器莲花发布红莲尝鲜版二十视频。此版本开始支持 Nodejs21,18 加上原来支持的 Nodejs 14。现在莲花支持三种 Nodejs 环境。适应性大大增强&#xff0c;也给您的使用带来了…

IDEA配置Maven教程

1.Maven下载 首先我们进入maven官方网站Maven – Welcome to Apache Maven&#xff0c;进入网页后&#xff0c;点击Download去下载 下载免安装版&#xff0c;解压即可,解压至磁盘任意目录&#xff0c;尽量不要取中文名如下图&#xff1a; 2.配置Maven环境变量 复制Maven所在的…

cms中getshell的各种姿势

cms中getshell的各种姿势 wordpress----getshell 这里wordpress后台&#xff0c;外观&#xff0c;主题&#xff0c;编辑&#xff0c;修改其中的404模版&#xff0c;保存后就可拿到shell 直接访问&#xff0c;就可以成功连接 另外&#xff0c;在主题中&#xff0c;可以上传 …

[蓝桥杯]真题讲解:景区导游(DFS遍历、图的存储、树上前缀和与LCA)

蓝桥杯真题讲解&#xff1a; 一、视频讲解二、暴力代码三、正解代码 一、视频讲解 视频讲解 二、暴力代码 //暴力代码&#xff1a;DFS #include<bits/stdc.h> #define endl \n #define deb(x) cout << #x << " " << x << \n; #de…

算法练习-螺旋矩阵(思路+流程图+代码)

难度参考 难度&#xff1a;中等 分类&#xff1a;数组 难度与分类由我所参与的培训课程提供&#xff0c;但需要注意的是&#xff0c;难度与分类仅供参考。以下内容均为个人笔记&#xff0c;旨在督促自己认真学习。 题目 给定一个正整数n&#xff0c;生成一个包含1到 n^2 所有元…

网络组件、设备和关系网络图【推荐】

目录 网络上的设备&#xff1a; 设备和台式计算机&#xff1a; 防火墙&#xff1a; 服务器&#xff1a; 集线器和交换机&#xff1a; 路由器&#xff1a; 调制解调器和无线接入点调制解调器&#xff1a; 无线接入点&#xff1a; 网络架构&#xff08;有时称为网络设计&…

SQL 系列教程(三)

目录 SQL INNER JOIN 关键词 SQL INNER JOIN 关键词 演示数据库 内连接&#xff08;INNER JOIN&#xff09;实例 连接三个表 SQL LEFT JOIN 关键词 SQL LEFT JOIN 关键词 演示数据库 SQL LEFT JOIN 实例 SQL RIGHT JOIN 关键词 SQL RIGHT JOIN 关键词 演示数据库 …