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

一、实现:

  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. 【YashanDB数据库】YashanDB如何回收表空间

    确认表空间高水位线,是否有可回收空间. select a.tablespace_name,a.high_water_mark,b.user_bytes,b.total_bytes from (SELE ...

  2. P7706 「Wdsr-2.7」文文的摄影布置

    题意 给定长度为 \(n\) 的数组 \(a\) 和 \(b\),支持单点修改,\(q\) 次区间查询 \(\max_{l\le i<k\le r} \{a_i + a_k - \min_{i& ...

  3. C++ : 如何用C语言实现C++的虚函数机制?

    前言 在 googletest的源码中,看到gtest-matchers.h 中实现的MatcherBase 类自定义了一个 VTable,这种设计实现了一种类似于C++虚函数的机制.C++中的虚函数 ...

  4. 用Python实现阿拉伯数字转换成中国汉字

    要将阿拉伯数字转换成中国汉字表示的数字,我们需要一个映射表来转换每个数字,并且处理不同位数的数字(如十.百.千.万等). 1. Python实现阿拉伯数字转换成中国汉字 下面是一个完整的Python代 ...

  5. 全网最适合入门的面向对象编程教程:46 Python函数方法与接口-函数与事件驱动框架

    全网最适合入门的面向对象编程教程:46 Python 函数方法与接口-函数与事件驱动框架 摘要: 函数是 Python 中的一等公民,是一种可重用的代码块,用于封装特定的逻辑:事件驱动框架是一种编程模 ...

  6. tracking调研

    常用框架有以下三种:       Separate Detection and Embedding (SDE- 物体检测,特征提取与物体关联),JOINT Detection and Embeddin ...

  7. SQL Server 冗余维护

    介绍 冗余是维护的魔鬼, 是性能优化的天使 常见的冗余有 1. computed column 2. principal 的识别字段 3. cross computed 4. cascade soft ...

  8. SpringMVC —— 请求参数

    请求映射路径    请求方式   get请求传参        post请求传参          POST请求中文参数乱码问题        请求参数(五种类型数据参数)               ...

  9. QT6窗口系统之QT底层窗口QWindow:QT框架中哪些常见窗口是基于QWindow的? 如何实现QT框架栅格窗口?如何实现QT框架OpenGL窗口?

    QT6窗口系统之QT底层窗口QWindow:QT框架中哪些常见窗口是基于QWindow的? 如何实现QT框架栅格窗口?如何实现QT框架OpenGL窗口? 简介 本文介绍了QT6窗口系统中的QT底层窗口 ...

  10. 关于 CLOI 头像&博客主题征集

    是这样的,开了一个新号准备做一个官号,当作一个公告栏(?),大家访问博客或者看消息也方便 现在苦于脑袋比较笨,想不出头像来,有意者可以帮设计下 此外,还(选择性地)需要一个博客主题,主要是简洁,打开会 ...