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

python制作贪吃蛇小游戏,畅玩无限制

前言

大家早好、午好、晚好吖 ❤ ~

现在这年头,无论玩个什么游戏都有健康机制,

这让我们愉悦玩游戏得步伐变得承重起来,

于是无聊之下我写了个贪吃蛇小游戏,来玩个快乐

代码展示

导入模块

import random
import sys
import time
import pygame
from pygame.locals import *
from collections import deque

( 源码、教程、文档、软件点击此处跳转跳转文末名片加入君羊,找管理员小姐姐领取呀~ )

外框设定

SCREEN_WIDTH = 600      # 屏幕宽度
SCREEN_HEIGHT = 480     # 屏幕高度
SIZE = 20               # 小方格大小
LINE_WIDTH = 1          # 网格线宽度

游戏区域的坐标范围

SCOPE_X = (0, SCREEN_WIDTH // SIZE - 1)
SCOPE_Y = (2, SCREEN_HEIGHT // SIZE - 1)

食物的分值及颜色

FOOD_STYLE_LIST = [(10, (255, 100, 100)), (20, (100, 255, 100)), (30, (100, 100, 255))]LIGHT = (100, 100, 100)
DARK = (200, 200, 200)      # 蛇的颜色
BLACK = (0, 0, 0)           # 网格线颜色
RED = (200, 30, 30)         # 红色,GAME OVER 的字体颜色
BGCOLOR = (40, 40, 60)      # 背景色def print_text(screen, font, x, y, text, fcolor=(255, 255, 255)):imgText = font.render(text, True, fcolor)screen.blit(imgText, (x, y))

初始化蛇

def init_snake():snake = deque()snake.append((2, SCOPE_Y[0]))snake.append((1, SCOPE_Y[0]))snake.append((0, SCOPE_Y[0]))return snakedef create_food(snake):food_x = random.randint(SCOPE_X[0], SCOPE_X[1])food_y = random.randint(SCOPE_Y[0], SCOPE_Y[1])while (food_x, food_y) in snake:# 如果食物出现在蛇身上,则重来food_x = random.randint(SCOPE_X[0], SCOPE_X[1])food_y = random.randint(SCOPE_Y[0], SCOPE_Y[1])return food_x, food_ydef get_food_style():return FOOD_STYLE_LIST[random.randint(0, 2)]def main():pygame.init()screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))pygame.display.set_caption('贪吃蛇')font1 = pygame.font.SysFont('SimHei', 24)  # 得分的字体font2 = pygame.font.Font(None, 72)  # GAME OVER 的字体fwidth, fheight = font2.size('GAME OVER')# 如果蛇正在向右移动,那么快速点击向下向左,由于程序刷新没那么快,向下事件会被向左覆盖掉,导致蛇后退,直接GAME OVER# b 变量就是用于防止这种情况的发生b = True

    snake = init_snake()

食物

    food = create_food(snake)food_style = get_food_style()

方向

    pos = (1, 0)game_over = Truestart = False       # 是否开始,当start = True,game_over = True 时,才显示 GAME OVERscore = 0           # 得分orispeed = 0.5      # 原始速度speed = orispeedlast_move_time = Nonepause = False       # 暂停while True:for event in pygame.event.get():if event.type == QUIT:sys.exit()elif event.type == KEYDOWN:if event.key == K_RETURN:if game_over:start = Truegame_over = Falseb = Truesnake = init_snake()food = create_food(snake)food_style = get_food_style()pos = (1, 0)# 得分score = 0last_move_time = time.time()elif event.key == K_SPACE:if not game_over:pause = not pauseelif event.key in (K_w, K_UP):# 这个判断是为了防止蛇向上移时按了向下键,导致直接 GAME OVERif b and not pos[1]:pos = (0, -1)b = Falseelif event.key in (K_s, K_DOWN):if b and not pos[1]:pos = (0, 1)b = Falseelif event.key in (K_a, K_LEFT):if b and not pos[0]:pos = (-1, 0)b = Falseelif event.key in (K_d, K_RIGHT):if b and not pos[0]:pos = (1, 0)b = False

填充背景色

        screen.fill(BGCOLOR)

画网格线 竖线

        for x in range(SIZE, SCREEN_WIDTH, SIZE):pygame.draw.line(screen, BLACK, (x, SCOPE_Y[0] * SIZE), (x, SCREEN_HEIGHT), LINE_WIDTH)

画网格线 横线

        for y in range(SCOPE_Y[0] * SIZE, SCREEN_HEIGHT, SIZE):pygame.draw.line(screen, BLACK, (0, y), (SCREEN_WIDTH, y), LINE_WIDTH)if not game_over:curTime = time.time()if curTime - last_move_time > speed:if not pause:b = Truelast_move_time = curTimenext_s = (snake[0][0] + pos[0], snake[0][1] + pos[1])if next_s == food:

吃到了食物

                        snake.appendleft(next_s)score += food_style[0]speed = orispeed - 0.03 * (score // 100)food = create_food(snake)food_style = get_food_style()else:if SCOPE_X[0] <= next_s[0] <= SCOPE_X[1] and SCOPE_Y[0] <= next_s[1] <= SCOPE_Y[1] \and next_s not in snake:snake.appendleft(next_s)snake.pop()else:game_over = True

画食物

        if not game_over:# 避免 GAME OVER 的时候把 GAME OVER 的字给遮住了pygame.draw.rect(screen, food_style[1], (food[0] * SIZE, food[1] * SIZE, SIZE, SIZE), 0)

画蛇

        for s in snake:pygame.draw.rect(screen, DARK, (s[0] * SIZE + LINE_WIDTH, s[1] * SIZE + LINE_WIDTH,SIZE - LINE_WIDTH * 2, SIZE - LINE_WIDTH * 2), 0)print_text(screen, font1, 30, 7, f'速度: {score//100}')print_text(screen, font1, 450, 7, f'得分: {score}')if game_over:if start:print_text(screen, font2, (SCREEN_WIDTH - fwidth) // 2, (SCREEN_HEIGHT - fheight) // 2, 'GAME OVER', RED)pygame.display.update()if __name__ == '__main__':main()

尾语 💝

好了,今天的分享就差不多到这里了!

完整代码、更多资源、疑惑解答直接点击下方名片自取即可。

有更多建议或问题可以评论区或私信我哦!一起加油努力叭(ง •_•)ง

喜欢就关注一下博主,或点赞收藏评论一下我的文章叭!!!

最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇👇

相关文章:

python制作贪吃蛇小游戏,畅玩无限制

前言 大家早好、午好、晚好吖 ❤ ~ 现在这年头&#xff0c;无论玩个什么游戏都有健康机制&#xff0c; 这让我们愉悦玩游戏得步伐变得承重起来&#xff0c; 于是无聊之下我写了个贪吃蛇小游戏&#xff0c;来玩个快乐 代码展示 导入模块 import random import sys import …...

MySQL-InnoDB数据页结构浅析

在MySQL-InnoDB行格式浅析中&#xff0c;们简单提了一下 页 的概念&#xff0c;它是 InnoDB 管理存储空间的基本单位&#xff0c;一个页的大小一般是 16KB 。 InnoDB 为了不同的目的而设计了许多种不同类型的 页&#xff1a; 存放表空间头部信息的页存放 Insert Buffer信息的…...

Java、JSP职工人事管理系统设计与实现

技术&#xff1a;Java、JSP等摘要&#xff1a;现在随着我们这个社会的计算机技术的快速发展&#xff0c;计算机在企业管理中得到普遍的应用&#xff0c;现在我们利用计算机在实现企业职工的管理越来越重要。当今社会是快速发展的信息社会&#xff0c;自动化信息的作用也变得越来…...

数据结构与算法这么难,为什么我们还要学习?

文章目录前言1. 数据结构与算法是什么&#xff1f;2. 为什么数据结构与算法很难&#xff1f;3. 如何系统学习数据结构与算法&#xff1f;&#x1f351; 复杂度&#x1f351; 线性表&#x1f351; 树形结构&#x1f351; 图&#x1f351; 排序&#x1f351; 字符串&#x1f351;…...

剑指 Offer 52. 两个链表的第一个公共节点

摘要 剑指 Offer 52. 两个链表的第一个公共节点 一、双指针解法 使用双指针的方法&#xff0c;可以将空间复杂度降至 O(1)。只有当链表 headA headB都不为空时&#xff0c;两个链表才可能相交。因此首先判断链表 headA和 headB是否为空&#xff0c;如果其中至少有一个链表为…...

可以写进简历的软件测试电商项目,不进来get一下?

前言 说实话&#xff0c;在找项目的过程中&#xff0c;我下载过&#xff08;甚至付费下载过&#xff09;N多个项目、联系过很多项目的作者&#xff0c;但是绝大部分项目&#xff0c;在我看来&#xff0c;并不适合你拿来练习&#xff0c;它们或多或少都存在着“问题”&#xff…...

蓝桥杯-算法-印章问题

这个题真的顶啊&#xff01;思路&#xff1a;n种图案&#xff0c;m张印章&#xff0c;每一个图案的概率是1/n&#xff0c;这个概率以后用P表示首先我们定义dp[i][j]是买了i张印章&#xff08;对应于上面的m&#xff09;&#xff0c;凑齐j种图案的概率&#xff08;对应于上面的n…...

戴尔游匣G16电脑U盘安装系统操作教程分享

戴尔游匣G16电脑U盘安装系统操作教程分享。有用户在使用戴尔游匣G16电脑的时候遇到了系统问题&#xff0c;比如电脑蓝屏、自动关机重启、驱动不兼容等问题。遇到这些问题如果无法进行彻底解决&#xff0c;我们可以通过U盘重新安装系统的方法来解决&#xff0c;因为这些问题一般…...

2023数学建模美赛赛题思路分析 2023美赛 美国大学生数学建模数模

将在本帖更新2023美国大学生数学建模数模美赛各个赛题思路&#xff0c;大家可以点赞收藏&#xff01; 一、参赛报名 组队参赛&#xff08;每队人数3人&#xff0c;专业不限&#xff09;。 二、赛题思路及资料 会在本帖更新思路分析&#xff0c;Q群可领取模型代码/赛题思路资料…...

vue3与vue2的对比

Vue 3.0 和 Vue 2.0 是 Vue 前端框架的两个主要版本&#xff0c;它们有着不同的更新和优化&#xff1a; Vue 3.0 主要更新内容&#xff1a; 采用 TypeScript 作为开发语言&#xff0c;提高了代码的类型安全性。 速度更快&#xff0c;内存使用更少&#xff0c;支持大规模数据处…...

史上最全软件测试工程师常见的面试题总结(百度、oppo、中软国际、华为)备战金三银四

1、面试&#xff1a;神州数码1.介绍你下你项目中一个自动化实现的流程2.你觉得做自动化的意义在哪里 >需要对之前已经实现的功能进行回归测试、保证当前版本更新的内容不能影响到之前已经实现好的功能3.你们做自动化产生了什么结果 >测试报告、报错截图和报错日志、测试报…...

“深度学习”学习日记。卷积神经网络--用CNN的实现MINIST识别任务

2023.2.11 通过已经实现的卷积层和池化层&#xff0c;搭建CNN去实现MNIST数据集的识别任务&#xff1b; 一&#xff0c;简单CNN的网络构成&#xff1a; 代码需要在有网络的情况下运行&#xff0c;因为会下载MINIST数据集&#xff0c;运行后会生成params.pkl保留训练权重&…...

JavaWeb--JDBC练习

JDBC练习5.1 需求5.2 案例实现5.2.1 环境准备5.2.2 查询所有5.2.3 添加数据5.2.4 修改数据5.2.5 删除数据5.1 需求 完成商品品牌数据的增删改查操作 查询&#xff1a;查询所有数据添加&#xff1a;添加品牌修改&#xff1a;根据id修改删除&#xff1a;根据id删除 5.2 案例实…...

【LeetCode】2335. 装满杯子需要的最短总时长

2335. 装满杯子需要的最短总时长 题目描述 现有一台饮水机&#xff0c;可以制备冷水、温水和热水。每秒钟&#xff0c;可以装满 2 杯 不同 类型的水或者 1 杯任意类型的水。 给你一个下标从 0 开始、长度为 3 的整数数组 amount &#xff0c;其中 amount[0]、amount[1] 和 a…...

Android 12.0 通过驱动实现禁用usb鼠标和usb键盘功能

1.1概述 在12.0的系统产品定制化开发中,在进行定制中有关于usb键盘和usb鼠标的需求中,产品要求禁止usb口挂载usb鼠标和usb键盘,所以需要要求在usb挂载类型的时候 判断如果是usb鼠标和usb键盘就不让挂载,这就需要从驱动方面入手来解决这个问题,接下来看下驱动的某些挂载usb…...

C++入门——内存管理

C入门——内存管理 C/C内存分布 分类是为了更好的管理 int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] {1, 2, 3, 4};char char2[] "abcd";char* pChar3 "abcd";int* ptr1 (…...

MySQL-InnoDB行格式浅析

简介 我们知道读写磁盘的速度非常慢&#xff0c;和内存读写差了几个数量级&#xff0c;所以当我们想从表中获取某些记录时&#xff0c; InnoDB 存储引擎需要一条一条的把记录从磁盘上读出来么&#xff1f; 不&#xff0c;那样会慢死&#xff0c;InnoDB 采取的方式是&#xff1a…...

AXI 总线协议学习笔记(4)

引言 前面两篇博文从简单介绍的角度说明了 AXI协议规范。 AXI 总线协议学习笔记&#xff08;2&#xff09; AXI 总线协议学习笔记&#xff08;3&#xff09; 从本篇开始&#xff0c;详细翻译并学习AXI协议的官方发布规范。 文档中的时序图说明&#xff1a; AXI指&#xff1…...

C++复习笔记6

1.String类的实现 注意深浅拷贝&#xff0c; C语言字符串拼接函数strcat() #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<vld.h> #include<assert.h> using namespace std;class String {friend ostream& operator<<(ostream &am…...

指针的步长及意义(C语言基础)

指针的步长及意义 文章目录指针的步长及意义指针变量1后偏移的字节数不同指针解引用时取出的字节数不同其他例子不同类型的指针有何不同的意义指针变量1后跳跃字节数量不同解引用的时候&#xff0c;取出字节数量不同 指针变量1后偏移的字节数不同 代码演示&#xff1a;&#…...

ARM动态内存控制器与SDRAM地址映射技术详解

1. ARM动态内存控制器基础解析动态内存控制器&#xff08;Dynamic Memory Controller&#xff0c;简称DMC&#xff09;是现代嵌入式系统中管理SDRAM等易失性存储器的核心组件。作为处理器与存储设备之间的桥梁&#xff0c;DMC通过高效的地址映射技术实现两者间的数据通信。在AR…...

汽车电子系统如何重构价值:从马力到算力的产业变革

1. 从马力到算力&#xff1a;汽车价值创造的核心迁移十年前&#xff0c;如果你问一个车迷&#xff0c;一辆好车的灵魂是什么&#xff0c;答案多半会指向引擎盖下的那台机器——它的排量、气缸数&#xff0c;以及最终输出的马力。那个时代&#xff0c;机械性能是绝对的王者&…...

大厂HR坦言:这3种“计算机巨坑”,90%的学生都在踩!如何逆袭成高薪抢手人?

文章指出&#xff0c;计算机专业就业难&#xff0c;但优秀人才依然稀缺。多数学生因方向错误导致努力白费。常见弯路包括&#xff1a;过度刷题缺乏项目、技术广博但不精、忽视GPA与实习。文章强调&#xff0c;学生需明确用人单位需求&#xff0c;重视项目与实习&#xff0c;夯实…...

Anthropic新模型Mythos号称擅查漏洞,扫描curl代码却仅确认1个低危问题

Mythos高调亮相&#xff0c;扫描结果却令人意外 近期&#xff0c;Anthropic推出的AI安全分析模型Mythos引发广泛关注&#xff0c;该公司宣称其在发现源代码安全漏洞方面表现出色&#xff0c;甚至因此暂缓公开发布。然而&#xff0c;当Mythos扫描全球最广泛使用的开源命令行HTTP…...

超净实验室建设公司厂家:如何根据需求选择方案|中南实验室建设

在半导体制造、地质微量元素分析、生物制药等高精度领域&#xff0c;实验环境的洁净度直接影响数据可靠性与产品良率。超净实验室作为核心基础设施&#xff0c;其建设需融合空气动力学、材料科学、自动化控制等多学科技术。 一、超净实验室建设公司厂家的设计规划&#xff1a;…...

从原理图到Vivado:手把手教你搞定XC7Z020-CLG400的EMIO引脚分配与约束

从原理图到Vivado&#xff1a;手把手教你搞定XC7Z020-CLG400的EMIO引脚分配与约束 在ZYNQ7000系列开发中&#xff0c;EMIO引脚的正确分配与约束是实现PS与PL协同工作的关键环节。许多工程师在初次接触ZYNQ架构时&#xff0c;往往会被MIO、EMIO和AXI_GPIO的关系所困扰&#xff…...

从零到一:OWASP ZAP实战渗透测试全流程解析

1. OWASP ZAP入门&#xff1a;渗透测试的瑞士军刀 第一次接触OWASP ZAP时&#xff0c;我完全被它复杂的界面吓到了。但用了三个月后&#xff0c;我发现这简直是Web安全测试的"瑞士军刀"——功能强大但需要正确打开方式。简单来说&#xff0c;ZAP就是个会自动帮你找网…...

现代差旅电力管理实战:从充电安全到设备续航全攻略

1. 一次久违的飞行&#xff1a;无处不在的电力焦虑与科技依赖距离上一次飞行已经过去了整整十七个月。当我上周踏入纽约拉瓜迪亚机场&#xff0c;准备开启后疫情时代的首次旅程时&#xff0c;感觉像是进入了另一个维度。在我缺席的这段时间里&#xff0c;LGA完成了一场彻底的蜕…...

macOS虚拟机解锁终极指南:在普通PC上运行苹果系统的完整解决方案

macOS虚拟机解锁终极指南&#xff1a;在普通PC上运行苹果系统的完整解决方案 【免费下载链接】unlocker VMware Workstation macOS 项目地址: https://gitcode.com/gh_mirrors/unlo/unlocker 想要在Windows或Linux电脑上体验macOS系统&#xff0c;但又不想花费高昂的价…...

Windows运行Android应用终极指南:APK Installer让你的电脑秒变安卓手机

Windows运行Android应用终极指南&#xff1a;APK Installer让你的电脑秒变安卓手机 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 在移动应用生态日益丰富的今天&…...