Python:pygame游戏编程之旅三(玩家控制的小球)
上一节实现了小球自由移动,本节在上节基础上增加通过方向键控制小球运动,并为游戏增加了背景图片。
一、实现:
- # -*- coding:utf-8 -*-
- import os
- import sys
- import pygame
- from pygame.locals import *
- def load_image(pic_name):
- '''''
- Function:图片加载函数
- Input:NONE
- Output: NONE
- author: socrates
- blog:http://blog.csdn.net/dyx1024
- date:2012-04-15
- '''
- #获取当前脚本文件所在目录的绝对路径
- current_dir = os.path.split(os.path.abspath(__file__))[0]
- #指定图片目录
- path = os.path.join(current_dir, 'image', pic_name)
- #加载图片
- return pygame.image.load(path).convert()
- def control_ball(event):
- '''''
- Function:控制小球运动
- Input:NONE
- Output: NONE
- author: socrates
- blog:http://blog.csdn.net/dyx1024
- date:2012-04-15
- '''
- #相对偏移坐标
- speed = [x, y] = [0, 0]
- #速度
- speed_offset = 1
- #当方向键按下时,进行位置计算
- if event.type == pygame.KEYDOWN:
- if event.key == pygame.K_LEFT:
- speed[0] -= speed_offset
- if event.key == pygame.K_RIGHT:
- speed[0] = speed_offset
- if event.key == pygame.K_UP:
- speed[1] -= speed_offset
- if event.key == pygame.K_DOWN:
- speed[1] = speed_offset
- #当方向键释放时,相对偏移为0,即不移动
- if event.type in (pygame.KEYUP, pygame.K_LEFT, pygame.K_RIGHT, pygame.K_DOWN) :
- speed = [0, 0]
- return speed
- def play_ball():
- '''''
- Function:主函数
- Input:NONE
- Output: NONE
- author: socrates
- blog:http://blog.csdn.net/dyx1024
- date:2012-04-15
- '''
- pygame.init()
- #窗口大小
- window_size = Rect(0, 0, 700, 500)
- #设置窗口模式
- screen = pygame.display.set_mode(window_size.size)
- #设置窗口标题
- pygame.display.set_caption('运动的小球(2)-通过方向键控制小球移动')
- #加载小球图片
- ball_image = load_image('ball.gif')
- #加载窗口背景图片
- back_image = load_image('back_image.jpg')
- #获取小球图片的区域开状
- ball_rect = ball_image.get_rect()
- while True:
- #退出事件处理
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- pygame.quit()
- sys.exit()
- #使小球移动,速度由speed变量控制
- cur_speed = control_ball(event)
- #Rect的clamp方法使用移动范围限制在窗口内
- ball_rect = ball_rect.move(cur_speed).clamp(window_size)
- #设置窗口背景
- screen.blit(back_image, (0, 0))
- #在背景Surface上绘制 小球
- screen.blit(ball_image, ball_rect)
- #更新窗口内容
- pygame.display.flip()
- if __name__ == '__main__':
- play_ball()
二、测试
1、开始运行,小球位于窗口(0, 0)坐标处。

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

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

Python:pygame游戏编程之旅三(玩家控制的小球)的更多相关文章
- 【python游戏编程之旅】第三篇---pygame事件与设备轮询
本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 在上一篇博客中,我们学习了pygame中的IO.数据http://www.cnblogs.com/msxh/ ...
- 【python游戏编程之旅】第七篇---pygame中的冲突检测技术
本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 上一个博客我们一起学习了pygame中的Sprite模块和如何加载动画:http://www.cnblogs ...
- 【python游戏编程之旅】第一篇---初识pygame
本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 一.pygame简介 Pygame 是一组用来开发游戏软件的 Python 程序模块,基于 SDL 库的基础 ...
- 【python游戏编程之旅】第八篇---pygame游戏开发常用数据结构
本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 上一个博客我们一起学习了pygame中冲突检测技术:http://www.cnblogs.com/msxh/ ...
- 【python游戏编程之旅】第六篇---pygame中的Sprite(精灵)模块和加载动画
本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 直到现在我们已经学了很多pygame基础知识了,从这篇博客开始我们将会学习pygame中高级部分,更多和精灵 ...
- 【python游戏编程之旅】第四篇---pygame中加载位图与常用的数学函数。
本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 在上一篇博客中,我们学习了pygame事件与设备轮询.http://www.cnblogs.com/msxh ...
- 【python游戏编程之旅】第二篇--pygame中的IO、数据
本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 在上一篇中,我们介绍了pygame的入门操作http://www.cnblogs.com/msxh/p/49 ...
- 【python游戏编程之旅】第九篇---嗷大喵快跑小游戏开发实例
本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 前几期博客我们一起学习了,pygame中的冲突检测技术以及一些常用的数据结构. 这次我们来一起做一个简单的酷 ...
- 【python游戏编程之旅】第五篇---嗷大喵爱吃鱼小游戏开发实例
本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 我们一同在前几期的博客中已经学到了很多pygame的基本知识了,现在该做个小游戏实战一下了. 前几期博客链接 ...
- python+pygame游戏开发之使用Py2exe打包游戏
最近在用python+pygame 开发游戏,写完以后在分享给朋友玩的时候遇到了很大的问题,只有搭建了环境才能运行python脚本. 这会吓退99%以上的人……所以把我们的游戏打包(注意是打包而不是编 ...
随机推荐
- 六,Spring Boot 容器中 Lombok 插件的详细使用,简化配置,提高开发效率
六,Spring Boot 容器中 Lombok 插件的详细使用,简化配置,提高开发效率 @ 目录 六,Spring Boot 容器中 Lombok 插件的详细使用,简化配置,提高开发效率 1. Lo ...
- 【转】如何在ASP.NET Core自定义中间件中读取Request.Body和Response.Body的内容?
文章名称: 如何在ASP.NET Core自定义中间件读取Request.Body和Response.Body的内容?作者: Lamond Lu地址: https://www.cnblogs.com/ ...
- 全网最适合入门的面向对象编程教程:45 Python 实现常见数据结构-链表、树、哈希表、图和堆
全网最适合入门的面向对象编程教程:45 Python 实现常见数据结构-链表.树.哈希表.图和堆 摘要: 数据结构是计算机科学中的一种组织和存储数据的方式,它决定了数据的访问方式和操作效率,数据结构的 ...
- Spark - Pandas UDF
spark 本身对 dataframe 的操作支持没有像pandas 那样强大,所有我们可以把spark dataframe 转化成 pandas dataframe 来利用pandas datafr ...
- Unity 刚体 AddForce 的几种力类型
今天在实现 2D 横版跳跃的时候,发现使用AddForce添加的力太突兀了,没有逐渐向上的过程,发现AddForce还有ForceMode mode参数 以下部分内容摘自Bing Copilot总结 ...
- Serilog文档翻译系列(三) - 基础配置
Serilog 使用简单的 C# API 来配置日志记录.当需要外部配置时,可以(慎用)通过使用 Serilog.Settings.AppSettings 包或 Serilog.Settings.Co ...
- Glob 语法
Glob 通常用来匹配 file, gitignore, Tailwind CSS purge 都有用到 参考: Online Test Tool 语法解释 常用到的 ./PdfTemplate/** ...
- java 线程、进程及相关知识点 《笔记一》
一.线程.进程 线程,就是是进程的一个单位,程序最小执行单位. 进程,就是一个执行中的应用程序:由此可见,进程是由很多线程组成的: 线程生命周期,就是管杀也管埋的过程,生老病死: 线程的5个状态: 新 ...
- SuperMap iDesktopX创建HBase数据源并导入数据
需提前部署HBase集群,HBase环境搭建请查看文章https://www.cnblogs.com/zhangyongli2011/p/12034628.html 本文基于10.1.1 win版本s ...
- 《Vue.js 设计与实现》读书笔记 - 第12章、组件的实现原理
第12章.组件的实现原理 12.1 渲染组件 在渲染器内部的实现看,一个组件是一个特殊类型的虚拟 DOM 节点.之前在 patch 我们判断了 VNode 的 type 值来处理,现在来处理类型为对象 ...