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

代码:

  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. DPABInet做 Network Contruction时一直报错“函数或变量 'nets_netmats' 无法识别”

    DPABInet模块做 Network Contruction时一直显示报错"函数或变量 'nets_netmats' 无法识别",是因为没有将FSLNets导入路径,所以找不到该 ...

  2. Unity 刚体 AddForce 的几种力类型

    今天在实现 2D 横版跳跃的时候,发现使用AddForce添加的力太突兀了,没有逐渐向上的过程,发现AddForce还有ForceMode mode参数 以下部分内容摘自Bing Copilot总结 ...

  3. Go实现实时文件监控功能

    一.使用库介绍 fsnotify 是 Go 语言中的一个库,用于监听文件系统的变更事件.它允许程序注册对文件系统事件的兴趣,并在这些事件发生时接收通知.fsnotify 主要用来监控目录下的文件变化, ...

  4. vue源码解析-实现一个基础的MVVM框架

    基本介绍 vue.js采用数据劫持结合发布-订阅模式的方式,通过Object.defineProperty()来劫持各个属性的getter,setter,在数据变动时发布消息给订阅者,触发响应的监听回 ...

  5. AI将诗意装进口袋!合合信息扫描全能王“扫描书籍”功能优化上线

    人间最美四月天,正是读书好时节.4月20日至23日,正值"世界读书日"之际,合合信息旗下扫描全能王联合上海首家图像小说主题书店--安古莱姆书店,共同发起"春天正是读书天& ...

  6. Go runtime 调度器精讲(三):main goroutine 创建

    原创文章,欢迎转载,转载请注明出处,谢谢. 0. 前言 回顾下 上一讲 的内容.主线程 m0 蓄势待发,准备干活.g0 为 m0 提供了执行环境,P 和 m0 绑定,为 m0 提供活,也就是 goro ...

  7. ASP.NET Core Library – Google libphonenumber (Country Dial Code)

    前言 Google libphonenumber 是 Java 的, ASP.NET Core 只是 port 过去而已. 以前在 angular2 学习笔记 ( translate, i18n 翻译 ...

  8. iframe嵌套登录页-页面无法加载

    背景 活动页面和登录页跨域,过去都是跳转到登录页登录之后再跳转回来,体验不好. 现在需要将登录模块嵌入到活动页,因为懒,不想开发重复的模块,首先我想到的是iframe 刚开始还能正常使用,一段时间后安 ...

  9. [Tkey] 黑兔子,白兔子

    CL-21 一般拿到这个题第一眼都应该能看出并查集,subtask1 是给并查集暴力修改的. 后面 subtask2 没有联通操作,是给纯线段树的,也算是启发正解了 再往下可以考虑操作 \(1\) 采 ...

  10. 使用VNC连接ubuntu16.4错误Authentication Failure问题

    解决办法:是因为vnc用一套自己的密码系统,不要去输入ssh登录时的密码,所以只需要进入远程服务器中,设置一哈vnc的密码即可! 在终端输入命令:vncpasswd 到此可以试试远程