文章目录

  • Python 贪吃蛇小游戏
    • 1. 导包
    • 2. 配置初始化参数
    • 3. 主函数及运行主体
    • 4. 画食物的函数
    • 5. 画贪吃蛇的函数
    • 6. 画网格的函数(非必选,觉得多余的可以忽略此项)
    • 7. 操纵贪吃蛇移动的函数
    • 8. 判断蛇是否死亡的函数
    • 9.判断蛇是否吃到食物的函数
    • 10. 随机生成食物
    • 11. 游戏开始与结束的相关配置
    • 12. 函数俱备,只欠main这个东风了
    • 13.图片和字体资源
    • 14. 更多干货分享(免费)


今天给大家免费分享一下Python飞机游戏的源码。

Python 贪吃蛇小游戏

(声明:本文使用的源码非原创,17年在CSDN上用币下载的资源,具体是哪位大佬的忘记了)
在此之前首先说一下环境
Python3.X (使用2.x的大佬自己稍微改动一下就行)
pygame 1.9.6(当然这个没必要和我一样)

1. 导包

## 导入相关模块
import random
import pygame
import sysfrom pygame.locals import *

2. 配置初始化参数

snake_speed = 15 #贪吃蛇的速度
windows_width = 800
windows_height = 600 #游戏窗口的大小
cell_size = 20       #贪吃蛇身体方块大小,注意身体大小必须能被窗口长宽整除''' #初始化区
由于我们的贪吃蛇是有大小尺寸的, 因此地图的实际尺寸是相对于贪吃蛇的大小尺寸而言的
'''
map_width = int(windows_width / cell_size)
map_height = int(windows_height / cell_size)# 颜色定义
white = (255, 255, 255)
black = (0, 0, 0)
gray = (230, 230, 230)
dark_gray = (40, 40, 40)
DARKGreen = (0, 155, 0)
Green = (0, 255, 0)
Red = (255, 0, 0)
blue = (0, 0, 255)
dark_blue =(0,0, 139)BG_COLOR = black #游戏背景颜色# 定义方向
UP = 1
DOWN = 2
LEFT = 3
RIGHT = 4HEAD = 0 #贪吃蛇头部下标

3. 主函数及运行主体

#主函数
def main():pygame.init() # 模块初始化snake_speed_clock = pygame.time.Clock() # 创建Pygame时钟对象screen = pygame.display.set_mode((windows_width, windows_height)) #screen.fill(white)pygame.display.set_caption("Python 贪吃蛇小游戏") #设置标题show_start_info(screen)               #欢迎信息while True:running_game(screen, snake_speed_clock)show_gameover_info(screen)#游戏运行主体
def running_game(screen,snake_speed_clock):startx = random.randint(3, map_width - 8) #开始位置starty = random.randint(3, map_height - 8)snake_coords = [{'x': startx, 'y': starty},  #初始贪吃蛇{'x': startx - 1, 'y': starty},{'x': startx - 2, 'y': starty}]direction = RIGHT       #  开始时向右移动food = get_random_location()     #实物随机位置while True:for event in pygame.event.get():if event.type == QUIT:terminate()elif event.type == KEYDOWN:if (event.key == K_LEFT or event.key == K_a) and direction != RIGHT:direction = LEFTelif (event.key == K_RIGHT or event.key == K_d) and direction != LEFT:direction = RIGHTelif (event.key == K_UP or event.key == K_w) and direction != DOWN:direction = UPelif (event.key == K_DOWN or event.key == K_s) and direction != UP:direction = DOWNelif event.key == K_ESCAPE:terminate()move_snake(direction, snake_coords) #移动蛇ret = snake_is_alive(snake_coords)if not ret:break #蛇跪了. 游戏结束snake_is_eat_food(snake_coords, food) #判断蛇是否吃到食物screen.fill(BG_COLOR)#draw_grid(screen)draw_snake(screen, snake_coords)draw_food(screen, food)draw_score(screen, len(snake_coords) - 3)pygame.display.update()snake_speed_clock.tick(snake_speed) #控制fps

4. 画食物的函数

#将食物画出来
def draw_food(screen, food):x = food['x'] * cell_sizey = food['y'] * cell_sizeappleRect = pygame.Rect(x, y, cell_size, cell_size)pygame.draw.rect(screen, Red, appleRect)

5. 画贪吃蛇的函数

#将贪吃蛇画出来
def draw_snake(screen, snake_coords):for coord in snake_coords:x = coord['x'] * cell_sizey = coord['y'] * cell_sizewormSegmentRect = pygame.Rect(x, y, cell_size, cell_size)pygame.draw.rect(screen, dark_blue, wormSegmentRect)wormInnerSegmentRect = pygame.Rect(                #蛇身子里面的第二层亮绿色x + 4, y + 4, cell_size - 8, cell_size - 8)pygame.draw.rect(screen, blue, wormInnerSegmentRect)

6. 画网格的函数(非必选,觉得多余的可以忽略此项)

#画网格(可选)
def draw_grid(screen):for x in range(0, windows_width, cell_size):  # draw 水平 linespygame.draw.line(screen, dark_gray, (x, 0), (x, windows_height))for y in range(0, windows_height, cell_size):  # draw 垂直 linespygame.draw.line(screen, dark_gray, (0, y), (windows_width, y))

7. 操纵贪吃蛇移动的函数

#移动贪吃蛇
def move_snake(direction, snake_coords):if direction == UP:newHead = {'x': snake_coords[HEAD]['x'], 'y': snake_coords[HEAD]['y'] - 1}elif direction == DOWN:newHead = {'x': snake_coords[HEAD]['x'], 'y': snake_coords[HEAD]['y'] + 1}elif direction == LEFT:newHead = {'x': snake_coords[HEAD]['x'] - 1, 'y': snake_coords[HEAD]['y']}elif direction == RIGHT:newHead = {'x': snake_coords[HEAD]['x'] + 1, 'y': snake_coords[HEAD]['y']}snake_coords.insert(0, newHead)

8. 判断蛇是否死亡的函数

#判断蛇死了没
def snake_is_alive(snake_coords):tag = Trueif snake_coords[HEAD]['x'] == -1 or snake_coords[HEAD]['x'] == map_width or snake_coords[HEAD]['y'] == -1 or \snake_coords[HEAD]['y'] == map_height:tag = False # 蛇碰壁啦for snake_body in snake_coords[1:]:if snake_body['x'] == snake_coords[HEAD]['x'] and snake_body['y'] == snake_coords[HEAD]['y']:tag = False # 蛇碰到自己身体啦return tag

9.判断蛇是否吃到食物的函数

#判断贪吃蛇是否吃到食物
def snake_is_eat_food(snake_coords, food):  #如果是列表或字典,那么函数内修改参数内容,就会影响到函数体外的对象。if snake_coords[HEAD]['x'] == food['x'] and snake_coords[HEAD]['y'] == food['y']:food['x'] = random.randint(0, map_width - 1)food['y'] = random.randint(0, map_height - 1) # 实物位置重新设置else:del snake_coords[-1]  # 如果没有吃到实物, 就向前移动, 那么尾部一格删掉

10. 随机生成食物

#食物随机生成
def get_random_location():return {'x': random.randint(0, map_width - 1), 'y': random.randint(0, map_height - 1)}

11. 游戏开始与结束的相关配置

#开始信息显示
def show_start_info(screen):font = pygame.font.Font('myfont.ttf', 40)tip = font.render('按任意键开始游戏~~~', True, (65, 105, 225))gamestart = pygame.image.load('gamestart.png')screen.blit(gamestart, (140, 30))screen.blit(tip, (240, 550))pygame.display.update()while True:  #键盘监听事件for event in pygame.event.get():  # event handling loopif event.type == QUIT:terminate()     #终止程序elif event.type == KEYDOWN:if (event.key == K_ESCAPE):  #终止程序terminate() #终止程序else:return #结束此函数, 开始游戏
#游戏结束信息显示
def show_gameover_info(screen):font = pygame.font.Font('myfont.ttf', 40)tip = font.render('按Q或者ESC退出游戏, 按任意键重新开始游戏~', True, (65, 105, 225))gamestart = pygame.image.load('gameover.png')screen.blit(gamestart, (60, 0))screen.blit(tip, (80, 300))pygame.display.update()while True:  #键盘监听事件for event in pygame.event.get():  # event handling loopif event.type == QUIT:terminate()     #终止程序elif event.type == KEYDOWN:if event.key == K_ESCAPE or event.key == K_q:  #终止程序terminate() #终止程序else:return #结束此函数, 重新开始游戏
#画成绩
def draw_score(screen,score):font = pygame.font.Font('myfont.ttf', 30)scoreSurf = font.render('得分: %s' % score, True, Green)scoreRect = scoreSurf.get_rect()scoreRect.topleft = (windows_width - 120, 10)screen.blit(scoreSurf, scoreRect)
#程序终止
def terminate():pygame.quit()sys.exit()


12. 函数俱备,只欠main这个东风了

main()

13.图片和字体资源

这里放不了静态资源,需要的朋友可以扫码进入公众号【大数据编程】后台回复【snake】即可获取。

14. 更多干货分享(免费)

Python飞机大战小游戏_完整源码免费分享

(求职/考研)精选简历模板!拿走不谢!

笔试必备!Java、Python、Scala 基础算法动图详解(值得收藏)

一键免费下载全套《阿里巴巴 Java 开发手册》

Gof23种设计模式趣味详解(三分钟上手系列)

Python贪吃蛇小游戏_完整源码免费分享相关推荐

  1. 基于stm32、0.96寸OLED实现的贪吃蛇小游戏(详细源码注释)

    简介:本实验基于stm32最小系统.0.96寸OLED(68*128)和摇杆实现一个经典的贪吃蛇小游戏.项目源码地址:点击下载. 硬件设计: 普通摇杆,0.96寸OLED 单色屏幕(SPI协议通讯), ...

  2. C语言小游戏大全,C语言贪吃蛇小游戏(附源码)

    一.C语言小游戏大全,C语言贪吃蛇小游戏(附源码) 贪吃蛇小游戏源码和更多C语言课设项目小游戏源码免 费 下 载 链 接 如下: c语言项目课设小游戏源码资料压缩包.zip-C文档类资源-CSDN下载 ...

  3. c语言小游戏 精简_一个简易的贪吃蛇小游戏C语言源码

    /* *程序名称:贪吃蛇v2.1 *程序描述:一个简易的贪吃蛇小游戏 *版本信息:v2.1 *v1.1版本更新:1:加入菜单选择项 *v1.2版本更新:1:修复菜单选择bug *v1.3班本更新:1: ...

  4. 前端技术搭建贪吃蛇小游戏(内含源码)

    The sand accumulates to form a pagoda ✨ 写在前面 ✨ 功能介绍 ✨ 页面搭建 ✨ 样式设置 ✨ 逻辑部分 ✨ 写在前面 上周我们实通过前端基础实现了井字游戏,今 ...

  5. 【QT】实现贪吃蛇小游戏(附源码)

  6. 10分钟用python编写贪吃蛇小游戏_牛得一批!10分钟用Python编写一个贪吃蛇小游戏...

    贪吃蛇,大家应该都玩过.当初第一次接触贪吃蛇的时候 ,还是能砸核桃的诺基亚上,当时玩的不亦乐乎.今天,我们用Python编程一个贪吃蛇游戏,下面我们先看看效果: 好了,先介绍一个思路 所有的游戏最主要 ...

  7. python 贪吃蛇小游戏代码_10分钟再用Python编写贪吃蛇小游戏

    Python编写贪吃蛇 前不久我们公众号发布了一篇C++编写贪吃蛇小游戏的推文,反响空前.看来大家对这类简单易上手小游戏还是很喜爱的. 恰逢2018年IEEE Spectrum编程语言排行榜新鲜出炉, ...

  8. python贪吃蛇小游戏_python开发贪吃蛇小游戏

    3.概要设计 3.1 程序功能模块 由设计应解决的问题可知,本次的设计是使用用方向键来实现一个简易的贪吃蛇小游戏的程序,具体的功能模块如图3-1所示. 图3-1 程序功能模块 Fig.3-1 prog ...

  9. python贪吃蛇小游戏制作思路详解

    很多时候,游戏都是一种可以发泄自己内心情绪的工具,在游戏中,我们可以忘记经历过的很多不快.如今呢,随着软硬件的不断提高,游戏市场越来越繁华红火,很多游戏都动辄好几个G.让人不得不感叹啊,以前那种玩贪吃 ...

最新文章

  1. Struts2拦截器的使用
  2. 网络推广方法带你了解优质的网站结构对网站SEO有什么好处?
  3. C#连接oracle的方式以及问题解决.
  4. 如何使用定时器settimeout、setInterval执行能传递参数的函数(转)
  5. 转载--【笔记】Asp.Net构架(Http请求处理流程)
  6. Caused by: java.lang.NoClassDefFoundError: org/apache/commons/pool/BasePoolableObjectFactory
  7. Angular提示文件不是一个有效的模块
  8. d3js path generator vs layouts
  9. 16g电脑内存有什么好处_电脑内存容量都是16GB, 买单根16G好还是双根8G好呢?
  10. RSS文件的基本格式
  11. java银行叫号课程设计_《银行排队叫号系统设计》课程设计.doc
  12. iPhone四个步骤高效安装WAPI证书
  13. Python爬虫 - 01.实现贴吧一键签到
  14. python课本图片_python爬虫当当网python书籍图片
  15. python调用virustota接口api实现上传文件返回查毒结果
  16. Unity 3D——打包复用资源(.unitypackage文件)
  17. python单词表首字母排序_python 字母排序不区分大小写
  18. 关于Qt中QMAKESPEC环境变量
  19. 《东周列国志》第四回 秦文公郊天应梦 郑庄公掘地见母
  20. CPU 是怎么认识代码的?

热门文章

  1. CUDA快速傅里叶变换 cuFFT
  2. 使用密钥登录到ssh服务器
  3. WPS表格的常用操作技巧大全
  4. Harbor安装(待补充)
  5. java对象转xml文件
  6. maven阿里云仓库
  7. 跨站脚本(XSS)攻击
  8. 抱怨其实是对自己的不满
  9. 根据地址获取HTTP返回的状态码
  10. Java学习日记 2022.7.4