贪吃蛇作业

news/2024/9/22 13:25:42

贪吃蛇界面:

 代码:

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.ryyt.cn/news/61476.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

数据集的收集

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

数字签名是什么?

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

IDEA 2024.3 EAP新特征早览!

0 前言 IntelliJ IDEA 2024.3 第一个 EAP 版本已发布,提前体验 下一个重大版本的一部分改进。持续关注 EAP 更新,未来几周内将推出更多 IntelliJ IDEA 新功能。尝试这些新功能,分享您的反馈,共同完善 IDE。 1 AI 助手 1.1 内嵌 AI 提示词 推出一种全新方式,直接在编辑器中…

全面掌握 Jest:从零开始的测试指南(上篇)

随着JavaScript在前后端开发中的广泛应用,测试已成为保证代码质量的关键环节。 为什么需要单元测试 在我们的开发过程中,经常需要定义一些算法函数,例如将接口返回的数据转换成UI组件所需的格式。为了校验这些算法函数的健壮性,部分开发同学可能会手动定义几个输入样本进行…

存储论——经济订货批量模型精解

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

软工实践第二次作业

这个作业属于哪个课程 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。您…