Python写一个简单的贪吃蛇程序
目录
游戏规则
游戏代码
游戏截图
补充说明
拓展延伸
游戏规则
使用↑ ↓ ← →四个键进行游玩,蛇头不能碰到自己
在结束时会有分数打在上面
游戏代码
#声明编码
# -*- coding utf-8 -*-
# 导入框架
import pygame
import random# 设置大小长度
W = 800
H = 600
size = (W, H)
# 设定游戏行列数
ROW = 30
COL = 40# 定义要使用的类(用来记录点坐标)
class Point:def __init__(self, row, col):self.row = rowself.col = coldef copy(self):return Point(row=self.row, col=self.col)# 定义绘画的函数
def rect(point, color):cell_width = W / COLcell_height = H / ROWleft = point.col * cell_widthtop = point.row * cell_heightpygame.draw.rect(screen, color, (left, top, int(cell_width), int(cell_height)))# 随机生成食物
def genfood():while True:food_x = Point(row=random.randint(0, ROW - 1), col=random.randint(0, COL - 1))if food_x.row != head.row and food_x.col != head.col and food_x not in snakebody:return food_x# pygame初始化框架
pygame.init()screen = pygame.display.set_mode(size)
pygame.display.set_caption('贪吃蛇')
clock = pygame.time.Clock()
# 定义蛇身
snakebody = []
snakebody_color = (200, 200, 200)
# 定义蛇头
head = Point(row=0, col=0)
head_color = (0, 128, 200)
# 定义食物
food = genfood()
food_color = (255, 255, 0)
# 计分
score = 0
# 方向
direct = 'right'
# 循环
quit = True
"""游戏开始"""
while quit:# 处理事件for event in pygame.event.get():if event.type == pygame.QUIT:quit = Falseelif event.type == pygame.KEYDOWN:if event.key == 1073741906 or event.key == 119:if direct == 'right' or direct == 'left':direct = 'up'elif event.key == 1073741905 or event.key == 115:if direct == 'right' or direct == 'left':direct = 'down'elif event.key == 1073741904 or event.key == 97:if direct == 'up' or direct == 'down':direct = 'left'elif event.key == 1073741903 or event.key == 100:if direct == 'up' or direct == 'down':direct = 'right'# 处理蛇身snakebody.insert(0, head.copy())# 处理吃到食物eat = (head.row == food.row and head.col == food.col)if eat:food = genfood()score += 1else:if len(snakebody) != 0:snakebody.pop()# 移动if direct == 'up':head.row -= 1elif direct == 'down':head.row += 1elif direct == 'left':head.col -= 1elif direct == 'right':head.col += 1# 设定死亡dead = Falseif head.row < 0 or head.col < 0 or head.row >= ROW or head.col >= COL:dead = Truefor snake in snakebody:if snake.row == head.row and snake.col == head.col:dead = Trueif dead:quit = False# 渲染画面# pygame.draw.rect(screen, (255, 255, 255), (0, 0, W, H))screen.fill(pygame.Color('White'))# 画蛇头,蛇身,食物rect(head, head_color)for snake in snakebody:rect(snake, snakebody_color)rect(food, food_color)# 计算机处理pygame.display.flip()# 设置帧率clock.tick(10)
else:# 打印分数print(f"你的分数是:{score}")
游戏截图
补充说明
- pygame不属于Python自带库,需要自己在命令行安装,命令如下
pip install pygame
拓展延伸
如果想把程序给朋友炫耀一下,但他又没有Python环境时可以这样:
- 在命令行下载pyinstaller库(这个库是用来把.py文件转成.exe可执行文件的)
pip install pyinstaller
- 用此命令把.py文件转成.exe可执行文件(路径不能包含空格)
pyinstaller -F 路径
备注:-F是用来转成一个文件的,如果不加的话默认转成一个目录
- 最后在这一行找到转出文件的路径
Python写一个简单的贪吃蛇程序相关推荐
- 老滚5初始化python失败_五分钟学会怎么用python做一个简单的贪吃蛇
Pygame 是一组用来开发游戏软件的 Python 程序模块,基于 SDL 库的基础上开发.我们今天将利用它来制作一款大家基本都玩过的小游戏--贪吃蛇. 一.需要导入的包 import pygame ...
- 用C语言写一个简单的贪吃蛇游戏(用到easyx图形库)
学习内容:1.游戏的存储与读写 2.制作游戏菜单 3.制作定时器 目录 一.需要用到的头文件.全局变量和一些函数 二.定时器 三.数据的初始化和绘制 四.蛇的运行和吃食物 五.游戏菜单界面 六.游戏存 ...
- 基于面向对象 来写一个简单的贪吃蛇小游戏(代码可直接用)
分析一下用到的对象(这个案例的地图过于简单,可以不用创建为对象) 食物对象(food) 蛇对象(snake) 游戏对象(game) 1.food对象 属性 :x, y, ...
- python软件代码示例-用Python写一个模拟qq聊天小程序的代码实例
Python 超简单的聊天程序 客户端: import socket, sys host = '10.248.27.23' # host = raw_input("Plz imput des ...
- python推荐系统-用python写个简单的推荐系统示例程序
用python写个简单的推荐系统示例程序 作者:阿俊 发布于:2011-11-26 16:03 Saturday 分类:推荐系统 python这门语言写程序代码量非常少,短短几行就可以把程序写的很清楚 ...
- 用python写一个简单的web服务器
人生苦短,我用python 简洁高效,这才是理想的语言啊 分享一点python的学习经验-----如何用python写一个简单的web服务器 首先,我们需要简单地了解一下网络通信协议,这里用白话介绍一 ...
- 用Python写一个模拟qq聊天小程序的代码实例
前言 今天小编就为大家分享一篇关于用Python写一个模拟qq聊天小程序的代码实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧 Python 超简单的聊天 ...
- 如何用python写一个计算日期间隔的程序?
如何用python写一个计算日期间隔的程序? 文章目录 如何用python写一个计算日期间隔的程序? 前言 问题梳理 问题解决 写在后面 前言 为什么想起来写一个这样的程序呢? 前几天聊天的时候,突然 ...
- 怎样用java写一个简单的文件复制程序
怎样用java写一个简单的文件复制程序 代码来源:https://jingyan.baidu.com/article/c35dbcb0d6f1398916fcbc07.html package Num ...
- 能不能用python开发qq_用Python写一个模拟qq聊天小程序的代码实例
用Python写一个模拟qq聊天小程序的代码实例 发布时间:2020-09-09 07:49:29
最新文章
- ssm配置socket_ssm框架中集成websocket实现服务端主动向客户端发送消息
- python建立空矩阵_SciPy创建稀疏矩阵
- Visual Studio 2013软件安装教程
- python sqlite3加密_sqlite3加密 - kjpioo的个人空间 - OSCHINA - 中文开源技术交流社区...
- C++实现希尔排序(附完整源码)
- 可以添加自定义的Select控件
- React之createRef
- Linux——find命令常见用法
- android 禁止屏幕放大缩小,禁止APP内Webview页面跟随系统缩放字号
- JAVA ------- eclipse使用的步骤: %## 使用小技巧 ##%
- [转载][奇文共赏].由入门到精通 - 吃透PID2.0.PDF
- MySQL基础实战篇
- docker镜像加速器
- ip网络广播系统连接服务器失败,航天广电数字IP网络广播系统安装IP地址调试6大知识...
- 004.	看似“完美”的类目+属性
- HP喷墨打印机墨盒清零
- java openxml_Excel单元格中的OpenXml和Date格式
- 常用 ajax js 表单 下拉加载
- Halcon入门(1)——选取ROI区域
- CI框架教程5——整合PHPExcel库应用
热门文章
- Java高并发编程实战5,异步注解@Async自定义线程池
- 干货 | 推荐几款实用的思维导图工具
- 【Qt for Python官方教程】使用pyside6-rcc引入.qrc文件
- 中国水系Android第一个版本
- php视频教程打包下载 - 网络上最好的php视频教程
- protel dxp教程 protel dxp经典视频教程
- 海思麒麟要敢于叫板高通骁龙
- 求偏微分方程的数值解(有限差分法、配置法、Galerkin方法)
- 地震matlab频域分析,基于matlab的地震数据的分析.doc
- Windows2012安装AppFabric失败返回1603错误的解决方案