前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python贪吃蛇最简单代码_用python写贪吃蛇

python贪吃蛇最简单代码_用python写贪吃蛇

作者头像
全栈程序员站长
发布2022-10-03 10:09:31
4.4K1
发布2022-10-03 10:09:31
举报

大家好,又见面了,我是你们的朋友全栈君。

一、前言

之前版本很多小伙伴都觉得难度过高,另外也有粉丝问还能不能精简代码。

所以这版降低了难度 (由原来过关增加5km/h改为3.5KM/h) 并通过反射代替IF ELSE的写法,删除了一些冗余的代码,将代码由85行压缩到了68行 (不必要的压缩代码是不建议的,这里压缩代码只是为了好玩)


文章目录(PS:源码直接点击第四项)


二、实现效果

在这里插入图片描述
在这里插入图片描述

个人最高纪录


在这里插入图片描述
在这里插入图片描述

三、环境要求

  1. python 3+
  2. pygame包 安装命令:打开cmd 输入: pip install pygame

四、源码分享

import pygame,sys,random
SCREEN,dirction_node = 600, { 
pygame.K_LEFT:['left',-25],pygame.K_RIGHT:['right',25],pygame.K_UP:['top',-25],pygame.K_DOWN:['top',25]}  # 屏幕尺寸,移动的定义
class Snake:  # 蛇类
def __init__(self):  # 初始化各种需要的属性 [开始时默认向右/身体块x5]
self.dirction, self.body = pygame.K_RIGHT, []
[self.add_node() for _ in range(5)]
def add_node(self):
node = pygame.Rect(((self.body[0].left, self.body[0].top) if self.body else (0, 0)) + (25, 25))  # 随时增加蛇块
setattr(node, dirction_node[self.dirction][0], getattr(node, dirction_node[self.dirction][0]) + dirction_node[self.dirction][1])
self.body.insert(0, node)
def is_dead(self):
body_h = self.body[0]
if body_h.x not in range(SCREEN) or body_h.y not in range(SCREEN) or body_h in self.body[1:]:  # 撞墙、撞自己则死亡
return True
def move(self):
self.add_node()
self.body.pop()
def change_direction(self, curkey):  # 改变方向 但是左右、上下不能被逆向改变
LR, UD = [pygame.K_LEFT, pygame.K_RIGHT], [pygame.K_UP, pygame.K_DOWN]
if curkey in LR + UD:
if not ((curkey in LR) and (self.dirction in LR) or (curkey in UD) and (self.dirction in UD)):
self.dirction = curkey
class Food:  # 食物类
def __init__(self):
self.rect = pygame.Rect(-25, 0, 25, 25)
def remove(self):
self.rect.x = -25
def set(self):
if self.rect.x == -25:
allpos = [pos for pos in range(75, SCREEN - 75, 25)]  # 生成的食物距离墙在75 ~ SCREEN-55 之间
self.rect.left, self.rect.top = random.choice(allpos), random.choice(allpos)
def show_text(screen, pos, text, color, font_size=30):
cur_font = pygame.font.SysFont("SimHei", font_size)  # 设置文字样式
text_fmt = cur_font.render(text, True, color)  # 设置文字内容
screen.blit(text_fmt, pos)  # 绘制文字
def main():
pygame.init()
screen = pygame.display.set_mode((SCREEN, SCREEN))
pygame.display.set_caption('贪吃蛇:是男人就坚持到第10关!')
snake,food,clock, scores, isdead = Snake(),Food(),pygame.time.Clock(), 0, False
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
if event.type == pygame.KEYDOWN:
snake.change_direction(event.key)
if event.key == pygame.K_SPACE and isdead:  # 死后按space重新
return main()
screen.fill((255, 255, 255))
if not isdead:  # 画蛇身 / 每一步+1分
snake.move()
for rect in snake.body:
pygame.draw.rect(screen, (144, 238, 144), rect)
isdead = snake.is_dead()  # 显示死亡文字
if isdead:
show_text(screen, (150, 200), '翻车了!', (227, 29, 18), 80)
show_text(screen, (50, 320), '是男人就超过45KM/h,按空格键重试...', (0, 0, 22))
if food.rect == snake.body[0]:  # 当食物rect与蛇头重合,吃掉 -> Snake增加一个Node
scores += 1  # 食物处理 / 吃到+1分
food.remove()
snake.add_node()
food.set()  # 食物投递
pygame.draw.rect(screen, (233, 150, 122), food.rect)
speed = 10 + scores * 3.5 if scores else 10  # 蛇移动速度
show_text(screen, (20, 550), '关卡:' + str(scores) + ' 速度:' + str(speed) + 'KM/h', (0, 0, 205))  # 显示得分和速度
pygame.display.update()
clock.tick(speed)
main()

五、总结

再强调一遍:这里减少代码量只是为了好玩,不必要的压缩代码是不建议的!代码可读性、可维护性才是我们在编码中首要考虑的事情!

这也只是随便弄的一个小玩意,如果真要做游戏还是建议使用游戏引擎。

市面上常见的cocos、unity都是不错的游戏引擎,能够让你开发游戏的效率达到事半功倍的效果


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/197749.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022年9月3日 下,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前言
    • 文章目录(PS:源码直接点击第四项)
    • 二、实现效果
    • 三、环境要求
    • 四、源码分享
    • 五、总结
    相关产品与服务
    文件存储
    文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档