使用Python第三方库pygame写个贪吃蛇小游戏
作者:monster_hahaha 发布时间:2021-05-19 11:08:37
标签:python,pygame,贪吃蛇,游戏
今天看到几个关于pygame模块的博客和视频,感觉非常有趣,这里照猫画虎写了一个贪吃蛇小游戏,目前还有待完善,但是基本游戏功能已经实现,下面是代码:
# 导入模块
import pygame
import random
# 初始化
pygame.init()
w = 720 #窗口宽度
h = 600 #窗口高度
ROW = 30 #行数
COL = 36 #列数
#将所有的坐标看作是一个个点,定义点类
class Point:
row = 0
col = 0
def __init__(self, row, col):
self.row = row
self.col = col
def copy(self):
return Point(row = self.row,col = self.col)
#显示窗口和标题
size = (w, h)
window = pygame.display.set_mode(size)
pygame.display.set_caption('贪吃蛇')
#定义蛇头坐标
head = Point(row = ROW/2, col = COL/2)
#蛇身体
snake_list = [
Point(row = head.row,col = head.col+1),
Point(row = head.row,col = head.col+2),
Point(row = head.row,col = head.col+3)
]
#产生食物
def pro_food():
#食物不能与蛇重叠
while True:
pos = Point(row=random.randint(1,ROW-2), col=random.randint(1,COL-2))
is_coll = False
if head.row == pos.row and head.col == pos.col:
is_coll = True
for snake in snake_list:
if snake.col == pos.col and snake.row == pos.row:
is_coll = True
break
if not is_coll:
return pos
food = pro_food()
#定义颜色
bg_color = (255, 255, 255)
head_color = (0, 128, 128)
food_color = (255, 255, 0)
snake_color = (200,200,200)
#给定初始方向
dire = 'left'
def rect(point, color):
cell_width = w/COL
cell_height = h/ROW
left = point.col*cell_width
top = point.row*cell_height
pygame.draw.rect(
window, color,
(left,top,cell_width, cell_height, )
)
pass
# 游戏循环
quit = True
clock = pygame.time.Clock()
while quit:
for event in pygame.event.get():
#退出方式
if event.type == pygame.QUIT:
quit = False
elif event.type == pygame.KEYDOWN:
#键盘控制
if event.key == 273 or event.key == 119:
if dire == 'left' or dire == 'right':
dire = 'up'
elif event.key == 274 or event.key == 115:
if dire == 'left' or dire == 'right':
dire = 'down'
elif event.key == 276 or event.key == 97:
if dire == 'up' or dire == 'down':
dire = 'left'
elif event.key == 275 or event.key == 100:
if dire == 'up' or dire == 'down':
dire = 'right'
#吃
eat=(head.row == food.row and head.col == food.col)
if eat:
food = pro_food()
#处理身体
#1.原来的头换到身体最前端
snake_list.insert(0,head.copy())
#2.删除身体最后一个
if not eat:
snake_list.pop()
#移动
if dire == 'left':
head.col -= 1
elif dire == 'right':
head.col += 1
elif dire == 'up':
head.row -= 1
elif dire == 'down':
head.row += 1
#检测:
dead=False
#1.撞墙
if head.col < 0 or head.row< 0 or head.col >= COL or head.row >= ROW:
dead=True
#2.撞自己
for snake in snake_list:
if head.col == snake.col and head.row == snake.row:
dead=True
break
if dead:
print('dead')
quit = False
#绘制背景
pygame.draw.rect(window, bg_color, (0, 0, w, h))
#蛇头
rect(head, head_color)
#食物
rect(food,food_color)
#蛇身
for snake in snake_list:
rect(snake,snake_color)
pygame.display.flip()
#游戏帧数
clock.tick(20)
效果:
来源:https://blog.csdn.net/qq_42806574/article/details/104216382


猜你喜欢
- 用Python写代码的时候,在想看的地方写个print xx 就能在控制台上显示打印信息,这样子就能知道它是什么了,但是当我需要看大量的地方
- 概述我一直在找一种好的方法来解释 go 语言的并发模型:不要通过共享内存来通信,相反,应该通过通信来共享内存但是没有发现一个好的解释来满足我
- Python中try块可以捕获测试代码块中的错误。except块可以处理错误。finally块可以执行代码,而不管try-和except块的
- 前言官方手册:https://dev.mysql.com/doc/refman/5.7/en/server-logs.html不管是哪个数据
- 前言之前我们分享过用Python进行可视化的9种常见方式。其实我们还能让可视化图形逼格更高一些,今天就分享一下如何让可视化秀起来:用Pyth
- 用FrontPage做网页的朋友们,你的主要页面中,可能都带有许多相同的元素吧?如页头横向排列(或左侧纵向排列)的主要链接按钮、页底的板权说
- 本文实例讲述了JS实现针对给定时间的倒计时功能。分享给大家供大家参考,具体如下:有时候,网站需要一个倒计时的特效来庆祝某些特别的日子。自己也
- 上传图片: if (!empty($_FILES["img"]["name"])) { //提取文件
- 目录前言算法原理目标函数算法流程 Python实现总结前言K-Means 是一种非常简单的聚类算法(聚类算法都属于无监督学习)。给
- 使用在Safari和WebKit中可用的CSS高级特性,你可以为你的网站和网络应用带来一个新的级别的令人兴奋的东西。WebKit是Safar
- 前言大家好,我叫善念。这是我的第二篇博客,也是第一篇技术博客,希望大家多多支持,让我更加有动力去更新一些python爬虫类的案例教程。开始确
- 前言在Python中定义函数,可以用必选参数、默认参数、可变参数和关键字参数,这4种参数都可以一起使用,或者只用其中某些,但是请注意,参数定
- 最新在学习Python的基础入门系列课程,今天学习到使用python 的内置库smtplib发送邮件内容。使用Python发送邮件步骤简单:
- 在IE浏览器调试代码,我们可以选择使用 IE WebDeveloper但是我个人用惯了ff浏览器下的firebug,所以在网上搜了一下,如果
- 命令模式(Command Pattern)是什么命令模式是一种行为型模式,它将请求封装成一个对象,从而允许您将不同的请求排队或记录请求日志、
- 背景在业务数据统计分析中基本都会涉及到各省区的分析,数据可视化是数据分析的一把利器,这些省区的数据一般会用地图可视化出来,这样一些规律可以被
- 本文我们总结了几个在安装SQL Server数据库时常见问题的解决方案,供初学者学习参考,接下来让我们来一起看一下吧。常见问题一:安装Sql
- 上次在“给网页添加打印按钮”一文中,有一段代码是“复制本文链接到剪贴板”js脚本,很可惜只能在IE中使用。这次在“淘宝网在线充值中心 - 荆
- 之前我写过一篇文章介绍如何实现中国站长站的文章干扰码功能:《谈中国站长站的文章干扰码实现方法》 首发在asp之家。如果大家有兴趣可以先看看。
- 本文实例讲述了python实现在字符串中查找子字符串的方法。分享给大家供大家参考。具体如下:这里实现python在字符串中查找子字符串,如果