当前位置: 首页 > news >正文

(四)、python程序--贪吃蛇游戏

一、绪论

贪吃蛇游戏。

已实现功能:

1、上下左右移动;

2、吃食物,随机生成食物;

3、碰撞检测,判断是否游戏结束。

二、代码分享

1、main.py

import pygame
import sys
import food as c_food
import snake as c_snakedef game_over():pygame.quit()sys.exit()def game_start():window_title = 'Snake-AI'window_size = (640, 480)grid_num = (16, 12)                  # 64列,48行grid_size = (40, 40)pygame.init()pg_clock = pygame.time.Clock()main_window = pygame.display.set_mode(window_size)pygame.display.set_caption(window_title)FOOD = c_food.food()SNAKE = c_snake.snake()move_dir = 0                                # 0,1,2,3    上下左右whether_eat = 0                             # 0未吃,1吃了whether_die = 0                             # 0活着,1diebody_list, not_body_list = SNAKE.init_body(grid_num)whether_eat, food_list = FOOD.make_food(1, not_body_list, [])while True:for event in pygame.event.get():if event.type == pygame.KEYDOWN:if event.key == pygame.K_UP and move_dir != 1:move_dir = 0elif event.key == pygame.K_DOWN and move_dir != 0:move_dir = 1elif event.key == pygame.K_LEFT and move_dir != 3:move_dir = 2elif event.key == pygame.K_RIGHT and move_dir != 2:move_dir = 3elif event.type == pygame.QUIT:game_over()not_body_list, body_list, whether_eat, whether_die = SNAKE.move_step(not_body_list, body_list, food_list, move_dir, grid_num)if whether_die == 1:body_list, not_body_list = SNAKE.init_body(grid_num)whether_eat, food_list = FOOD.make_food(1, not_body_list, [])whether_eat, whether_die = 0, 0whether_eat, food_list = FOOD.make_food(whether_eat, not_body_list, food_list)main_window.fill((0, 0, 0))FOOD.draw_food(food_list, main_window, grid_size)SNAKE.draw_body(body_list, main_window, grid_size)pygame.display.update()pg_clock.tick(5)if __name__ == '__main__':game_start()

2、snake.py

import pygameclass snake(object):def __init__(self):self.snake_color = pygame.Color(255, 255, 255)passdef move_step(self, not_body_list, body_list, food_list, move_dir, grid_num):whether_eat = 0whether_die = 0head = body_list[0].copy()if move_dir == 0:head[1] -= 1elif move_dir == 1:head[1] += 1elif move_dir == 2:head[0] -= 1elif move_dir == 3:head[0] += 1whether_die = self.hit_die(body_list, head, grid_num)if whether_die == 1:return not_body_list, body_list, whether_eat, whether_diewhether_eat = self.eat_food(food_list, head)body_list.insert(0, head)not_body_list.remove(head)if whether_eat == 0:not_body_list.append(body_list[-1])body_list.pop()return not_body_list, body_list, whether_eat, whether_diedef eat_food(self, food_list, head):# whether eat foodif head == food_list:return 1else:return 0def init_body(self, grid_num):body_list = [[int(grid_num[0]/2), int(grid_num[1]/2)]]  # 蛇的身体头在前,列行not_body_list = [[i + 1, j + 1] for i in range(grid_num[0]) for j in range(grid_num[1])]not_body_list.remove(body_list[0])return body_list, not_body_listdef draw_body(self, body_list, window, grid_size):for index in body_list:x = (index[0] - 1) * grid_size[0]y = (index[1] - 1) * grid_size[1]rec = (x, y, grid_size[0]-1, grid_size[1]-1)pygame.draw.rect(window, self.snake_color, rec)def hit_die(self, body_list, head, grid_num):# hit wallif head[0] <= 0 or head[0] > grid_num[0]:return 1if head[1] <= 0 or head[1] > grid_num[1]:return 1# hit itselfif head in body_list:return 1return 0

3、food.py

import pygame
import randomclass food(object):def __init__(self):self.food_color = pygame.Color(255, 0, 0)passdef make_food(self, whether_eat, not_body_list, food_list):if whether_eat == 1:position = random.randrange(1, len(not_body_list))food_list = not_body_list[position]whether_eat = 0return whether_eat, food_listdef draw_food(self, food_list, window, grid_size):x = (food_list[0] - 1) * grid_size[0]y = (food_list[1] - 1) * grid_size[1]rec = (x, y, grid_size[0], grid_size[1])pygame.draw.rect(window, self.food_color, rec)

相关文章:

(四)、python程序--贪吃蛇游戏

一、绪论 贪吃蛇游戏。 已实现功能&#xff1a; 1、上下左右移动&#xff1b; 2、吃食物&#xff0c;随机生成食物&#xff1b; 3、碰撞检测&#xff0c;判断是否游戏结束。 二、代码分享 1、main.py import pygame import sys import food as c_food import snake as c…...

什么是DNS欺骗

DNS欺骗&#xff08;DNS Spoofing&#xff09;&#xff0c;也称为DNS缓存中毒&#xff08;DNS Cache Poisoning&#xff09;&#xff0c;是一种网络攻击形式&#xff0c;攻击者通过操纵DNS记录&#xff0c;将用户重定向到一个伪造的、恶意的网站。这些恶意网站可能看起来与用户…...

C++实现对结构体信息排序

思路解读&#xff1a; 定义结构体 Student: 结构体 Student 用来表示学生信息&#xff0c;包含两个成员变量&#xff1a;name&#xff08;学生姓名&#xff09;和 score&#xff08;学生分数&#xff09;。Student 结构体定义了一个构造函数&#xff0c;用于初始化 name 和 sco…...

[CTF]-PWN:House of Cat堆题型综合解析

原理&#xff1a; 调用顺序&#xff1a; exit->_IO_wfile_jumps->_IO_wfile_seekoff->_IO_switch_to_wget_mode _IO_wfile_seekoff源码&#xff1a; off64_t _IO_wfile_seekoff (FILE *fp, off64_t offset, int dir, int mode) {off64_t result;off64_t delta, new…...

18.按键消抖模块设计(使用状态机,独热码编码)

&#xff08;1&#xff09;设计意义&#xff1a;按键消抖主要针对的时机械弹性开关&#xff0c;当机械触点断开、闭合时&#xff0c;由于机械触点的弹性作用&#xff0c;一个按键开关在闭合时不会马上稳定地接通&#xff0c;在断开时也不会一下子就断开。因而在闭合以及断开的瞬…...

【Hec-HMS】第一期:模型简介及软件安装

HEC-HMS模型简介及软件安装 HEC-HMS模型简介建模思路 HEC-HMS软件安装步骤1&#xff1a;安装InstallShield Wizard步骤2&#xff1a;安装HEC-HMS 参考 HEC-HMS模型简介 HEC-HMS(The Hydrologic Engineering Center’s-Hydrologic Modelimng System)&#xff0c;美国陆军工程兵…...

逻辑回归不是回归吗?那为什么叫回归?

RNN 逻辑回归不是回归吗&#xff1f;那为什么叫回归&#xff1f;逻辑回归的基本原理逻辑函数&#xff08;Sigmoid函数&#xff09;二元分类 为什么叫做“回归”&#xff1f;逻辑回归的应用场景总结 逻辑回归不是回归吗&#xff1f;那为什么叫回归&#xff1f; 逻辑回归&#x…...

Activity对象的部分常见成员变量

在Android开发中&#xff0c;Activity 类是一个非常重要的类&#xff0c;它代表了应用程序中的一个屏幕。每个Activity都有一系列的成员变量和方法&#xff0c;这些成员变量通常用于控制和管理活动生命周期、UI界面元素、应用资源等。虽然具体的成员变量会根据Android的不同版本…...

量化交易策略:赌徒在股市会运用凯利公式(附python代码)

一、凯利公式的历史 凯利公式(Kelly Criterion)是由美国贝尔实验室物理学家约翰拉里凯利(John Larry Kelly)于1956年提出的,用于计算最优投资比例的一种数学公式。凯利公式的核心思想是:在期望收益和风险之间找到一个平衡点,使得投资者在承担一定风险的情况下,能够获得…...

信息系统项目管理师【一】英文选择题词汇大全(1)

一、计算机相关词汇 数据挖掘 Data Mining分布式计算 Distributed Computing云计算 Cloud Computing物联网 IOT Internet of Things大数据 Big Data人工智能 artificial intelligence互联网 Internet plus区块链 Blockchain5G 5th-Generation感知层 sensing layer机器学习 mac…...

怎么判断自己是否适合学习PMP?

判断自己是否适合学习PMP项目管理专业人士认证&#xff0c;可以从以下几个方面进行考量&#xff1a; 1、职业发展需求&#xff1a; 如果您在项目管理领域工作&#xff0c;或计划未来从事相关工作&#xff0c;PMP认证能显著提升您的竞争力。 对于项目经理、产品经理、技术领导…...

最新的数据防泄密方案来袭!

沙箱技术作为一种先进的数据安全解决方案&#xff0c;在数据防泄密领域发挥着日益重要的作用。它通过构建一个隔离的虚拟环境&#xff0c;使得应用程序在该环境中运行&#xff0c;从而隔离了应用程序对系统资源的直接访问&#xff0c;有效防止了数据泄露的风险。 一、沙箱技术在…...

Python数据处理之高效校验各种空值技巧详解

概要 在编程中,处理空值是一个常见且重要的任务。空值可能会导致程序异常,因此在进行数据处理时,必须确保数据的有效性。Python 提供了多种方法来处理不同数据对象的空值校验。本文将详细介绍如何对Python中的各种数据对象进行空值校验,并包含相应的示例代码,帮助全面掌握…...

Spring Boot与RSocket的集成

Spring Boot与RSocket的集成 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 一、引言 RSocket是一个基于异步、消息驱动的网络协议&#xff0c;旨在解决微服…...

UI Toolkit generateVisualContent的使用

方法描述: Called when the VisualElement visual contents need to be (re)generated. When this delegate is handled, you can generate custom geometry in the content region of the VisualElement. For an example, see the MeshGenerationContext documentation. This…...

第十六章 ValidationPipe验证post请求参数

在此之前我们用到的请求都是get请求&#xff0c;接下来我们使用post 请求 并接收参数&#xff0c;通过 Body 装饰器来取注意&#xff1a;post请求带参数 我们通过游览器路径是直接请求不了的 需要使用postman 来发 post 请求postman 下载网站 https://www.postman.com/download…...

HippoRAG如何从大脑获取线索以改进LLM检索

知识存储和检索正在成为大型语言模型(LLM)应用的重要组成部分。虽然检索增强生成(RAG)在该领域取得了巨大进步&#xff0c;但一些局限性仍然没有克服。 俄亥俄州立大学和斯坦福大学的研究团队推出了HippoRAG&#xff0c;这是一种创新性的检索框架&#xff0c;其设计理念源于人类…...

求函数最小值-torch版

目标&#xff1a;torch实现下面链接中的梯度下降法 先计算 的导函数 &#xff0c;然后计算导函数 在处的梯度 (导数) 让 沿着 梯度的负方向移动&#xff0c; 自变量 的更新过程如下 torch代码实现如下 import torchx torch.tensor([7.5],requires_gradTrue) # print(x.gr…...

如何将HEVC格式的视频转换为无损、未压缩的MP4格式视频?

在和大家分享视频格式转换之前&#xff0c;先跟大家分享一下HEVC格式的视频到底是什么文件&#xff1f;压缩原理是什么&#xff1f;了解了它的本质之后&#xff0c;我们就可以知道如何保证视频高清无损了。 如何将HEVC格式的视频转换为无损、未压缩的MP4格式视频&#xff1f; …...

自定义在线活动报名表单小程序源码系统 源代码+搭建部署教程 可二次定制开发

系统概述 在数字化时代&#xff0c;线上活动成为连接用户与组织的重要桥梁。为了高效地管理活动报名流程&#xff0c;一款灵活、易用的在线活动报名表单小程序显得尤为重要。本文旨在为开发者提供一套全面的解决方案&#xff0c;包括自定义在线活动报名表单小程序的源代码分析…...

数据挖掘工具Weka之第三方算法包的集成与实战

1. Weka第三方算法包的价值与场景 如果你用过Weka的基础功能&#xff0c;可能会发现自带的算法虽然丰富&#xff0c;但面对某些特殊任务时还是力不从心。比如要做电商用户分群&#xff0c;基础的k-means聚类只能处理数值型数据&#xff0c;而真实的用户画像包含大量分类变量&am…...

KLayout版图设计工具:从零开始掌握免费芯片设计解决方案

KLayout版图设计工具&#xff1a;从零开始掌握免费芯片设计解决方案 【免费下载链接】klayout KLayout Main Sources 项目地址: https://gitcode.com/gh_mirrors/kl/klayout 你是否正在寻找一款功能强大且完全免费的芯片版图设计工具&#xff1f;KLayout正是这样一个开源…...

终极免费跨平台Steam创意工坊下载器:告别重复购买,轻松获取1000+游戏模组

终极免费跨平台Steam创意工坊下载器&#xff1a;告别重复购买&#xff0c;轻松获取1000游戏模组 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在Epic Games Store或GOG…...

从原理到实践:InSAR技术如何重塑地表形变监测

1. 从雷达信号到毫米级形变&#xff1a;InSAR技术原理揭秘 想象一下&#xff0c;你站在湖边向平静的水面扔一块石头&#xff0c;水波会以同心圆的形式向外扩散。如果这时有人在水面另一处也扔了一块石头&#xff0c;两列水波相遇时就会产生干涉现象——有的地方波峰叠加变得更高…...

汽车电喷系统间歇性启动故障诊断:从信号缺失到精准修复

1. 故障现象与初步排查&#xff1a;一个“不合常理”的启动问题我父亲打电话来&#xff0c;说他的皮卡又启动不了了&#xff0c;得“灌点油”才能着车。我一听就觉得不对劲&#xff0c;这车是电喷的&#xff0c;又不是化油器老古董&#xff0c;哪有用汽油“灌喉”来启动的道理&…...

Codex:不只是程序员的代码助手,更是办公人士的高效伙伴

Codex&#xff1a;不只是程序员的代码助手&#xff0c;更是办公人士的高效伙伴 面向团队协作、文档处理、数据分析和日常执行的智能工作台 当人们谈到 Codex&#xff0c;第一反应往往是“写代码”。这当然是它的强项&#xff0c;但如果只把 Codex 看成程序员的专属工具&#…...

Ubuntu 20.04虚拟机重启后断网?别慌,用Netplan配置静态IP一劳永逸(附避坑指南)

Ubuntu 20.04虚拟机网络配置终极指南&#xff1a;Netplan静态IP与持久化方案 当你兴奋地启动Ubuntu 20.04虚拟机准备大展身手时&#xff0c;突然发现网络连接消失了——这不是个别现象。许多开发者在本地虚拟化环境或云平台中都遭遇过类似困扰。本文将彻底解决这个"幽灵断…...

AI工作流框架实战:从脚本到自动化流程的架构设计与应用

1. 项目概述&#xff1a;当AI遇上工作流最近在折腾自动化工具链&#xff0c;发现一个挺有意思的项目叫ai-flow。这名字听起来就挺直白&#xff0c;AI 工作流。简单来说&#xff0c;它就是一个用代码来编排和自动化AI任务&#xff08;比如调用大语言模型、处理数据、执行特定操…...

“腾讯给 DeepSeek 出资 60 亿,占约 2% 股权。另一家巨头未入局”

最近 DeepSeek 首轮外部融资的消息&#xff0c;引发全网关注&#xff0c;各种消息满天飞咯。①在 5 月 9 日的「DeepSeek 和阿里谈崩了」留言区&#xff0c;就有读者提到“腾讯曾提出认购最多 20% 股份&#xff0c;但因比例过高被婉拒。”今天又刷到鹅厂出资信息的另外一个版本…...

ANSYS Workbench网格进阶:巧用‘Face Meshing’与‘Sweep’扫掠,让你的轴承座仿真既快又准

ANSYS Workbench网格进阶&#xff1a;巧用‘Face Meshing’与‘Sweep’扫掠提升轴承座仿真效率 轴承座作为机械传动系统中的关键部件&#xff0c;其应力分布与变形分析的准确性直接影响设备可靠性评估。传统四面体网格虽能快速生成&#xff0c;但在应力集中区域往往需要极高密度…...