2021-08-24 日志

修复了蛇快速转弯会死的 bug

前言

最近正在练习使用 pygame, 感觉这东西真的是功能强大、用途广泛。前几天用 pygame,写了一个 Console 程序,看起来很极客(实际上很弱智),今天觉得可以写一个简易的贪吃蛇程序。

游戏界面

其中,浅绿色的部分是水果(吃了之后蛇的长度 +1),深绿色的部分是蛇身(蛇头和蛇尾一个样,懒得处理了),暗绿色的部分是墙。

snake.py

贪吃蛇游戏的主程序。

# Author : GGN_2015
# Content: 贪吃蛇游戏from game_method import *
import random # 生成随机位置
import time# 棋盘相关的常量, (棋盘是左右上下循环的)
BOARD_EMPTY = 0 # 空位置
BOARD_SNAKE = 1 # 棋盘上蛇占据的位置
BOARD_WALL  = 2 # 棋盘上墙占据的位置
BOARD_FRUIT = 3 # 水果chessboard = {} # 棋盘存储空间
WIDTH  = 20
HEIGHT = 20 # 棋盘的宽度和高度,下标为 (高度-1, 宽度-1)
for i in range(0, HEIGHT):for j in range(0, WIDTH):chessboard[(i, j)] = BOARD_EMPTY # 初始化将棋盘清空RESOLUTION = (1920, 1080) # 屏幕分辨率 REDIUS = int((RESOLUTION[1] - 50) / HEIGHT / 2) - 2 # 半径算法,各种圆的半径SNAKE_BODY = [] # 描述蛇身每个位置的坐标
INIT_LEN = 4for i in range(0, INIT_LEN):SNAKE_BODY.append((int(HEIGHT/2), int(WIDTH/2) + i)) # 初始蛇身长度为 4, 左头 [0], 右尾 [len - 1]DIRX = {} # 方向向下的坐标轴
DIRY = {} # 方向向右的坐标轴DIRX['LEFT']  =  0
DIRX['RIGHT'] =  0
DIRX['UP']    = -1
DIRX['DOWN']  =  1 # 描述蛇移动时 X 坐标的改变情况DIRY['LEFT']  = -1
DIRY['RIGHT'] =  1
DIRY['UP']    =  0
DIRY['DOWN']  =  0 # 描述蛇移动时 Y 坐标的改变情况DIRECTION = 'LEFT' # 描述蛇移动的方向def NextHead(): # 通过当前蛇头计算新的蛇头坐标(空间是循环的)NowHead  = SNAKE_BODY[0]nextHead = ((NowHead[0] + DIRX[DIRECTION]) % HEIGHT, (NowHead[1] + DIRY[DIRECTION]) % WIDTH)return nextHeaddef Crash(): # 检测是否会发生蛇头碰撞return chessboard[NextHead()] != BOARD_EMPTY and chessboard[NextHead()] != BOARD_FRUITdef Grow():return chessboard[NextHead()] == BOARD_FRUIT # 蛇身长度增长Window = screen(Title = "Snake Game", FullScreen = True, Resolution = RESOLUTION)
Window.Fill((0, 0, 0)) # BLACK 纯色填充def Modify(R, G, B, rate):return (int(R*rate), int(G*rate), int(B*rate))# LINECOLOR = (127, 127, 127)
LINECOLOR = Modify(34, 252, 43, 0.10)"""
def GetColor(BOARD_TYPE): # 获得某种区块对应的颜色if BOARD_TYPE == BOARD_EMPTY: return (  0,   0,   0)if BOARD_TYPE == BOARD_FRUIT: return (255,  50,  50)if BOARD_TYPE == BOARD_SNAKE: return ( 50,  50, 255)if BOARD_TYPE == BOARD_WALL : return (127, 127, 127)return (0, 255, 0) # Error color
"""def GetColor(BOARD_TYPE): # 获得某种区块对应的颜色极客配色if BOARD_TYPE == BOARD_EMPTY: return Modify(34, 252, 43, 0.00)if BOARD_TYPE == BOARD_FRUIT: return Modify(34, 252, 43, 1.00)if BOARD_TYPE == BOARD_SNAKE: return Modify(34, 252, 43, 0.50)if BOARD_TYPE == BOARD_WALL : return Modify(34, 252, 43, 0.10)return (0, 255, 0) # Error colordef ShowChessBoard(): # 在屏幕上显示棋盘D = (RESOLUTION[1] - 50) / HEIGHT # 棋盘方格的边长for i in range(0, HEIGHT + 1): # 画横线pygame.draw.line(Window.Screen, LINECOLOR, (0, D*i), (RESOLUTION[1] - 50, D*i), 3)for i in range(0, WIDTH + 1): # 画竖线pygame.draw.line(Window.Screen, LINECOLOR, (D*i, 0), (D*i, RESOLUTION[1] - 50), 3)for i in range(0, HEIGHT):for j in range(0, WIDTH): # 清空蛇的坐标if chessboard[(i, j)] == BOARD_SNAKE:chessboard[(i, j)] = BOARD_EMPTYfor pos in SNAKE_BODY:chessboard[pos] = BOARD_SNAKE # 重新设置蛇身坐标for i in range(0, HEIGHT):for j in range(0, WIDTH): # 枚举坐标系中的每一个位置pos = (D*j + int(D/2), D*i + int(D/2))pygame.draw.circle(Window.Screen, GetColor(chessboard[(i, j)]), pos, int(D/2) - 4)def dir(EventKey): # 通过按键得到方向字符串if   EventKey ==  K_LEFT: return 'LEFT'elif EventKey == K_RIGHT: return 'RIGHT'elif EventKey ==    K_UP: return 'UP'else: return 'DOWN'SPEED = 0.2 # 每 SPEED 秒前进一步def RandFruit():posList = []for i in range(0, HEIGHT):for j in range(0, WIDTH): # 枚举坐标系中的每一个位置if chessboard[(i, j)] == BOARD_EMPTY:posList.append((i, j))if len(posList) > 0:id = random.randint(0, len(posList) - 1) # 随机选择一个位置chessboard[posList[id]] = BOARD_FRUITMessage = "按 SPACE 开始 ..." # 状态信息
state  = text(Window, Message = Message) # 显示状态信息
length = text(Window)DIRECTION = "LEFT"
NEW_DIRECTION = "LEFT"
if __name__ == "__main__": # 启动游戏running = False # 表示												

一个正在开发中的 Python3 贪吃蛇游戏相关推荐

  1. JAVA游戏开发-超炫酷贪吃蛇游戏源码及教程

    一.前言 某日,看见隔壁家的小朋友在玩一款网络爆款贪吃蛇游戏,感觉很好玩.自己刚好正在学习JAVA编程,也想实现一个类似功能的游戏Demo练手,在网上查看了不少源码案例,全都是很古老的方块式贪吃蛇游戏 ...

  2. 详解Linux终端下编写“贪吃蛇”游戏

    大一学习C语言的时候就想要用Turbo C编写一个视频小游戏出来,种种原因后面搁浅了,现在借着学习Linux系统编程的劲头,编写了一个终端下可以运行的贪吃蛇游戏,其中此视频游戏用到的一些知识和操作系统 ...

  3. Java 贪吃蛇游戏引言

    欢迎关注公众号: 贪吃蛇小游戏是一款十分经典的小游戏,适合用于新手的练习,花了近两个月的时间,终于可以运行出比较完善的贪吃蛇了,相比于CSDN中的大神,花个几天的时间就可以做出Java版本的贪吃蛇小游 ...

  4. python趣味编程-贪吃蛇游戏

    在上一期我们用Python实现了一个扫雷游戏的游戏,这一期我们继续使用Python实现一个简单的游戏,让我们开始今天的旅程吧~ 在Python中使用Turtle的贪吃蛇游戏免费源代码 介绍 这 在py ...

  5. c语言贪吃蛇按键,C语言实现贪吃蛇游戏(命令行)

    这是一个纯C语言写的贪吃蛇游戏,供大家参考,具体内容如下 #include #include #include #include #include #define SNAKE_LENGTH 100// ...

  6. 如何用python开发一个贪吃蛇游戏_教你一步步利用python实现贪吃蛇游戏

    教你一步步利用python实现贪吃蛇游戏 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  教你一步步利用python实现贪吃蛇游戏.txt ] (友情提示:右键点 ...

  7. python在人工智能应用锁_干货 | Python人工智能在贪吃蛇游戏中的应用探索(上)...

    文案&代码 白宇啸 排版&审校 邓发珩 前言 一个月前,人工智能对我来说都是很陌生的,更不用说神经网络.强化学习.DQN等名词了.疫情期间,经过在家努力学习,我对这些概念越来越清晰了, ...

  8. Python游戏开发,Python实现贪吃蛇小游戏与吃豆豆 附带源码

    开发工具 Python版本: 3.6.4 相关模块: pygame模块: 以及一些Python自带的模块. 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. 原理简介 贪吃蛇 ...

  9. 实验二、贪吃蛇游戏开发

    实验要求 实现贪吃蛇游戏基本功能,屏幕上随机出现一个"食物",称为豆子,上下左右控制"蛇"的移动,吃到"豆子"以后"蛇" ...

最新文章

  1. 孙庆新:做产品,感觉从何而来
  2. 云炬Qtpy5开发与实战笔记 0搭建开发环境(傻瓜式安装)
  3. wxWidgets:wxRegEx类用法
  4. Kettle使用_28 转换之数值范围与字符串操作
  5. 二叉排序树(搜索树BST)-详解结点的删除
  6. 基于javafx的五子棋_基于JavaFX的SimpleDateFormat演示程序
  7. 安卓微信下video退出视频全屏方法
  8. mysql 取模分区_MySQL分区
  9. 每天Leetcode 刷题 初级算法篇-杨辉三角
  10. 【Flutter从入门到实战】⑰Flutter的主题风格、Theme、DarkTheme暗黑模式、单独给单个页面设置Theme、屏幕适配、屏幕适配工具类封装、Flutter调试使用
  11. 【效率提高10倍项目原创发布!】深度学习数据自动标注器开源 目标检测和图像分类(高精度高效率)
  12. 光电二极管的工作原理
  13. 生物素-磺酸-NHS 酯,119616-38-5,Biotin-Sulfo-NHS ester
  14. ubuntu下搭建pptp服务器
  15. Linux语言和字体的自定义设置
  16. 高精度结构光工业3D相机Mech-Eye PRO全面升级:可选蓝光/白光版本,适合中距离应用...
  17. 前台和后台的数据交互
  18. RT-Thread (2) RTT SPI设备驱动流程 || LWIP + ENC28J60
  19. 实现简单 c# 编辑器
  20. W25Q128华邦Flash调试踩坑

热门文章

  1. 教你如何免费使用微商工具,微信上一键添加,自动评论、点赞等系列功能,具有物理模拟人工点击没有封号性
  2. 计算机兴趣画图活动记录,电脑绘画活动记录表(教案)
  3. 设计模式之一工厂模式
  4. AWS上配置Cisco ASAv AnyConnect
  5. VB编程:Timer控件实例幼儿识字卡片-35
  6. VMware虚拟机NAT模式下连不上网
  7. linux文件系统研究与设计,Linux下实时文件系统的设计
  8. 50 道 Python 基础练习题(附答案详解)
  9. deepin连接企业加密wifi
  10. SpringBoot学习笔记(完整)