贪吃蛇作业

贪吃蛇界面:

 代码:

import pygame  
import random  
import sys  
import tkinter as tk  
from tkinter import messagebox 
# 初始化pygame  
pygame.init()  # 设置屏幕大小  
screen_width = 640  
screen_height = 480  
screen = pygame.display.set_mode((screen_width, screen_height))  # 设置颜色  
black = (0, 0, 0)  
white = (255, 255, 0)  
red = (0, 255, 255)  # 设置游戏参数  
snake_block = 20  
snake_speed = 7  # 蛇的初始位置和长度  
snake_list = [(screen_width // 2, screen_height // 2)]  
snake_length = 1  # 食物位置  
food_x = random.randint(0, (screen_width // snake_block) - 1) * snake_block  
food_y = random.randint(0, (screen_height // snake_block) - 1) * snake_block  

# 游戏方向  
direction = 'RIGHT'  
change_to = direction  # 游戏循环标志  
game_over = False  clock = pygame.time.Clock()  # 显示弹窗并退出游戏的函数
def show_game_over_message():root = tk.Tk()root.withdraw()  # 隐藏主窗口messagebox.showinfo("Game Over", "你失败了!")root.destroy()pygame.quit()sys.exit()# 游戏主循环  
while not game_over:  for event in pygame.event.get():  if event.type == pygame.QUIT:  game_over = True  if event.type == pygame.KEYDOWN:  if event.key == pygame.K_LEFT and direction != 'RIGHT':  change_to = 'LEFT'  if event.key == pygame.K_RIGHT and direction != 'LEFT':  change_to = 'RIGHT'  if event.key == pygame.K_UP and direction != 'DOWN':  change_to = 'UP'  if event.key == pygame.K_DOWN and direction != 'UP':  change_to = 'DOWN'  if change_to == 'LEFT' and direction != 'RIGHT':  direction = 'LEFT'  if change_to == 'RIGHT' and direction != 'LEFT':  direction = 'RIGHT'  if change_to == 'UP' and direction != 'DOWN':  direction = 'UP'  if change_to == 'DOWN' and direction != 'UP':  direction = 'DOWN'  # 移动蛇  if direction == 'RIGHT':  snake_head = (snake_list[-1][0] + snake_block, snake_list[-1][1])  if direction == 'LEFT':  snake_head = (snake_list[-1][0] - snake_block, snake_list[-1][1])  if direction == 'UP':  snake_head = (snake_list[-1][0], snake_list[-1][1] - snake_block)  if direction == 'DOWN':  snake_head = (snake_list[-1][0], snake_list[-1][1] + snake_block)  # 检查蛇是否撞到自己或边界  if snake_head[0] < 0 or snake_head[0] >= screen_width or snake_head[1] < 0 or snake_head[1] >= screen_height:  root = tk.Tk()root.withdraw()  # 隐藏主窗口messagebox.showinfo("Game Over", "你失败了!")root.destroy()game_over = True# 这里我们只检测蛇是否撞到自身的“身体”部分,不包括蛇头  if snake_head in snake_list[:-1]:root = tk.Tk()root.withdraw()  # 隐藏主窗口messagebox.showinfo("Game Over", "你失败了!")root.destroy()game_over = True  # 吃食物  if snake_head == (food_x, food_y):  snake_length += 1  food_x = random.randint(0, (screen_width // snake_block) - 1) * snake_block  food_y = random.randint(0, (screen_height // snake_block) - 1) * snake_block  
# 更新蛇的位置  snake_list.append(snake_head)  if len(snake_list) > snake_length:  del snake_list[0]  # 绘制屏幕  screen.fill(black)  for block in snake_list[:-1]:  pygame.draw.rect(screen, white, [block[0], block[1], snake_block, snake_block])  # 绘制蛇头为红色以区分  pygame.draw.rect(screen, red, [snake_list[-1][0], snake_list[-1][1], snake_block, snake_block])  pygame.draw.rect(screen, white, [food_x, food_y, snake_block, snake_block])  pygame.display.update()  clock.tick(snake_speed)  pygame.quit()  
sys.exit()  

 

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

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

相关文章

数据集的收集

我在这里找到了一个数据集的网站:https://www.kaggle.com/datasets 我这里找到了三个小数据集为例子分别如下: 我写的数据分析如下: 1.数据集名称房价回归数据集来源 https://www.kaggle.com/datasets/prokshitha/home-value-insights?resource=download数据集描述该数据集…

数字签名是什么?

原文:数字签名是什么?文中涉及的密码学基本知识,可以参见对称加密和非对称加密的区别。鲍勃有两把钥匙,一把是公钥,另一把是私钥。鲍勃把公钥送给他的朋友们——帕蒂、道格、苏珊——每人一把。苏珊要给鲍勃写一封保密的信。她写完后用鲍勃的公钥加密,就可以达到保密的效…

存储论——确定性存储模型模型精解

运筹学中的存储问题主要研究如何通过优化库存管理,确保在满足需求的同时,尽可能降低与库存相关的成本。这一问题在生产制造、物流运输、仓储等各个领域具有重要应用。核心目标是通过合理规划进货、存货和出货策略,实现成本最小化和资源的高效利用。在实际应用中,由于需求的…

软工实践第二次作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2024这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13253这个作业的目标 了解小型项目的设计学号 082100170github:完成情况因为对游戏设计没有多大兴趣,所以只是简单地完成了基本的消…

[MySQL]深分页优化

limit深分页为什么会变慢? 先看下表结构: CREATE TABLE account (id int(11) NOT NULL AUTO_INCREMENT COMMENT 主键Id,name varchar(255) DEFAULT NULL COMMENT 账户名,balance int(11) DEFAULT NULL COMMENT 余额,create_time datetime NOT NULL COMMENT 创建时间,update_t…

后台地址改了,忘记了,去哪个文件能查看啊

如果您忘记了EyouCMS后台地址,并且知道后台地址曾经被修改过,可以通过查找相关配置文件来确定后台地址。以下是查找EyouCMS后台地址的一般步骤: 查找EyouCMS后台地址查找登录入口文件:EyouCMS后台登录页面通常是在网站根目录下的某个文件,例如 admin.php 或 login.php。您…

如何查杀空间木马

查杀空间木马通常指的是检测和清除托管在Web服务器上的恶意代码或木马程序。这些木马可能是通过漏洞入侵您的网站或服务器后留下的。以下是一些查杀空间木马的基本步骤: 1. 使用安全软件进行扫描安装安全软件:可以使用如360安全卫士等安全软件来进行木马查杀。如果您的服务器…

后台登陆验证码怎么关闭

关闭后台登录验证码的方法因所使用的CMS系统不同而有所差异。以下是针对几个不同版本的织梦CMS(DedeCms)关闭后台登录验证码的方法: 织梦CMS 5.5 版本打开织梦CMS根目录下的 dede 文件夹。 找到 login.php 文件,并用文本编辑器打开。 查找以下代码:phpif($validate== || $…

开源项目dotnet/eshop 和 dotnet/eshopsupport

dotnet/eshop[1] 和 dotnet/eshopsupport[2] 是两个与 .NET 相关的开源项目,分别用于展示电子商务应用的不同方面。dotnet/eshop:功能与架构:dotnet/eshop 是一个基于 .NET Aspire 的参考电商应用,展示了服务架构在构建现代在线购物平台中的应用。项目涵盖产品目录、购物车和…

忘记eyoucms后台密码怎么办?

如果您忘记了EyouCMS后台的密码,可以通过以下几种方法来重置或恢复密码:使用官方提供的重置工具:官方提供了专门用于重置密码的工具 setpwd.php。您需要下载该文件,并将其上传到网站的根目录下。 访问 http://yousite.com/setpwd.php(将 yousite.com 替换为您自己的域名)…

能否判断自定义变量是否为空?

不同的编程语言有不同的方式来判断一个变量是否为空。下面列出了一些常见编程语言中判断变量是否为空的方法: 1. Java 在Java中,你可以使用多种方法来判断一个变量是否为空:对于对象:检查是否为 null。javaif (object == null) {System.out.println("变量为空");…

孙若涛第一次作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/zjlg/rjjc/这个作业的目标 介绍自己姓名 学号 孙若涛 2022329301090自我介绍 大家好,我是22电气二班的孙若涛,来自浙江慈溪。 兴趣爱好以及生活经历 我喜欢阅读和旅行,还有游戏。在暑假,我去了日本,度过了一段难忘的…