本节实现一个在窗口中自由运动的小球程序,做了详细注释,不多做解释了。

代码:

  1. # -*- coding:utf-8 -*-
  2. import sys
  3. import pygame
  4. from pygame.locals import *
  5. def play_ball():
  6. pygame.init()
  7. #窗口大小
  8. window_size = (width, height) =(700, 500)
  9. #小球运行偏移量[水平,垂直],值越大,移动越快
  10. speed = [1, 1]
  11. #窗口背景色RGB值
  12. color_black = (0, 0, 139)
  13. #设置窗口模式
  14. screen = pygame.display.set_mode(window_size)
  15. #设置窗口标题
  16. pygame.display.set_caption('运动的小球')
  17. #加载小球图片
  18. ball_image = pygame.image.load('ball.gif')
  19. #获取小球图片的区域开状
  20. ball_rect = ball_image.get_rect()
  21. while True:
  22. #退出事件处理
  23. for event in pygame.event.get():
  24. if event.type == pygame.QUIT:
  25. pygame.quit()
  26. sys.exit()
  27. #使小球移动,速度由speed变量控制
  28. ball_rect = ball_rect.move(speed)
  29. #当小球运动出窗口时,重新设置偏移量
  30. if (ball_rect.left < 0) or (ball_rect.right > width):
  31. speed[0] =- speed[0]
  32. if (ball_rect.top < 0) or (ball_rect.bottom > height):
  33. speed[1] =- speed[1]
  34. #填充窗口背景
  35. screen.fill(color_black)
  36. #在背景Surface上绘制 小球
  37. screen.blit(ball_image, ball_rect)
  38. #更新窗口内容
  39. pygame.display.update()
  40. if __name__ == '__main__':
  41. play_ball()

测试:

动画程序,抓几张不同时刻的图片。

1、

2、

3、

PS:

有朋友说球速度还是太快了,此时可以加个定时器控制一下,如下:

  1. # -*- coding:utf-8 -*-
  2. import sys
  3. import pygame
  4. from pygame.locals import *
  5. def play_ball():
  6. pygame.init()
  7. #窗口大小
  8. window_size = (width, height) =(700, 500)
  9. #小球运行偏移量[水平,垂直],值越大,移动越快
  10. speed = [1, 1]
  11. #窗口背景色RGB值
  12. color_black = (0, 0, 139)
  13. #设置窗口模式
  14. screen = pygame.display.set_mode(window_size)
  15. #设置窗口标题
  16. pygame.display.set_caption('运动的小球')
  17. #加载小球图片
  18. ball_image = pygame.image.load('ball.gif')
  19. #获取小球图片的区域开状
  20. ball_rect = ball_image.get_rect()
  21. frames_per_sec = 10
  22. fps_clock = pygame.time.Clock()
  23. while True:
  24. #退出事件处理
  25. for event in pygame.event.get():
  26. if event.type == pygame.QUIT:
  27. pygame.quit()
  28. sys.exit()
  29. #使小球移动,速度由speed变量控制
  30. ball_rect = ball_rect.move(speed)
  31. #当小球运动出窗口时,重新设置偏移量
  32. if (ball_rect.left < 0) or (ball_rect.right > width):
  33. speed[0] =- speed[0]
  34. if (ball_rect.top < 0) or (ball_rect.bottom > height):
  35. speed[1] =- speed[1]
  36. #填充窗口背景
  37. screen.fill(color_black)
  38. #在背景Surface上绘制 小球
  39. screen.blit(ball_image, ball_rect)
  40. #更新窗口内容
  41. pygame.display.update()
  42. fps_clock.tick(frames_per_sec)
  43. if __name__ == '__main__':
  44. play_ball()

Python:pygame游戏编程之旅二(自由移动的小球)的更多相关文章

  1. 【python游戏编程之旅】第七篇---pygame中的冲突检测技术

    本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 上一个博客我们一起学习了pygame中的Sprite模块和如何加载动画:http://www.cnblogs ...

  2. 【python游戏编程之旅】第八篇---pygame游戏开发常用数据结构

    本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 上一个博客我们一起学习了pygame中冲突检测技术:http://www.cnblogs.com/msxh/ ...

  3. 【python游戏编程之旅】第六篇---pygame中的Sprite(精灵)模块和加载动画

    本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 直到现在我们已经学了很多pygame基础知识了,从这篇博客开始我们将会学习pygame中高级部分,更多和精灵 ...

  4. 【python游戏编程之旅】第四篇---pygame中加载位图与常用的数学函数。

    本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 在上一篇博客中,我们学习了pygame事件与设备轮询.http://www.cnblogs.com/msxh ...

  5. 【python游戏编程之旅】第三篇---pygame事件与设备轮询

    本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 在上一篇博客中,我们学习了pygame中的IO.数据http://www.cnblogs.com/msxh/ ...

  6. 【python游戏编程之旅】第二篇--pygame中的IO、数据

    本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 在上一篇中,我们介绍了pygame的入门操作http://www.cnblogs.com/msxh/p/49 ...

  7. 【python游戏编程之旅】第一篇---初识pygame

    本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 一.pygame简介 Pygame 是一组用来开发游戏软件的 Python 程序模块,基于 SDL 库的基础 ...

  8. 【python游戏编程之旅】第九篇---嗷大喵快跑小游戏开发实例

    本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 前几期博客我们一起学习了,pygame中的冲突检测技术以及一些常用的数据结构. 这次我们来一起做一个简单的酷 ...

  9. 【python游戏编程之旅】第五篇---嗷大喵爱吃鱼小游戏开发实例

    本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 我们一同在前几期的博客中已经学到了很多pygame的基本知识了,现在该做个小游戏实战一下了. 前几期博客链接 ...

  10. python+pygame游戏开发之使用Py2exe打包游戏

    最近在用python+pygame 开发游戏,写完以后在分享给朋友玩的时候遇到了很大的问题,只有搭建了环境才能运行python脚本. 这会吓退99%以上的人……所以把我们的游戏打包(注意是打包而不是编 ...

随机推荐

  1. Scikit-learn从入门到放弃

    目录 Scikit-learn简介 SVM分类 随机森林回归 K-means聚类 前置建议阅读: 1.NumPy从入门到放弃 2.Pandas从入门到放弃 3.SciPy从入门到放弃 Scikit-l ...

  2. 神经网络之卷积篇:详解卷积神经网络示例(Convolutional neural network example)

    详解卷积神经网络示例 假设,有一张大小为32×32×3的输入图片,这是一张RGB模式的图片,想做手写体数字识别.32×32×3的RGB图片中含有某个数字,比如7,想识别它是从0-9这10个数字中的哪一 ...

  3. 题解:AT_arc116_b [ARC116B] Products of Min-Max

    在题库里面乱翻,就翻到了. 因为在这道题里面子序列不需要考虑元素顺序,所以原序列无论是什么顺序都不会影响答案. 所以先把元素按照从大到小的顺序排列,然后考虑每个元素的贡献. 在当前序列中,对于元素 \ ...

  4. 物体检测序列之一:NMS

    IoU (Intersection over Union),交并比,是衡量物体检测模型在特定数据集上检测效果好坏的一个常用的标准,通常情况下,想要通过IoU来衡量物体检测模型好坏需要具备以下几点: 1 ...

  5. RxJS 系列 – Transformation Operators

    前言 前几篇介绍过了 Creation Operators Filter Operators Join Creation Operators Error Handling Operators 这篇继续 ...

  6. FFmpeg开发笔记(五十三)移动端的国产直播录制工具EasyPusher

    ​EasyPusher是一款国产的RTSP直播录制推流客户端工具,它支持Windows.Linux.Android.iOS等操作系统.EasyPusher采用RTSP推流协议,其中安卓版EasyPus ...

  7. [TK] Blocks 单调栈

    题目描述 给出 \(N\) 个正整数 \(a[1..N]\) ,再给出一个正整数 \(k\) ,现在可以进行如下操作:每次选择一个大于 \(k\) 的正整数 \(a[i]\) ,将 \(a[i]\) ...

  8. SpringBoot创建微服务项目

    下载安装并配置git 为自己的git设置名字 git config --global user.name "XXX" 配置自己注册码云的邮箱 git config --global ...

  9. opengl在编译的过程中,glad使用

    我在编译的过程中,遇到:无法找到 -lglad这个错误.最后才发现对于glad的使用不能用-lglad.因为我们通过glad的在线服务可以得到一些文件,其中glad.c文件我们是需要放在我们的项目下面 ...

  10. manim边学边做--无向图

    无向图属于数学中的图论这一学科, 所谓无向图G,就是由顶点集V(非空集合)和边集E(由V中元素构成的无序二元组的集合)组成的图, 可表示为G=(V,E). 在无向图中,边没有方向,即从顶点A到顶点B的 ...