# 贪吃蛇生存大作战 **Repository Path**: wode/Adapted-game-greedy_snake_survival_battle ## Basic Information - **Project Name**: 贪吃蛇生存大作战 - **Description**: 贪吃蛇生存大作战,以吃豆涨积分为基本玩法,积分上涨的同时速度也会越来越快,如何在不死亡情况下,来让你的排名占据更高的位置,这需要你的探索。使用的是PyQt5 UI框架,欢迎大家指教。 - **Primary Language**: Python - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2020-12-24 - **Last Updated**: 2020-12-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 贪吃蛇生存大作战 #### 介绍 1. 贪吃蛇生存大作战,以吃豆涨积分为基本玩法,生存大作战的意义在于玩家需要想办法尽可能获得高分。随着积分的不断变高,蛇的基本行进速度在不断加快。 2. 豆(Bean)的作用:本游戏中,豆是一个统称,因为豆有很多种,目前只设立了变长豆、缩短豆、反向豆,具体意义都是字面意思,后续可以扩展各种特效豆。蛇吃一个豆,身子除了变长、变短或者产生各种特效外,每个豆还有“气”的概念,比如刚生成是10,一段时间后递减为0,直至豆消失。这也就是意味着你必须尽快吃掉豆子,才能积攒足够的“气”,以此来为生存大作战赢得更大的优势。 3. 气的作用:将气积攒到一百后,可以发送一次技能,比如让蛇的速度变快变慢,持续一个周期,持续时间内,豆的“气”仍然正常衰减。变快可以让你更快吃到高“气”豆,而变慢可以让你在基本速度过快时,获得一点喘息时间。对于技能的设置,后续也可以很方便进行扩展。 4. 特效豆:吃到特效豆后,可以在一个周期时间里获得特效,有好有坏,比如反向特效,所有的操作全部反向,持续一个周期时间后效果消失。 5. 排行榜:一个公共的排行榜服务,可以查看所有人的TOP20排行。不过此部分源码不会公布,因为考虑到服务器安全性问题,所以仅在Release版本中可以体验。 6. 快捷键:上下左右4个按键代表蛇的前进反向;Q/W按键分别代表加快和渐慢技能,需要等“气”积满后才可使用;空格键用于控制开始和暂停。 7. 3套随机:豆子出现的时间随机,出现豆子的种类随机,每个豆子的“气”随机。多种随机情况并存,让游戏有更多不确定性。 8. 死亡:设计为撞边界或撞自己即会死亡。 ![默认打开界面](https://images.gitee.com/uploads/images/2020/0804/175230_9d5e9700_1697907.png "1.png") ![暂停界面](https://images.gitee.com/uploads/images/2020/0804/175246_05efd8d2_1697907.png "2.png") ![死亡界面](https://images.gitee.com/uploads/images/2020/0804/175300_1267e9b6_1697907.png "3.png") ![排行榜](https://images.gitee.com/uploads/images/2020/0804/175313_5a9b04a1_1697907.png "4.png") #### 软件架构 软件架构说明 1. UI框架使用的是PyQt5, 因为考虑到此次游戏中涉及到大连UI操作,以及事件循环,利用Qt成熟的事件循环以及大量的模块,可以简化很多开发工作。不过,Qt也有缺点,首先是臃肿,小小游戏的Release exe已经有40余M,其次是程序打开有些延时。 2. 蛇的设计:利用一个类存储了蛇每个节点的位置和方向信息,蛇类中具备所有必备的属性。显示蛇则是在主窗口中绘制而成;移动蛇,首先修改蛇类的属性,再重绘而成。 3. 采用重绘的原因:前期测试中,蛇由一个个独立UI组件组成,并各自移动的方式,与重绘方式,性能表现方面差别不大;此游戏中,对于特效豆、发动技能的设计,如果采用重绘的方式,会更加简单,因为发动对应的技能或者吃到了特效豆,只需要设置相应的属性,主窗口再调用重绘即可,相对简单。 4. 特效随机豆的实现:首先设计了基类Bean,再派生出各种不同效果的豆。生成豆时,采用随机生成的方式。 5. 主计时器:主绘制窗口中,设计了一个主计时器timer,设计想法是希望其作为一个晶振周期的存在,控制所有的动作和重绘,这样便于管理所有利用时间的对象。 6. 积分、气、提示信息等的UI实现:都是些label、button之类的流程实现,没什么可说的。 #### 安装教程 1. pip install PyQt5 2. python pyqt/main.py #### 使用说明 1. python pyqt/main.py 或 直接运行main.exe 2. 阅读中间的提示文字,按空格键或点击中间的开始按钮,即可开始游戏。 3. 游戏中途,空格键可以暂停休息。 4. 利用上下左右键,控制蛇的前进。请掌握好蛇的节奏,适应蛇的速度。 5. 吃到特效豆后,请注意听BGM提示或左上角文字提示,掌握好特效的持续时间。 6. 游戏中途,请注意右上角怒气值的积累情况,如果积满100%,可以马上按Q 或 W 键,发动一次技能。发动技能后,请注意听BGM提示或左上角文字提示,掌握好技能持续时间。 7. 死亡后,可点击开始按钮或按空格键直接开始。 8. 死亡后,可点击总得分上的上传按钮,提交你的得分,参与排名。(直接运行代码不会有此功能,如果想参与排名,可以运行Release版本exe。) 9. Top 20按钮,点击后,可以打开所有玩家TOP 20 排行榜,赶快去看看有没有你的大名吧。 #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request