效果图~新鲜出炉

  • 开始界面
  • 游戏中
  • 结束界面

一、pygame模块概览

模块名称 功能
pygame.cdrom 访问光驱
pygame.cursors 加载光标
pygame.display 访问显示设备
pygame.draw 绘制形状、线和点
pygame.event 管理事件
pygame.font 使用字体
pygame.image 加载和存储图片
pygame.joystick 使用游戏手柄或类似的东西
pygame.key 读取键盘按键
pygame.mixer 声音
pygame.mouse 鼠标
pygame.movie 播放视频
pygame.music 播放音频
pygame.overlay 访问高级视频叠加
pygame 目前学习的
pygame.rect 管理矩形区域
pygame.sndarray 操作声音数据
pygame.sprite 操作移动图像
pygame.surface 管理图像和屏幕
pygame.surfarray 管理点阵图像数据
pygame.time 管理时间和帧信息
pygame.transform 缩放和移动图像

二、核心代码

思路

  1. 首页面:会涉及图片和文字提示的显示,进入(任意键)或退出(ESC)游戏;
  2. 游戏页面:主要涉及食物的创建绘制,蛇的移动和显示,蛇是否吃到食物或者是否撞到边界或自身,再者就是音效的实现(背景音乐+gameover音效);
  3. 结束页面:会涉及图片和文字提示的显示,重来(任意键)或退出(ESC)游戏。

核心代码

  • 主函数
def main():pygame.init()# 创建Pygame时钟对象,控制每个循环多长时间运行一次。# 例如:snake_speed_clock(60)代表每秒内循环要运行的 60 次# 每秒60个循环(或帧)时,每个循环需要1000/60=16.66ms(大约17ms)如果循环中的代码运行时间超过17ms,# 在clock指出下一次循环时当前循环将无法完成。snake_speed_clock = pygame.time.Clock()screen = pygame.display.set_mode((windows_width, windows_height))screen.fill(white)pygame.display.set_caption("贪吃蛇~")show_start_info(screen)while True:music()running_game(screen, snake_speed_clock)show_end_info(screen)
  • 游戏运行代码
def running_game(screen,snake_speed_clock):start_x = random.randint(3, map_width - 8) #开始位置start_y = random.randint(3, map_height - 8)snake_coords = [{'x': start_x, 'y': start_y},  #初始贪吃蛇{'x': start_x - 1, 'y': start_y},{'x': start_x - 2, 'y': start_y}]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:gameover_music()break     #蛇死了. 游戏结束snake_is_eat_food(snake_coords, food) #判断蛇是否吃到食物screen.fill(BG_COLOR)draw_snake(screen, snake_coords)draw_food(screen, food)show_score(screen, len(snake_coords) - 3)pygame.display.update()snake_speed_clock.tick(snake_speed) #控制fps
  • 食物绘制
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)
  • 贪吃蛇绘制
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)
  • 移动贪吃蛇
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)
  • 判断蛇死没有死
def snake_is_alive(snake_coords):tag = True# 头坐标超出地图范围if(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 = Falsereturn tag
  • 判断蛇是否吃到食物
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]
  • 随机生成食物
def get_random_location():return {'x':random.randint(0, map_width - 1),'y':random.randint(0, map_height - 1)}
  • 开始信息显示
def show_start_info(screen):# 创建Font字体对象,使用render方法写字font = pygame.font.Font("simsun.ttc", 40)tip = font.render('按任意键开始游戏', True,(65,105,255))# 加载图片gamestart = pygame.image.load('startlogo.jpg').convert()# 通过blit方法输出在屏幕上screen.blit(gamestart,(140, 30))screen.blit(tip,(240, 550))## 刷新屏幕pygame.display.update()while True:  # 监听键盘for event in pygame.event.get():if event.type == QUIT:terminate()elif event.type == KEYDOWN:  # 任意键按下returnif (event.key == K_ESCAPE):  # 若为ESC,则终止程序terminate()else:return
  • 声音设置
def music():pygame.mixer.init()pygame.mixer.music.load('111.mp3')pygame.mixer.music.play(1, 0)def gameover_music():pygame.mixer.init()pygame.mixer.music.load('gameover.mp3')pygame.mixer.music.play(1,0)
  • 结束信息显示
def show_end_info(screen):font = pygame.font.Font("simsun.ttc", 40)tip = font.render("按ESC退出游戏,按任意键重新开始游戏",True,(65,105,255))# 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():if event.type == QUIT:terminate()elif event.type == KEYDOWN:if event.key == K_ESCAPE:terminate()else:return
  • 成绩信息显示
def show_score(screen, score):font = pygame.font.Font("simsun.ttc", 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()

【编程6】贪吃蛇游戏(python+pygame)相关推荐

  1. 【课件】使用Python写贪吃蛇游戏(pygame)

    使用Python写贪吃蛇游戏(pygame) 课件地址:https://blog.csdn.net/a772304419/article/details/130087202 本地路径: cd /D/W ...

  2. java gui怎么做游戏_Java GUI编程之贪吃蛇游戏简单实现方法【附demo源码下载】

    本文实例讲述了Java GUI编程之贪吃蛇游戏简单实现方法.分享给大家供大家参考,具体如下: 例子简单,界面简陋 请见谅 项目结构如下 Constant.jvava 代码如下: package sna ...

  3. 使用C语言gtk编程一个贪吃蛇游戏设计与实现

    使用C语言以及gtk编程设计一个贪吃蛇游戏. 功能需求: (1)窗口界面设计:创建各种窗口和按钮标签等: (2)小蛇移动控制:按键盘上的上下左右键控制小蛇上下左右移动: (3)游戏进程控制:若小蛇碰到 ...

  4. 计算机课程编程设计贪吃蛇游戏设计,c语言课程设计报告--贪吃蛇游戏系统

    c语言课程设计报告--贪吃蛇游戏系统 院 系 计算机科学技术学院 班 级 组 长 学 号 指导教师 2017 年 3 月 2 日 C 语言语言基础课程设计基础课程设计 贪贪贪贪吃吃吃吃蛇蛇蛇蛇游游游游 ...

  5. python贪吃蛇最简单代码_利用python实现简易版的贪吃蛇游戏(面向python小白)

    引言 作为python 小白,总是觉得自己要做好百分之二百的准备,才能开始写程序.以至于常常整天在那看各种语法教程,学了几个月还是只会print('hello world'). 这样做效率太低,正确的 ...

  6. jquery实现上下左右键盘监听_python 使用pygame工具包实现贪吃蛇游戏(多彩版)

    今天我们用python和python的工具包pygame来编写一个贪吃蛇的小游戏 贪吃蛇游戏功能介绍 贪吃蛇的游戏规则如下: 通过上下左右键或者WASD键来移动蛇来,让它吃到食物,每吃到食物,蛇的长度 ...

  7. java gui怎么做游戏_Java中关于GUI实现贪吃蛇游戏的简单方法

    这篇文章主要介绍了Java GUI编程之贪吃蛇游戏简单实现方法,详细分析了贪吃蛇游戏的具体实现步骤与相关注意事项,并附带demo源码供读者下载参考,需要的朋友可以参考下 本文实例讲述了Java GUI ...

  8. C++入门——实现贪吃蛇游戏

    参考 <C和C++游戏趣味编程> 贪吃蛇游戏 键盘控制小蛇上.下.左.右移动,迟到食物后长度加1:蛇头碰到自身或窗口边缘,游戏失败 程序框架 #include <graphics.h ...

  9. 学生学python编程---实现贪吃蛇小游戏+源码

    学生学python编程---实现贪吃蛇小游戏+源码 前言 主要设计 1.蛇的表示 2.蛇怎么移动? 3.玩家控制小蛇移动功能的实现 4.如何判定游戏结束? 应用知识点 1.python知识点 1.1 ...

  10. 初入Python(一) Pygame贪吃蛇游戏的编写与改进

    贪吃蛇游戏是一款简单耐玩的休闲益智类游戏,利用pygame可以实现轻松编写,不需要辅佐图片等等元素,可以直接利用涂色方块表示,吃果子变长的原理也很容易实现,将body分为一块一块,每块有自己的位置属性 ...

最新文章

  1. 10个必会的 PyCharm 技巧
  2. Nacos-Nacos和Eureka的对比
  3. 计算机网络(二十五)-IP数据报格式
  4. Flutter抖动动画、颤抖动画、Flutter文字抖动效果
  5. mysql weblogic_weblogic连mysql的问题
  6. C#学习之ObjectOriented、Record
  7. SET FOREIGN_KEY_CHECKS = 0
  8. 视频教程-【曾贤志】Excel函数视频教程-Office/WPS
  9. MMD-MikuMikuDance简易教程(包含软件、资源下载、MME特效中文说明、等等)
  10. java音乐播放器脚本之家,HTML5音乐播放器skPlayer
  11. c programe language learn notes 3
  12. 互联网大厂校招大战:华为研究生年薪最高到45万,腾讯offer数增四成
  13. 加拿大签证材料(一家三口)
  14. “目标-用户-指标”——企业开源运营之道|瞰道@谭中意
  15. 人机交互(HCI)界面设计(笔记)
  16. 网易云音乐基于用户的推荐系统
  17. 2018---2019 数学四班张子琪 C语言设计总结
  18. 海信电视power android,海信电视工厂模式中“To Fac”设置“U”、“M”参数不完全对比...
  19. 高位在前低位在后是啥意思_详解MACD指标的死叉卖点:低位死叉+高位死叉+零轴附近死叉...
  20. Axue8.0基础使用篇

热门文章

  1. html获取鼠标按键数,鼠标在IE、Firefox和Opera点击键所对应的数字代码
  2. pc工具不支持stb的加密方式_如何选择加密狗?九大标准
  3. sscanf fscanf函数格式化输入遇到\n问题
  4. python上传文件到windows_python自动化-WinSpy+pywin32文件上传操作
  5. 发生了变化 触发器函数不能读它_2013年1月18日调试触发器“表发生了变化,触发器或函数不能读它”的出现原因,以及解决方案...
  6. java poi导入50万数据_java从oracle读取50万条数据写入Excel中抛GC overhead limit exc
  7. 注意力机制在softmax时需要除以一个根号8的作用
  8. 中文与Unicode码互转(utf-8)
  9. 梯度下降中的学习率的作用
  10. SGDRegressor