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%以上的人……所以把我们的游戏打包(注意是打包而不是编 ...
随机推荐
- 解密Prompt系列37. RAG之前置决策何时联网的多种策略
之前我们分别讨论过RAG中的召回多样性,召回信息质量和密度,还有calibration的后处理型RAG.前置判断模型回答是否要走RAG的部分我们之前只提及了自我矛盾和自我拒绝者两个方案.这一章我们再补 ...
- cesium中添加建筑白模
1.在cesium中添加模型依赖于Cesium ion帐户的资产id,在这里创建账户. 2.上传模型(模型文件类型在Cesium ion中有说明,模型的提取办法可在这里查看)到账户中并平铺为3D Ti ...
- Angular 18+ 高级教程 – 初识 Angular
Before Starting 深入学习 Angular 是一件非常耗时耗力的事情. 实施 Angular 到项目中同样也是一件非常耗时耗力的事情. 在我们做出这么大的投入之前,我们有必要先思考以下几 ...
- 微信小程序开发疑难
1.开发者工具在小程序webview中注入wx时会提示token过期,但真机正常
- 图片 电力电网行业IT运维方案
智能电网背景下,电力.电网企业信息化逐渐渗透到其业务链的各个环节,云计算.物联网.移动互联网等新技术的应用,更驱动信息化与业务创新深度融合.电力.电网企业集团信息系统群逐渐朝着一体化方向发展,信息链越 ...
- Hugging Face + JuiceFS:多用户多节点环境下提升模型加载效率
Hugging Face 的 Transformers 是一个功能强大的机器学习框架,提供了一系列 API 和工具,用于预训练模型的下载和训练.为了避免重复下载,提高训练效率,Transformers ...
- ChallengeMobile
解题思路 获取到输入的字符串保存到s,调用Jformat方法对s进行验证,返回true则代表输入字符串正确反之错误. Jformat方法分析: 首先看到使用了LoadData加载了"ming ...
- IOC注入分类 依赖注入
依赖注入 也就是服务的注入 可以理解 一些服务的容器,目的:把一些全局需要使用的资源,服务放到某个接口中,使其可以在全局中使用 和前端的状态管理工具实现的功能差不多 注册服务的三种形式 单例模式Ad ...
- day17-打印三角形及Debug
打印三角形 之前学习C++的时候也曾做过,于是乎凭借记忆又试了试,也还能试出来.代码如下: #include<stdio.h> int main(){ int i,j; for(i= ...
- Exchange限制邮箱用户每天/每分钟的发送邮件数量和速率
Exchange限制邮箱用户每天/每分钟的发送邮件数量和速率 近期遇到部分Exchange客服反馈内部邮箱账号密码被盗,给内部其他同事和外部邮箱发送大量钓鱼和诈骗邮件:对公司造成很大负面影响和经济损失 ...