Python教程:制作贪吃蛇游戏存以exe文件运行

news2024/10/23 16:07:27

Python,作为一种解释型、面向对象、动态数据类型的高级程序设计语言,其简洁易懂的语法和丰富的库使得它成为开发小游戏的理想选择。

下面,我们就来一步步教大家如何用Python制作一个贪食蛇小游戏,并将其打包成exe程序,让你即使没有Python环境也能轻松运行。

一、安装必要的库

首先,我们需要安装pygame库,它是一个用于编写视频游戏的Python模块。你可以在Anaconda Terminal中通过pip来安装:

pip install pygame

二、初始化游戏窗口

首先我们要生成贪食蛇游戏的初始窗口:

import pygame
import sys
import random
import time
  
# 初始化pygame
pygame.init()
  
# 设置游戏窗口大小
win_width, win_height = 640, 480  
window = pygame.display.set_mode((win_width, win_height))
pygame.display.set_caption('贪食蛇小游戏')

窗口默认尺寸是640×480,你可以条件这两个参数来调整窗口大小。


三、定义蛇和食物

有了初始窗口,接下来我们需要生成蛇的主体(一个白色的长方形),以及食物(绿色方块):

# 定义颜色
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
  
# 蛇的初始位置和大小
snake_pos = [100, 50]
snake_body = [[100, 50], [90, 50], [80, 50]]
snake_speed = 15  # 初始速度,数值越小速度越快
direction = 'RIGHT'  # 初始方向
  
# 食物的初始位置
food_pos = [random.randrange(1, win_width // 10) * 10, random.randrange(1, win_height // 10) * 10]
food_spawn = True

上面的代码涉及一些重要参数:

蛇的初始位置是通过二维坐标定义的,用户可以根据需求自行修改,但不可超过初始窗口的边界;

蛇的移动速度默认是15,如果觉得速度太慢可以改为更大的数值;

食物的初始位置可以任意指定。在后续的循环过程中,如果蛇吃掉了当前的食物,系统会自动随机生成新的食物。


四、游戏主循环 

接下来,我们需要构造游戏的主循环语句,主要完成下列任务:

根据用户的操作来更新蛇的位置;

判断蛇是否吃掉了食物;

判断是否需要更新蛇的长度并生成新的食物。

clock = pygame.time.Clock()

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP:
                if direction != 'DOWN':
                    direction = 'UP'
            if event.key == pygame.K_DOWN:
                if direction != 'UP':
                    direction = 'DOWN'
            if event.key == pygame.K_LEFT:
                if direction != 'RIGHT':
                    direction = 'LEFT'
            if event.key == pygame.K_RIGHT:
                if direction != 'LEFT':
                    direction = 'RIGHT'
            if event.key == pygame.K_ESCAPE:
                running = False

    # 更新蛇的位置
    head = list(snake_body[0])
    if direction == 'UP':
        head[1] -= 10
    if direction == 'DOWN':
        head[1] += 10
    if direction == 'LEFT':
        head[0] -= 10
    if direction == 'RIGHT':
        head[0] += 10

    snake_body.insert(0, list(head))

    # 检查是否吃到食物
    # ......此处省略部分代码
    # 绘制食物和蛇
    pygame.draw.rect(window, GREEN, (food_pos[0], food_pos[1], 10, 10))
    for pos in snake_body:
        pygame.draw.rect(window, WHITE, (pos[0], pos[1], 10, 10))

        # 检查游戏结束条件,确保只有碰到边界或自身时才结束游戏
        # ......此处省略部分代码
pygame.quit()
sys.exit()


五、打包成exe程序

最后,我们只需要把上述的代码打包成exe程序即可。

为了将Python脚本打包成exe程序,你可以使用pyinstaller库。首先,你需要在命令行中(例如Anaconda Terminal)安装它:

pip install pyinstaller

然后,使用以下命令将你的Python脚本(假设脚本名为snake_game.py)打包成exe程序。

例如我们上面的代码脚本是保存在D盘里,那么在打包的时候需要写出该脚本的绝对路径:

pyinstaller --onefile D:\snake.py --distpath D:\

打包完成后,你会在D盘下面找到生成的exe文件。

图片

双击打开exe文件即可运行程序,方向键控制方向,Esc键退出游戏。

图片

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

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

相关文章

活体人脸识别技术总结及实践

文章目录 1、背景2、人脸反伪装技术2.1 活体人脸识别常见模式2.2 学术上反伪装研究 3、工程实现3.1 Silent-Face3.2 Silent-Face模型转rknn3.3 Silent-Face模型的限制 1、背景 1.1 什么是活体检测? 在人脸识别之前,先判断一下屏幕前摄像头捕捉到的人脸是…

【Golang】Gin框架中如何定义路由

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

计算机网络:数据链路层 —— 无线局域网 WLAN

文章目录 局域网无线局域网 WLAN802.11 无线局域网802.11无线局域网的组成WLAN 的组成有固定基础设施的802.11无线局域网漫游服务 无固定基础设施的802.11无线局域网 802.11无线局域网的物理层802.11无线局域网的数据链路层不使用碰撞检测 CD 的原因CSMA/CA 协议CSMA/CA 协议的…

新探索研究生英语读写教程pdf答案(基础级)

《新探索研究生英语读写教程》的设计和编写充分考虑国内研究生人才培养目标和研究生公共英语的教学需求, 教学内容符合研究生认知水平, 学术特征突出;教学设计紧密围绕学术阅读、学术写作和学术研究能力培养;教学资源立体多元&…

阀井燃气监控仪-燃气阀门井数据远程监测设备-旭华智能

在城市的地下,有无数条看不见的生命线——那是为千家万户输送温暖与光明的燃气管线。然而,在这复杂的网络之下,隐藏着不可预知的风险。为了保障每一位市民的安全,我们推出了一款革命性的产品——“智安卫士”可燃气体监测终端。 随…

Python字符串处理深度解析:高级操作技巧、性能优化与实用案例全解

文章目录 前言💗一、字符串的定义与特点💘1.1 字符串的定义1.1.1 单引号和双引号的字符串定义:1.1.2 三引号定义多行字符串: 💘1.2 特点:💘1.3 字符串是序列小结: 💗二、…

软件设计模式------抽象工厂模式

抽象工厂模式(Abstract Factory Pattern),又称Kit模式,属于对象创建型模式。 一:先理解两个概念: (1)产品等级结构: 即产品的继承结构。 通俗来讲,就是不同品…

【计算机网络 - 基础问题】每日 3 题(四十九)

✍个人博客:https://blog.csdn.net/Newin2020?typeblog 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞…

如何通过智能T0算法增加持仓收益?

第一:什么是智能T0算法?什么是智能T0算法?简单来说,就是基于用户原有的股票持仓,针对同一标的,配合智能T0算法,每天全自动操作,高抛低吸,抓取行情波动价差。操作后每日持…

MySQL的安装(windows,Centos,ubuntu)

目录 在Windows下安装MySQL数据库 在Centos下安装MySQL数据库 在ubuntu下安装MySQL数据库 在Windows下安装MySQL数据库 安装程序的下载地址: https://dev.mysql.com/downloads/ 点击之后就会出现下面的页面 接下来根据安装提示进行操作即可 在Centos下安装MySQL数据库 1.确认…

VMware中Ubuntu安装

VMware官网:https://www.vmware.com/products/desktop-hypervisor/workstation-and-fusion 先在官网下载VMware,一直根据默认点下一步就好了,记得更改安装地址哦,否则默认下在C盘里。 先下载好Ubuntu映像文件:https://…

No.18 笔记 | XXE(XML 外部实体注入)漏洞原理、分类、利用及防御整理

一、XXE 漏洞概述 (一)定义 XXE(XML 外部实体注入)漏洞源于 XML 解析器对外部实体的不当处理,攻击者借此注入恶意 XML 实体,可实现敏感文件读取、远程命令执行和内网渗透等危险操作。 (二&am…

[含文档+PPT+源码等]精品基于Nodejs实现的水果批发市场管理系统的设计与实现

基于Node.js实现的水果批发市场管理系统的设计与实现背景,可以从以下几个方面进行阐述: 一、行业背景与市场需求 水果批发市场的重要性: 水果批发市场作为农产品流通的重要环节,承载着从生产者到消费者之间的桥梁作用。它的运营效…

传统园区与智慧园区:现代化发展的差异和优势

传统园区和智慧园区代表着城市发展不同阶段的产物,两者在功能、管理、环境等多个方面存在显著差异。通过对传统园区和智慧园区进行对比,可以清晰地看到智慧园区的诸多优势所在。 1. 功能对比: 传统园区通常以简单的生产、办公和商业为主要功…

1.深入理解MySQL索引底层数据结构与算法

文章目录 索引的概念数据结构二叉树红黑树B-B两者的区别 Hash 引擎数据所在位置对应关系MyISAMInnoDB 索引主键聚集索引非聚集索引联合索引 如有写的不对的请指正。 索引的概念 索引是帮助MySQL高效获取数据的排好序的数据结构 数据结构 网址: https://www.cs.us…

Kafka-设计思想-2

一、消息传递语义 现在我们对生产者和消费者的工作方式有了一些了解,让我们讨论一下Kafka在生产者和消费者之间提供的语义保证。 1、最多发送一次:会造成数据丢失 2、至少发送一次:会造成数据重复消费 3、只发送一次:我们想要的效…

MDB收款适配器MDBPOS

LETPOS精简版MDBPOS(直接连接MDB协议的刷卡器,按照设定价格收款,输出脉冲) 通过串口设定价格,脉冲宽度。 有人刷卡,扣款成功,输出脉冲,使用简单 适合把MDB协议的刷卡器连接到脉冲投…

【算法】归并排序概念及例题运用

📢博客主页:https://blog.csdn.net/2301_779549673 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文由 JohnKi 原创,首发于 CSDN🙉 📢未来很长&#…

小程序视频SDK解决方案,提供个性化开发和特效定制设计

美摄科技作为视频处理技术的领航者,深知在这一变革中,每一个细微的创新都能激发无限可能。因此,我们精心打造了一套小程序视频SDK解决方案,旨在满足不同行业、不同规模客户的多元化需求,携手共创视频内容的璀璨未来。 …

这几次比赛题解

因为考虑到再看&#xff0c;所以将所有题目都做成了pdf格式 梦熊十三连测 T1 这道题其实什么也不用想&#xff0c;就按照题目给的意思来打代码就行&#xff0c;这就有40分可以拿。懒人做法 #include<bits/stdc.h> using namespace std; typedef long long ll; ll read…