上一节实现了小球自由移动,本节在上节基础上增加通过方向键控制小球运动,并为游戏增加了背景图片。

一、实现:

  1. # -*- coding:utf-8 -*-
  2. import os
  3. import sys
  4. import pygame
  5. from pygame.locals import *
  6. def load_image(pic_name):
  7. '''''
  8. Function:图片加载函数
  9. Input:NONE
  10. Output: NONE
  11. author: socrates
  12. blog:http://blog.csdn.net/dyx1024
  13. date:2012-04-15
  14. '''
  15. #获取当前脚本文件所在目录的绝对路径
  16. current_dir = os.path.split(os.path.abspath(__file__))[0]
  17. #指定图片目录
  18. path = os.path.join(current_dir, 'image', pic_name)
  19. #加载图片
  20. return pygame.image.load(path).convert()
  21. def control_ball(event):
  22. '''''
  23. Function:控制小球运动
  24. Input:NONE
  25. Output: NONE
  26. author: socrates
  27. blog:http://blog.csdn.net/dyx1024
  28. date:2012-04-15
  29. '''
  30. #相对偏移坐标
  31. speed = [x, y] = [0, 0]
  32. #速度
  33. speed_offset = 1
  34. #当方向键按下时,进行位置计算
  35. if event.type == pygame.KEYDOWN:
  36. if event.key == pygame.K_LEFT:
  37. speed[0] -= speed_offset
  38. if event.key == pygame.K_RIGHT:
  39. speed[0] = speed_offset
  40. if event.key == pygame.K_UP:
  41. speed[1] -= speed_offset
  42. if event.key == pygame.K_DOWN:
  43. speed[1] = speed_offset
  44. #当方向键释放时,相对偏移为0,即不移动
  45. if event.type in (pygame.KEYUP, pygame.K_LEFT, pygame.K_RIGHT, pygame.K_DOWN) :
  46. speed = [0, 0]
  47. return speed
  48. def play_ball():
  49. '''''
  50. Function:主函数
  51. Input:NONE
  52. Output: NONE
  53. author: socrates
  54. blog:http://blog.csdn.net/dyx1024
  55. date:2012-04-15
  56. '''
  57. pygame.init()
  58. #窗口大小
  59. window_size = Rect(0, 0, 700, 500)
  60. #设置窗口模式
  61. screen = pygame.display.set_mode(window_size.size)
  62. #设置窗口标题
  63. pygame.display.set_caption('运动的小球(2)-通过方向键控制小球移动')
  64. #加载小球图片
  65. ball_image = load_image('ball.gif')
  66. #加载窗口背景图片
  67. back_image = load_image('back_image.jpg')
  68. #获取小球图片的区域开状
  69. ball_rect = ball_image.get_rect()
  70. while True:
  71. #退出事件处理
  72. for event in pygame.event.get():
  73. if event.type == pygame.QUIT:
  74. pygame.quit()
  75. sys.exit()
  76. #使小球移动,速度由speed变量控制
  77. cur_speed = control_ball(event)
  78. #Rect的clamp方法使用移动范围限制在窗口内
  79. ball_rect = ball_rect.move(cur_speed).clamp(window_size)
  80. #设置窗口背景
  81. screen.blit(back_image, (0, 0))
  82. #在背景Surface上绘制 小球
  83. screen.blit(ball_image, ball_rect)
  84. #更新窗口内容
  85. pygame.display.flip()
  86. if __name__ == '__main__':
  87. play_ball()

二、测试

1、开始运行,小球位于窗口(0, 0)坐标处。

2、按下向右方向键,使用小球向右移动

3、按下向下方向键,使用小球向下移动。

Python:pygame游戏编程之旅三(玩家控制的小球)的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. python pyqt6 QComboBox 圆角边框

    圆角边框周围显示黑色直角 QComboBox  新增 如下设定即可 xxx_source.view().window().setWindowFlag(Qt.WindowType.NoDropShado ...

  2. Argo CD初体验

    什么是 Argo CD? Argo CD 是一个声明式的 GitOps 持续交付工具,用于 Kubernetes 集群.它通过持续监控 Git 仓库中的 Kubernetes 资源配置文件,将这些配置 ...

  3. 10 分钟快速搞懂 Lambda 表达式

    Lambda简介 Lambda表达式是Java8引入的一个重要特性,相当于一个语法糖. 语法糖(Syntactic sugar)是指在编程语言中引入的一种语法,它可以使代码更易读.更简洁,但并没有引入 ...

  4. SpringMVC —— 响应

    响应页面    响应文本数据    响应json数据    响应json集合数据    注解      转换json时使用了类型转换器     

  5. BOOT跳转APP,STM32F4正常,但是GD32F4起不来的问题

    问题描述:  stm32F4可以正常从BOOT跳转执行APP,到了GD32F4,卡死在APP程序的这里.  临时解决办法: APP程序内 把这两句代码都屏蔽掉就好了. 相关资料搜索: 最佳解决方案: ...

  6. SuperMap流数据应用技术方案

    流数据应用技术方案针对流数据应用场景,针对流数据的海量.多源.持续等特征,进行持续地获取相关的动态位置,以及持续地分析.处理和挖掘. 本章沿用基于单机SuperMap iServer环境,介绍流数据处 ...

  7. Element PRO 破解版 3.18.1版插件

    百度网盘提取 链接:https://pan.baidu.com/s/1KKOm7O1ghhIoYNiQPdzG_Q 提取码:1234

  8. 关于自定义事件父子组件传值问题 $event

    1.$event 是 vue 提供的特殊变量,用来表示原生的事件参数对象 event 1.1在原生事件中,$event是事件对象 可以点出来属性 2.在原生事件中,$event是事件对象,在自定义事件 ...

  9. Maven的安装部署(不踩雷版)

    在idea中配置maven需注意maven版本和idea版本相匹配.本人使用idea版本为2020.3,jdk1.8,maven3.6.3可以与之相匹配. 一.下载maven maven下载官网地址: ...

  10. Oracle中查看隐含参数的sql

    select a.ksppinm "Parameter", a.ksppdesc "Description", b.ksppstvl "Session ...